Der perfekte Office Server mit Mandriva Directory Server auf Debian Etch

Version 1.0
Author: Oliver Meyer <o [dot] meyer [at] projektfarm [dot] de>


Diese Anleitung veranschaulicht, wie man einen Mandriva Directory Server (MDS) auf Debian Etch einrichtet. Das daraus resultierende System liefert einen funktionsreichen Büroserver für kleine und mittlere Unternehmen - der via web-basierter Mandriva Management Console (MMC) einfach zu verwalten ist.

Hauptfunktionen

  • Einfaches Verwalten via MMC
  • System weite OpenLDAP Integration
  • SAMBA Primary Domain Controller (PDC)
  • Postfix Mailserver mit Dovecot, Amavis, Spamassassin und ClamAV (POP3/IMAP/SSL/TLS/Quota)
  • BIND DNS-server
  • ISC DHCP-server
  • Squid web-proxy mit SquidGuard
Diese Anleitung ist ein praktischer Leitfaden ohne jegliche Garantie - theoretisches Hintergrundwissen wird nicht abgedeckt. Es gibt viele Möglichkeiten ein solches System einzurichten - dies ist der Weg, den ich gewählt habe.

Vorwort

Diese Anleitung ist ziemlich komplex. Nimm Dir bitte Zeit für eine intensive Lektüre und folge der Anleitung Schritt für Schritt. Die kleinste Abweichung könnte bewirken, dass Dein System nicht richtig funktioniert.

1 Vorbereitung

1.1 Basissystem

Set up a standard debian etch system and update it. I used the following configuration for this howto and the attached virtual machine that is available for our contributors:

Hostname: server1.example.com
SAMBA domain: EXAMPLE
IP: 192.168.0.100
Gateway: 192.168.0.2
Alle Passwörter: howtoforge

1.2 Hostname

Bearbeite die Host Datei - weise der Server IP den Hostnamen zu.

vi /etc/hosts

So sollte es aussehen:
127.0.0.1       localhost.localdomain   localhost
192.168.0.100 server1.example.com server1 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
Füge danach den Hostnamen in die Hostnamen Datei ein ...

echo server1.example.com > /etc/hostname

... und starte das System neu.

reboot

Wenn das System hochgefahren ist, sollte die Ausgabe von ...

hostname

... und ...

hostname -f

... wie folgt lauten:

server1.example.com


1.3 Dateisystem ACLs

Damit es SAMBA möglich ist die Dateisystem ACLs zwischen dem Linux Server und dem Windows Client abzubilden, musst Du ACL-support für den entsprechenden mount point aktivieren.

vi /etc/fstab

Füge die Option "acl" zu dem mount point hinzu, auf dem die SAMBA Verzeichnisse und Benutzer gespeichert werden sollen. Für den Fall dass es "/" ist - sollte der Inhalt wie folgt aussehen:
# /etc/fstab: static file system information.
# # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 / ext3 defaults,acl,errors=remount-ro 0 1 /dev/sda5 none swap sw 0 0 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
Hänge danach den mount point neu ein.

mount -o remount /

Wenn alles geklappt hat, sollte der Befehl ...

mount -l

... die Option "acl" für den entsprechenden mount point wie folgt anzeigen:

/dev/sda1 on / type ext3 (rw,acl,errors=remount-ro)


2 Paketdatenbanken

2.1 MDS

Die MDS Paketdatenbank bietet MDS-bezogene Pakete sowie gepatchte Pakete für bind9 & dhcp3 an.

vi /etc/apt/sources.list

Füge folgende Zeilen der Datei hinzu.

# MDS repository
deb http://mds.mandriva.org/pub/mds/debian etch main

2.2 Debian Volatile

Die Debian Volatile Paketdatenbank liefert neuere Pakete für ClamAV & Spamassassin als die Standard Debian Paketdatenbank.

vi /etc/apt/sources.list

Füge folgende Zeilen der Datei hinzu.

# Debian Volatile
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free

2.3 Debian Backports

Die Debian Backports Paketdatenbank liefert neuere Pakete für dovecot.

vi /etc/apt/sources.list

Füge folgende Zeilen der Datei hinzu.

# Debian Etch Backports
deb http://www.backports.org/debian etch-backports main

Aktualisiere danach apt.

apt-get update


3 Benötigte Pakete

3.1 Installation

Installiere die für dieses Setup benötigten Pakete.

apt-get install mmc-web-base mmc-web-mail mmc-web-network mmc-web-proxy mmc-web-samba mmc-agent python-mmc-plugins-tools python-mmc-base python-mmc-mail python-mmc-network python-mmc-proxy python-mmc-samba postfix postfix-ldap sasl2-bin libsasl2 libsasl2-modules amavisd-new libdbd-ldap-perl libnet-ph-perl libnet-snpp-perl libnet-telnet-perl lzop nomarch zoo clamav clamav-daemon gzip bzip2 unzip unrar-free unzoo arj spamassassin libnet-dns-perl razor pyzor dcc-client slapd ldap-utils libnss-ldap libpam-ldap dhcp3-server dhcp3-server-ldap bind9 samba smbclient smbldap-tools cupsys cupsys-client foomatic-db-engine foomatic-db foomatic-db-hpijs foomatic-db-gutenprint foomatic-filters foomatic-filters-ppds fontconfig hpijs-ppds linuxprinting.org-ppds

Die dovecot-Pakete in der Standard Debian Paketdatenbank führen im Zusammenhang mit LDAP zu einem Fehler - Du musst also die dovecot-Pakete der Debian Backports Datenbank verwenden.

apt-get install -t etch-backports dovecot-common dovecot-imapd dovecot-pop3d

Falls Du HP Drucker verwenden möchtest, empfiehlt es sich weitere Pakete zu installieren.

apt-get install hplip libusb-dev python-dev python-reportlab libcupsys2-dev libjpeg62-dev libsnmp9-dev lsb-core


3.2 Konfiguration

Während der Installation der neuen Pakete werden Dir ein paar Fragen gestellt - beantworte sie wie folgt.

3.2.1 LDAP

Gib das Passwort für den LDAP admin ein und bestätige es. (howtoforge)

3.2.2 Samba

Gib einen Namen für Deine Domain ein. (EXAMPLE)
Wähle "No" wenn Du gefragt wirst, ob smb.conf modifiziert werden soll WINS Einstellungen von DHCP zu verwenden.

3.2.3 Postfix

Wähle "Internet Site" als allgemeine Konfigurationsart.
Gib "server1.example.com" als Mail Namen ein.

3.2.4 Libnss-LDAP

Gib "ldap://127.0.0.1/" als LDAP Server URI ein.
Gib "dc=example,dc=com" als Bezeichnung für die Search Base ein.
Wähle die LDAP Version aus. (3)
Gib "cn=admin,dc=example,dc=com" als LDAP Konto für Root ein.
Gib das Passwort für den LDAP admin ein. (howtoforge)

3.2.5 Libpam-LDAP

Wähle "Yes" wenn Du gefragt wirst, ob der lokale Root der Datenbank admin sein soll.
Wähle "No" wenn Du gefragt wirst, ob die LDAP Datenbank ein Login benötigt.
Gib "cn=admin,dc=example,dc=com" als LDAP Konot für Root ein.
Gib ein Passwort für den LDAP admin ein. (howtoforge)

4 LDAP Konfiguration

4.1 Schema Dateien

Kopiere zunächst die Schema Dateien für MMC, Mail, SAMBA, Drucker, DNS und DHCP in das LDAP Schema Verzeichnis.

cp /usr/share/doc/python-mmc-base/contrib/ldap/mmc.schema /etc/ldap/schema/
cp /usr/share/doc/python-mmc-base/contrib/ldap/mail.schema /etc/ldap/schema/
zcat /usr/share/doc/python-mmc-base/contrib/ldap/samba.schema.gz > /etc/ldap/schema/samba.schema
zcat /usr/share/doc/python-mmc-base/contrib/ldap/printer.schema.gz > /etc/ldap/schema/printer.schema
zcat /usr/share/doc/python-mmc-base/contrib/ldap/dnszone.schema.gz > /etc/ldap/schema/dnszone.schema
zcat /usr/share/doc/python-mmc-base/contrib/ldap/dhcp.schema.gz > /etc/ldap/schema/dhcp.schema

Füge dann die Schema Dateien in die LDAP Konfiguration ein

vi /etc/ldap/slapd.conf

Füge die Schema Dateien nach dem inetorgperson Schema hinzu.

include /etc/ldap/schema/mmc.schema
include /etc/ldap/schema/samba.schema
include /etc/ldap/schema/printer.schema
include /etc/ldap/schema/mail.schema
include /etc/ldap/schema/dnszone.schema
include /etc/ldap/schema/dhcp.schema

Aktiviere den schemacheck (nach den obigen Zeilen).

schemacheck on


4.2 Basis-Konfiguration

In diesem Schritt brauchst Du das ldap admin Passwort (welches Du während der Paketinstallation in Schritt 3 definiert hast) in verschlüsselter Form (SSHA) - also lass es uns verschlüsseln.

slappasswd -s %ldap_admin_password%

Z.B.:

slappasswd -s howtoforge

Die Ausgabe sollte wie folgt aussehen:

{SSHA}kPd9OeiwGx4lyZUiQ2NFmzXV0JWyLV9A

Notiere es und fahre fort - öffne die LDAP Server Konfigurationsdatei.

vi /etc/ldap/slapd.conf

Suche nach der kommentierten Zeile mit dem Eintrag für den LDAP admin (rootdn) ...

# rootdn "cn=admin,dc=example,dc=com"

... und kommentiere sie aus. Füge danach eine neue Zeile gleich darunter ein. Du musst das verschlüsselte ldap admin Passwort eingeben, das Du zu Beginn dieses Schrittes generiert hast.

rootpw %encrypted_ldap_admin_password%

Z.B.:

rootpw {SSHA}kPd9OeiwGx4lyZUiQ2NFmzXV0JWyLV9A

Als Nächstes müssen wir die Indizierungsoptionen für die Datenbank modifizieren. Suche nach folgendem Eintrag:

# Indexing options for database #1

Entferne die unten stehende Zeile...

index objectClass eq

... und füge folgende Zeilen ein:

index objectClass,uidNumber,gidNumber eq
index cn,sn,uid,displayName pres,sub,eq
index memberUid,mail,givenname eq,subinitial
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq
index zoneName,relativeDomainName eq
index dhcpHWAddress,dhcpClassData eq

Füge nun SAMBA der Zugriffs-Liste für die Datenbank hinzu. Suche folgende Zeile:

access to attrs=userPassword,shadowLastChange

Ändere sie, damit sie wie folgt aussieht:

access to attrs=userPassword,sambaLMPassword,sambaNTPassword

Nun sollte die LDAP Server Konfigurationsdatei wie folgt aussehen:
# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options. ####################################################################### # Global Directives: # Features to permit #allow bind_v2 # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/mmc.schema include /etc/ldap/schema/samba.schema include /etc/ldap/schema/printer.schema include /etc/ldap/schema/mail.schema include /etc/ldap/schema/dnszone.schema include /etc/ldap/schema/dhcp.schema schemacheck on # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd/slapd.args # Read slapd.conf(5) for possible values loglevel 0 # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb # The maximum number of entries that is returned for a search operation sizelimit 500 # The tool-threads parameter sets the actual amount of cpu's that is used # for indexing. tool-threads 1 ####################################################################### # Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend bdb checkpoint 512 30 ####################################################################### # Specific Backend Directives for 'other': # Backend specific directives apply to this backend until another # 'backend' directive occurs #backend <other> ####################################################################### # Specific Directives for database #1, of type bdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database bdb # The base of your directory in database #1 suffix "dc=example,dc=com" # rootdn directive for specifying a superuser on the database. This is needed # for syncrepl. rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}kPd9OeiwGx4lyZUiQ2NFmzXV0JWyLV9A # Where the database file are physically stored for database #1 directory "/var/lib/ldap" # For the Debian package we use 2MB as default but be sure to update this # value if you have plenty of RAM dbconfig set_cachesize 0 2097152 0 # Sven Hartge reported that he had to set this value incredibly high # to get slapd running at all. See http://bugs.debian.org/303057 # for more information. # Number of objects that can be locked at the same time. dbconfig set_lk_max_objects 1500 # Number of locks (both requested and granted) dbconfig set_lk_max_locks 1500 # Number of lockers dbconfig set_lk_max_lockers 1500 # Indexing options for database #1 index objectClass,uidNumber,gidNumber eq index cn,sn,uid,displayName pres,sub,eq index memberUid,mail,givenname eq,subinitial index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq index zoneName,relativeDomainName eq index dhcpHWAddress,dhcpClassData eq # Save the time that the entry gets modified, for database #1 lastmod on # Where to store the replica logs for database #1 # replogfile /var/lib/ldap/replog # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below # These access lines apply to database #1 only access to attrs=userPassword,sambaLMPassword,sambaNTPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none # Ensure read access to the base for things like # supportedSASLMechanisms. Without this you may # have problems with SASL not knowing what # mechanisms are available and the like. # Note that this is covered by the 'access to *' # ACL below too but if you change that as people # are wont to do you'll still need this if you # want SASL (and possible other things) to work # happily. access to dn.base="" by * read # The admin dn has full write access, everyone else # can read everything. access to * by dn="cn=admin,dc=example,dc=com" write by * read # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to #access to dn=".*,ou=Roaming,o=morsnet" # by dn="cn=admin,dc=example,dc=com" write # by dnattr=owner write ####################################################################### # Specific Directives for database #2, of type 'other' (can be bdb too): # Database specific directives apply to this databasse until another # 'database' directive occurs #database <other> # The base of your directory for database #2 #suffix "dc=debian,dc=org"
Zusätzlich musst Du die LDAP Konfigurationsdatei bearbeiten.

vi /etc/ldap/ldap.conf

Füge folgende Zeilen hinzu:

host 127.0.0.1
base dc=example,dc=com

Starte danach den LDAP Server neu.

/etc/init.d/slapd restart

9 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: Verlustmeldung

Hi, cooles Howto, aber es fehlt glaube ich ein ganz kleines schnippselchen.

es fehlt eine "/etc/libnss-ldap.conf" mit dem inhalt:


# The distinguished name of the search base.
BASE dc=example,dc=com
URI ldap://127.0.0.1/

# Mandriva Howto: Missing
nss_base_passwd ou=Users,dc=example,dc=com
nss_base_shadow ou=Users,dc=example,dc=com
nss_base_group ou=Groups,dc=example,dc=com


wenn diese existiert dann werden die ldap-user auch per "getent passwd" angezeigt.
ohne diese zeilen gibt der befehl "net -U Administrator rpc rights grant ‘DOMAINDomain Admins’ SeMachineAccountPrivilege" immer einen fehler.

btw: es fehlen bei allen windows-pfaden die backslashes wie z.b. in der smb.conf und smbldap.conf

mfg RR


Von: Verlustmeldung

nss_base_passwd ou=Computers,dc=example,dc=com?one

Das noch dabei dann stehen auch computer$ im getent passwd


Von: uwe wicki

Hallo, ein sehr gutes Howto.
Bei 4.2 Basis-Konfigurationmöchte ich einen kleinen Verbesserungsvorschlag machen:

Anstatt slappasswd -s %ldap_admin_password%

slappasswd >> /etc/ldap/slapd.conf
Nach dieser Eingabe wirst du aufgefordert dein Passwort einzugeben und zu bestätigen.

2 Vorteile:
Das Passwort steht nicht im Klartext in der History.
Der Hash wird am Ende der Datei slapd.conf eingefügt. Man muss nichts abschreiben.

Grüße Uwe


Von: uwe wicki

Hallo,
in der smb.conf fand ich einen Druckfehler
Statt add group script = /usr/sbin/ambldap-groupadd -p “%g”
heißt es: add group script = /usr/sbin/smbldap-groupadd -p “%g”
Grüße Uwe


Von: uwe wicki

Hallo

erneut ein kleiner Verbesserungsvorschlag, der einem die Konfiguration erleichert.
Entsprechen Kommentar 3 geht in 5.1 Basis-Konfiguration nach dem Test der smb.conf

Statt net getlocalsid EXAMPLE
net getlocalsid EXAMPLE >> /etc/smbldap-tools/smbldap.conf

Vorteil: Die Datei wird gleich erstellt und enthält die SID fehlerfrei, ohne sie abzuschreiben

Grüße Uwe


Von: uwe wicki

Hallo,

Zwei kleine Bemerkungen:

1: Auch wenn es unsicher erscheint, aber man sollte bei den Passwörtern keine Sonderzeichen verwenden.
2: Am Ende von 5.2 heißt es:
Als Nächstes gewähren wir der Gruppe “Domain Admins” das Recht, der Domain Maschinen hinzuzufügen.
net -U Administrator rpc rights grant ‘DOMAINDomain Admins’ SeMachineAccountPrivilege
Dieser Schritt gelang mir erst am Ende von 6.


Von: uwe wicki

Hallo,

auch heute fand ich wieder einige Kleinigkeiten.

beim Update müsste es statt
dpkg-statoverride –update –add root dovecot 4755 /usr/lib/dovecot/deliver

dpkg-statoverride –-update –-add root dovecot 4755 /usr/lib/dovecot/deliver
heißen.

Ein größeres Problem hat sich jetzt mit dem dcc-client ergeben.
Auf Seite 1 wird man aufgefordert das Paket dcc-client zu installieren. Dies funktionierte nicht.
Auf Seite 4 soll der dcc-client in spamAssassin eingebunden werden, was natürlich nicht funktioniert.
Anschließend versuchte ich dcc-client direkt zu installieren. Die Anleitung dazu findet man unter
http://konabi.de/artikel/artikel_content.php?artikel=dcc
Beim Ausführen der Konfiguration ./configure... erhielt ich folgenden Fehler.
checking for cc... (cached) no
error: no acceptable cc found in $PATH
An dieser Stelle gab ich auf und schaltete in der local.cf dcc aus, indem ich die beiden entsprechenden Zeilen einkommentierte.
Über Hilfe würde ich mich freuen.

Grüße Uwe


Von: badfur

FINALY! Hab dieses Howto jetzt zum dritten mal auf Lenny(!) durchgearbeitet und endlich läuft es *dance*. Ein paar Dinge gehen auf Lenny nicht wie beschrieben und manchmal haut die Reihenfolge einfach nicht hin, aber im großen und ganzen klappt es. Vielleicht kann ich mich durchringen dieses Howto auf Lenny zu aktualisieren, wenn der Author nichts dagegen hat ;) Auf jeden Fall würde ich ohne dieses Howto immer noch wie Kuh ins Uhrwerk schauen. Vielen Dank! ;)


Von: andreea

@Badfur - wie eine Kuh ins Uhrwerk?! Cooler Spruch :-D Freut mich!