Installation eines Samba-PDC mit LDAP-Authentifizierung

aus WB Wiki; freien Wissensdatenbank rund ums Thema Computer
Version vom 10. August 2007, 13:23 Uhr von DerZong (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Linux

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.
Eine Umsetzung der FAQ-Artikel erfolgt auf eigene Gefahr. Der Autor weist in seinem Artikel auf den jeweiligen Schwierigkeitsgrad und Zeitaufwand hin. Es wird ausdrücklich empfohlen, vor der Durchführung von Systemänderungen an Windows einen aktuellen Wiederherstellungspunkt anzulegen.
Siehe auch Wiki FAQ und Impressum.

Details
Bereich: Software
Kategorie: System
Gruppe: Installation
Betriebssystem: Linux
Zeitaufwand: Sehr Hoch
Anforderung: Sehr anspruchsvoll

Zurück zur Übersicht


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 pdbeditlassen 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.