Installation eines Samba-PDC mit LDAP-Authentifizierung
Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit, ihn zu verbessern, entferne anschließend diese Markierung. |
Siehe auch Wiki FAQ und Impressum.
Details | |
---|---|
Bereich: | Software |
Kategorie: | System |
Gruppe: | Installation |
Betriebssystem: | Linux |
Zeitaufwand: | Sehr Hoch |
Anforderung: | Sehr anspruchsvoll |
Inhaltsverzeichnis
Vorbemerkung
Als Grundlage für die Einrichtung des Samba-PDC's diente mir Red Hat 7.2.
LDAP hat gegenüber der 'herkömmlichen' Authentifizierung über /etc/passwd und /etc/shadow einige Vorteile. So lässt sich das LDAP-Directory leicht so einrichten, dass z.b. ein 'Single-Sign-On' an mehreren Diensten eingerichtet werden kann. Auch eine Verteilung des Directory im Netz mit slurpd ist möglich. Und mit der Samba-Version 2.2.3a wird es auch endlich möglich, Samba gegen LDAP authentifizieren zulassen.
Ich habe dieses Tutorial anfangs für mich für evtl. zukünftige Installationen als Gedankenstütze geschrieben. Deshalb habe ich die Installation bisher auch nur auf "Red Hat"-Systemen (7.2 und 7.3) getestet.Ich hoffe, Du verstehst, wenn ich keinerlei Gewähr für die Richtigkeit und Vollständigkeit meiner Anleitung geben kann (bin ja auch nur ein Mensch ;). Ich kann ebenso wenig die Haftung dafür übernehmen, wenn durch die Befolgung der Anleitung irreparable Schäden an der Linux-Installation auftreten. Eine Datensicherung ist grundsätzlich vor jeder Änderung am System empfehlenswert.
Ich habe die Anleitung nun möglichst ausführlich geschrieben, so dass auch ein weniger versierter Linux-User die Installation nachvollziehen und auf seinem Server selbst durchführen kann. Gerade wegen der Thematik gehe ich aber davon aus, dass zumindest ein Grundwissen über den Umgang mit der bash vorhanden ist.
Anmerkung am Rande
Außer bei der eigentlichen Installation von Paketen oder Programmen (also rpm --install
oder make install
) solltest Du nie als root angemeldet sein, sondern immer mit Deinem persönlichen Account arbeiten.
Aber genug mit dem Vorgeplänkel, legen wir los:
Benötigte Software
Name | Verwendete Version | Link |
---|---|---|
nscd | Paket aus der Distribution | |
nss_ldap | Paket aus der Distribution | |
BerkeleyDB | 4.0.14 | Download |
Cyrus-SASL | 1.5.28 | Download |
Open-LDAP | 2.0.25-stable | Download |
Samba | Version 2.2.5 | Download |
Vorbereitungen
Bevor wir mit der Installation starten können, müssen diese natürlich von den entsprechenden Servern heruntergeladen werden (mpff - ist sowieso klar). Außerdem sollte das System von bisherigen Versionen der o.a. Software befreit werden. Unter Red Hat ist das ganz leicht über rpm möglich (rpm -e --nodeps Paketname
). Die Dependencies können wir deshalb vernachlässigen, weil wir ja kurz später die entsprechenden Programme wieder installieren.
Wie die zu deinstallierenden Pakete genau heißen, lässt sich ganz einfach mit rpm -qa
ermitteln. Als Suchwort setzt man natürlich den Namen des jeweiligen Programmes ein.
Jetzt noch schnell die RPM-Pakete von nscd und nss_ldap installiert und schon können wir mit der Installation beginnen.
Installation BerkeleyDB
Die BerkeleyDB bildet die Datengrundlage für LDAP. In der Datenbank wird später das Directory gespeichert.
Nach dem Download entpacken wir den Tarball mit
tar xzvf db-4.0.14.tar.gz
Zur Konfiguration müssen folgende Schritte ausgeführt werden:
cd db-4.0.14/build_unix
../dist/configure --prefix=/usr/local/berkeleydb --bindir=/usr/local/bin --
sbindir=/usr/local/sbinmake
Ist alles fehlerfrei durchgelaufen installieren wir die Datenbanksoftware als root mit:
- make install
Danach müssen wir noch die Libraries der BerkeleyDB für das System zugänglich machen (auch dieseSchritte müssen als root durchgeführt werden):
füge in der Textdatei /etc/ld.so.conf die Zeile /usr/local/berkeleydb/lib ein ldconfig
Installation Cyrus-SASL
Damit später die Möglichkeit besteht, LDAP-Konten zur Anmeldung zu benutzen, benötigen wir die 'SimpleAuthentication and Security Layer services' - oder kurz SASL. Die Installation ist denkbar einfach:
tar xzfv cyrus-sasl-1.5.28.tar.gz
cd cyrus-sasl-1.5.28
./configure
make
und als root schließlich:
make install
Installation Open-LDAP
Jetzt kommen wir zum Leightweight-Directory-Access-Protocoll. Auch dieses entpacken wir in gewohnter Weise und wechseln anschließend ins neu erzeugte Verzeichnis. Die Configure-Anweisung wird aber nunetwas länger:
./configure --prefix=/usr/local --bindir=/usr/local/bin --
sbindir=/usr/local/sbin --sysconfdir=/etc --enable-debug --enable-syslog --with-cyrus-sasl --enable-ldbm --enable-spasswdmake depend
make
Ob LDAP korrekt funktioniert kannst Du nun mit make test ausführlich testen lassen. Kleiner Hinweis für Eilige: Der Test-Durchlauf nimmt ziemlich viel(!) Zeit in Anspruch. Die eigentliche Installation erfolgt auch hier wieder als root mit:
make install
Installation Samba
Nun kommen wir zum eigentlichen Grund für unsere kleine Installationsorgie ;). Nach der üblichen Entpackerei erstellen wir unser Samba mit:
./configure --prefix=/usr/local/samba --bindir=/usr/local/bin --
sbindir=/usr/local/sbin --with-ldapsammake
Auch hier installieren wir unsere Software anschließend wieder mit make install. Und jetzt wird's endlich interessant: es folgt die Einrichtung unsererer Installation.
Einrichtung
Konfiguration LDAP
Zunächst müssen wir aus dem Unterverzeichnis 'examples' aus dem Samba-Source-Verzeichnis die Datei 'samba.schema' in das Verzeichnis /etc/openldap/schema kopieren. Die Datei enthält praktisch die 'Muster' für die späteren sambabezogenen Einträge in das Directory. Jetzt müssen wir die Datei /etc/openldap/slapd.conf anpassen. Meine sldapd.conf sah nach den Anpassungen so aus:
# slapd.conf ########## include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/samba.schema pidfile /usr/var/slapd.pid argsfile /usr/var/slapd.args # ldbm database definitions database ldbm suffix „dc=firma,dc=com" rootdn „cn=admin,dc=firma,dc=com" rootpw {SSHA}secret directory /usr/var/openldap-ldbm index objectClass eq loglevel 0 access to attrs=userPassword,lmPassword,ntPassword by self write by * auth access to * by * read
Das Rootpw lässt sich mit: slappasswd -s MeinPasswort
ermitteln.
Die Datei /etc/ldap.conf fällt sehr kurz aus:
# ldap.conf ########## BASE dc=firma,dc=com URI ldap://localhost:389/
Um eine Authentifizierung über LDAP zu ermöglichen, fehlen nun noch folgende Einträge in der Datei/etc/nsswitch.conf:
passwd: files ldap group: files ldap shadow: files ldap
Abschließend muss noch die Datei /etc/ldap.conf ein klein wenig angepasst werden. Sie muss schließlich die Einträge:
host 127.0.0.1 port 389 base dc=firma,dc=com uri ldap://127.0.0.1/
enthalten.
Jetzt ist LDAP fertig eingerichtet, der Server slapd kann gestartet werden:
/usr/libexec/slapd
Um mit dem Directory auch wirklich arbeiten zu können, müssten wir zum einen die sog. Wurzelorganisation festlegen, und zum anderen brauchen wir noch einen Admin-User. Um diese möglichst einfach anlegen zu können, basteln wir uns schnell zwei sog. 'LDIF'-Dateien. Diese können anschließend in das Directory mit ldapadd eingespielt werden. Doch zunächst die Dateien 'samba.ldif'
dn: dc=firma, dc=com objectclass: organization o: samba
und 'admin.ldif'
dn: cn=admin,dc=firma,dc=com objectclass: possix accountcn: admin uid: admin uidNumber: 1000 gidNumber: 100 homeDirectory: /home/admin loginShell: /bin/bash
In der Admin.ldif legen wir als uid-Nummer 1000 fest. Diese Nummer muss für jeden Benutzer eindeutig definiert sein. Ich habe einfach festgelegt, dass meine Samba-User von 1000 an durchnummeriert werden. Diese Dateien spielen wir nun ein:
ldapadd -D "cn=admin,dc=firma,dc=com" -x -W -f samba.ldif ldapadd -D "cn=admin,dc=firma,dc=com" -x -W -f admin.ldif
Ein ldapsearch -x
zeigt uns die gerade angelegten Einträge noch einmal an. Um sicherzugehen, dass auch alles wie gewünscht funktioniert, listen wir mit getent passwd
die Benutzer des Systems auf. Hier sollte nun auch der User 'admin', den wir eben im LDAP eingefügt hatten, mit aufgeführt werden. Ist dies nicht der Fall, ist wahrscheinlich noch der sog. 'Name Service Caching Daemon' (nscd) gestartet. Dieser lässt sich mit killall nscd
aus dem Speicher entfernen. Damit der Service auch bei zukünftigen System-Starts nicht automatisch wieder mit aufgerufen wird, sollten auch alle Links zum Service aus den Unterverzeichnissen /etc/rc.d/rd?.d entfernt werden.
Wir können nun auch Logins an der Konsole oder per SSH zulassen. Dazu müssen die Dateien/etc/pam.d/login (für Logins an der Konsole) und /etc/pam.d/sshd um einige Einträge erweitert werden. Die von mir zugefügten Zeilen sind schräg gedruckt.
VORSICHT: Nachdem Du Anpassungen an /etc/pam.d/login vorgenommen hast, solltest Du, ohne Dich von der aktuellen Konsole abzumelden, über eine andere Konsole testweise anmelden. Denn ein Fehler in dieser Datei kann dazu führen, dass das System keinen Login mehr zulässt!!
login
#%PAM-1.0 auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_ldap.so auth required /lib/security/pam_securetty.so auth required /lib/security/pam_stack.so service=system-auth account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_ldap.so use_authtok password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_console.so
sshd
#%PAM-1.0 auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_ldap.so auth required /lib/security/pam_stack.so service=system-auth account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_ldap.so use_authtok password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_limits.so session optional /lib/security/pam_console.so
Konfiguration Samba
Zu guter Letzt muss natürlich auch noch Samba so eingerichtet werden, dass der Server als PDC fungieren kann. Dazu müssen wir die Datei /usr/local/samba/lib/smb.conf anlegen. Diese sollte, wenn sie fertig ist, wiefolgt aussehen:
[global] workgroup = MeineDomain netbios name = Servername server string = Beschreibung des Servers interfaces = eth0 bind interfaces only = yes encrypt passwords = yes domain logons = yes domain master = yes domain admin group = root logon path = \\%L\profiles\%u logon script = login.bat logon drive = Z: logon home = \\Servername\%u hosts allow = 192.168.0.0/255.255.255.0 log file = /var/log/samba/%m.log max log size = 0 ldap server = 127.0.0.1 ldap port = 389 ldap suffix = dc=firma,dc=com ldap admin dn = cn=admin,dc=firma,dc=com ldap filter = (&(objectclass=sambaAccount)(uid=%u)) ldap ssl = no [netlogon] path = /usr/local/samba/lib/netlogon read only = yes write list = root [profiles] path = /usr/local/samba/lib/profiles read only = no create mask = 0600 directory mask = 0700 [homes] comment = Homeverzeichnisse browsable = no valid users = %S writeable = yes
Jetzt noch schnell die Verzeichnisse /usr/local/samba/lib/netlogon und /usr/local/samba/lib/profiles angelegt, und die ersten Vorbereitungen für unseren PDC sind fertig. Um Samba den Zugriff auf LDAP zu ermöglichen, muss mit smbpasswd -w [ldapadminpasswort]
noch das LDAP-Administrator-Passwort, welches wir bereits mit slappasswd
vergeben haben, in die Datei secrets.tdb verschlüsselt gespeichert werden.
Nun sollten wir die smb.conf noch auf evtl. Fehler hin überprüfen. Dazu ist der Befehl testparm
gedacht. Ist die Konfigurationsdatei fehlerfrei, können wir Samba endlich mit:
smbd -D
nmbd -D
starten.
Abschließend müssen wir nun nur noch das Domain-Administrator-Konto 'root' (entsprechend dem Eintraghinter 'domain admin group' in der smb.conf) anlegen:
pdbedit -a -u root
Anmerkungen zur smb.conf: Die Konfigurationsdatei beschränkt die Domain-Zugriffe auf das Netzwerk-Interface /dev/eth0 und das Subnetzwerk 192.168.0.0/24. Du musst diese Einstellungen natürlich ggfs. noch an Deine Systemumgebung anpassen.
Außerdem habe ich ein Login-Script eingerichtet. Dieses wird bei jeder Anmeldung an der Domain vomentsprechenden User ausgeführt und muss im Verzeichnis /usr/local/samba/lib/netlogon unter dem Namenlogin.bat vorhanden sein.
So, die eigentliche Arbeit ist nun getan. Aber was nützt uns der schönste Domäne-Controller, wenn sich noch keine Rechner anmelden können, und auch keine Benutzer in der Domain vorhanden sind!? ...
Computer-Konten anlegen
Ein Rechner-Konto ist eigentlich nichts anderes als ein normaler PosixAccount, den wir auch für den LDAP-Admin angelegt hatten. Der einzige Unterschied zum 'normalen' Benutzer-Account besteht im abschliessendem '$'-Zeichen am Benutzernamen. Ich habe eine Benutzergruppe 'machines' mit der ID 502 angelegt, um dort alle Maschinen-Kontenzuzuordnen (groupadd -g 502 machines
).
Der Einfachheit halber legen wir uns für das Einrichten eines Computer-Kontos wieder eine LDIF-Datei an:
dn: cn=rechnername$,dc=firma,dc=com cn: rechnername$ uid: rechnername$ uidNumber: 5001 gidNumber: 502 homeDirectory: /dev/null loginShell: /bin/false
Auch hier muss natürlich (wie bei den Benutzerkonten) die uid-Nummer eindeutig sein - wir nummeriereneinfach von 5001 an durch.
Wie bei den Benutzern auch, spielen wir die LDIF-Datei mit ldapadd
ein (Syntax s.o.).
Benutzerkonten anlegen
Damit sich ein User an der Samba-Domain anmelden kann, muss auch für ihn ein Account angelegt werden.
Deswegen auch für diese zunächst die LDIF-Datei:
dn: cn=username,dc=firma,dc=com objectclass: possixaccount cn: username uid: username uidNumber: 1001 gidNumber: 507 homeDirectory: /home/admin loginShell: /bin/bash
Die Benutzer sind bei mir alle der Benutzergruppe 507 zugeordnet, die ich mit groupadd -g 507sambauser
angelegt habe. Die UID habe ich (wie beim Anlegen des Admin-Accounts bereits erwähnt)von 1000 auf 1001 erhöht.
So, jetzt ist zwar ein PossixAccount für 'username' angelegt, damit darf sich der User (bei entsprechend angepasster /etc/pam.d/login) auch schon an der Konsole anmelden. Nur die Anmeldung an der Samba-Domain wird noch fehlschlagen. Was noch fehlt, ist das eigentliche Samba-Konto. Dieses ist einfach zuerstellen über pdbedit -a -u username
¡
Mit pdbedit
lassen sich auch die User-Eigenschaften ändern, näheres hierzu ist mit pdbedit --help
zu erfahren.
Benutzerpasswörter für mit pdbedit
angelegte User lassen sich, wie normalerweise auch mit smbpasswd
ändern.
Jetzt läuft endlich der PDC, so wie er sollte.