Debian Samba-LDAP
Allgemein
Samba kann seine Userdaten im LDAP Directory ablegen, sodass die Unix- und Samba Userdaten zentral im Directory verwaltet werden können, anstatt diese über mehrere Files und evtl. mehrere Server verteilt zu bearbeiten.
Hier werden die LDAP-spezifischen Änderungen erläutert. Die generelle Installation von Samba und Konfiguration sollte dem Samba Wikiartikel entnommen werden.
Voraussetzung:
Installation und Konfiguration
Samba- und LDAP-Server müssen nicht zwingend auf dem selben Server installiert sein.
LDAP-Server
Um die Samba-Informationen aufnehmen zu können, muss das Samba-Schema in's LDAP-Directory importiert werden, das im Paket samba-doc enthalten ist
apt-get install samba-doc cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/ gzip -d /etc/ldap/schema/samba.schema.gz vi /root/ldap_ldif/schema_convert.conf
Folgende Zeilen einfügen:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/samba.schema
Ermitteln des Index ({SCHEMA_INDEX})des Samba-Schemas:
slapcat -f /root/ldap_ldif/schema_convert.conf -F /tmp/ -n 0 | grep samba,cn=schema
Die Ausgabe des Befehls enthält die Index-Nummer:
z.B. dn: cn={12}samba,cn=schema,cn=config
=> SCHEMA_INDEX=12 Einbinden des Samba Schemas in's LDAP Directory:
slapcat -f /root/ldap_ldif/schema_convert.conf -F /tmp/ -n0 -s "cn={SCHEMA_INDEX}samba,cn=schema,cn=config" > /root/ldap_ldif/cn=samba.ldif
Anpassen der generierten LDIF-Datei:
vi /root/ldap_ldif/cn=samba.ldif
Folgende Änderungen durchführen:
- Zeile 1: SCHEMA_INDEX entfernen:
dn: cn=samba,cn=schema,cn=config
- Zeile 3: SCHEMA_INDEX entfernen:
cn: samba
- Sämtliche Zeilen am Ende des Files entfernen, die folgendermaßen beginnen:
structuralObjectClass: olcSchemaConfig entryUUID: ... creatorsName: cn=config createTimestamp: ... entryCSN: ... modifiersName: cn=config modifyTimestamp: ...
Samba-Schema in's LDAP-Directory einbinden:
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldap_ldif/cn=samba.ldif
Indizes für Samba im LDAP-Directory anlegen:
vi /root/ldap_ldif/samba_indexes.ldif
Folgende Zeilen einfügen:
dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: uidNumber eq olcDbIndex: gidNumber eq olcDbIndex: loginShell eq olcDbIndex: uid eq,pres,sub olcDbIndex: memberUid eq,pres,sub olcDbIndex: uniqueMember eq,pres olcDbIndex: sambaSID eq olcDbIndex: sambaPrimaryGroupSID eq olcDbIndex: sambaGroupType eq olcDbIndex: sambaSIDList eq olcDbIndex: sambaDomainName eq olcDbIndex: default sub
Samba-Inizes in's LDAP-Directory einbinden:
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldap_ldif/samba_indexes.ldif
Samba-Server
apt-get install samba samba-common smbldap-tools
Die Basis-Konfiguration von Samba entsprechend Samba Wiki vornehmen.
Folgende zusätzliche Schritte sind für LDAP erforderlich:
vi /etc/samba/smb.conf
Im Bereich [global] folgende Zeilen einfügen bzw. ändern:
ldap passwd sync = yes passdb backend = ldapsam:ldap://IP_DES_LDAP-SERVER bzw. passdb backend = ldapsam:ldaps://IP_DES_LDAP-SERVER, falls SSL für LDAP auf dem Server aktiviert wurde ldap admin dn = cn=admin,LDAP_Base z.B. ldap admin dn = cn=admin,dc=test,dc=homelinux,dc=org ldap suffix = LDAP_Base z.B. ldap suffix = dc=test,dc=homelinux,dc=org ldap group suffix = ou=groups ldap user suffix = ou=people ldap machine suffix = ou=computers ldap idmap suffix = ou=idmap ldap ssl = no passwd program = /usr/sbin/smbldap-passwd -u "%u" passwd chat = "Changing UNIX password for*\nNew password*" %n\n "*Retype new password*" %n\n" add user script = /usr/sbin/smbldap-useradd -m "%u" delete user script = /usr/sbin/smbldap-userdel "%u" add group script = /usr/sbin/smbldap-groupadd -p "%g" delete group script = /usr/sbin/smbldap-groupdel "%g" set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u' add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u" admin users = domainadm
Samba neu starten:
/etc/init.d/samba restart
LDAP-Admin Passwort hinzufügen:
smbpasswd -W
Das LDAP-Admin Passwort LDAP_ADMIN_PWD zweimal eingeben
Samba LDAP-Tools
gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz perl /usr/share/doc/smbldap-tools/configure.pl
Dieses Perl-Script erzeugt jede Menge Ausgaben und erfordert teilweise die Eingabe von Optionen. Der jeweilige Standardwert ist in [Option=Standardwert] bereits angegeben. Dieser Standardwert kann mittels ENTER-Taste übernommen werden.
Folgende Ausgaben werden erzeugt:
$# is no longer supported at /usr/share/doc/smbldap-tools/configure.pl line 314. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- smbldap-tools script configuration -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Before starting, check . if your samba controller is up and running. . if the domain SID is defined (you can get it with the 'net getlocalsid') . you can leave the configuration using the Crtl-c key combination . empty value can be set with the "." character -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Looking for configuration files... Samba Configuration File Path [/etc/samba/smb.conf] > ENTER The default directory in which the smbldap configuration files are stored is shown. If you need to change this, enter the full directory path, then press enter to continue. Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] > ENTER -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Let's start configuring the smbldap-tools scripts ... . workgroup name: name of the domain Samba act as a PDC workgroup name [WORKGROUP] > ENTER . netbios name: netbios name of the samba controler netbios name [] > SAMBA_SERVER_NAME . logon drive: local path to which the home directory will be connected (for NT Workstations). Ex: 'H:' logon drive [] > ENTER . logon home: home directory location (for Win95/98 or NT Workstation). (use %U as username) Ex:'\\SAMBA\%U' logon home (press the "." character if you don't want homeDirectory) [\\SAMBA\%U] > ENTER um Homedirectory zu aktivieren bzw. . falls kein Homedirectory gewünscht. . logon path: directory where roaming profiles are stored. Ex:'\\MINISERVER\profiles\%U' logon path (press the "." character if you don't want roaming profile) [\\MINISERVER\profiles\%U] > . . home directory prefix (use %U as username) [/home/%U] > ENTER . default users' homeDirectory mode [700] > ENTER . default user netlogon script (use %U as username) [] > ENTER default password validation time (time in days) [45] > Je nach Bedarf erhöhen. Z.B. 365, damit das Passwort ein Jahr lang fültig ist . ldap suffix [dc=test,dc=homelinux,dc=org] > ENTER . ldap group suffix [ou=groups] > ENTER . ldap user suffix [ou=people] > ENTER . ldap machine suffix [ou=computers] > ENTER . Idmap suffix [ou=idmap] > ENTER . sambaUnixIdPooldn: object where you want to store the next uidNumber and gidNumber available for new users and groups sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=WORKGROUP] > ENTER . ldap master server: IP adress or DNS name of the master (writable) ldap server ldap master server [IP_DES_LDAP-SERVER] > ENTER . ldap master port [389] > ENTER bzw. 636, falls SSL auf dem LDAP-Server eingerichtet wurde. . ldap master bind dn [cn=admin,dc=test,dc=homelinux,dc=org] > ENTER . ldap master bind password [] > LDAP_ADMIN_PWD . ldap slave server: IP adress or DNS name of the slave ldap server: can also be the master one ldap slave server [IP_DES_LDAP-SERVER] > ENTER . ldap slave port [389] > ENTER bzw. 636, falls SSL auf dem LDAP-Server eingerichtet wurde. . ldap slave bind dn [cn=admin,dc=test,dc=homelinux,dc=org] > ENTER . ldap slave bind password [] > LDAP_ADMIN_PWD . ldap tls support (1/0) [0] > ENTER . SID for domain ARBEITSGRUPPE: SID of the domain (can be obtained with 'net getlocalsid MINISERVER') SID for domain ARBEITSGRUPPE [SAMBA_SID] > ENTER . unix password encryption: encryption used for unix passwords unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > ENTER . default user gidNumber [513] > ENTER . default computer gidNumber [515] > ENTER . default login shell [/bin/bash] > ENTER . default skeleton directory [/etc/skel] > ENTER . default domain name to append to mail adress [] > ENTER -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Use of uninitialized value $# in concatenation (.) or string at /usr/share/doc/smbldap-tools/configure.pl line 314, <STDIN> line 34. backup old configuration files: /etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old /etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old writing new configuration file: /etc/smbldap-tools/smbldap.conf done. /etc/smbldap-tools/smbldap_bind.conf done.
Am Ende wird das Passort des Root-Users der Domäne abgefragt. Hier zweimal das gewünschte Passwort eingeben.
Samba Domain-User und Gruppen dem LDAP-Directory hinzufügen:
smbldap-populate smbldap-groupadd -a domainadm smbldap-useradd -am -g domainadm domainadm smbldap-passwd domainadm
Zweimal das gewünschte Passwort des Domänenadmin eingeben.
Optional: PAM - Samba Passwort-Sync
Samba verwendet andere Passwort-Felder als PAM für die Ablage des Passwortes im LDAP. D.h. wenn der User sein Unix-Passwort mittels passwd ändert, bleibt das Samba-Passwort unverändert.
Die Synchronisierung erfolgt innerhalb des LDAP-Servers mit einem sog. Overlay namens smbk5pwd. Neben der Synchronisierung der Passwörter von PAM und SAMBA beherrscht das Overlay auch die Synchronisierung von Kerberos Passwörtern. Auch wenn keine Kerberos Authentifizierung gewünscht ist, bemötigt das Tool das Kerberos Schema im LDAP-Server.
Leider funktioniert smbk5pwd, das in den Debian Squeeze Repositories enthalten ist, nicht korrekt (erfordert eine komplette Heimdal-Kerberos Installation, auch wenn nur Samba Synchronisierung verwendet werden soll). Deshalb muss es manuell Compiliert werden.
Smbk5pwd kompilieren
Notwendige Pakete installieren:
apt-get install gcc make build-essential libssl-dev libdb4.8-dev heimdal-dev libldap2-dev
Sourcecode downloaden:
mkdir /usr/local/src/openldap cd /usr/local/src/openldap wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.33.tgz tar -xvf openldap-2.4.33.tgz cd openldap-2.4.33
Konfiguration und Kompilierung
./configure make depend cd contrib/slapd-modules/smbk5pwd/ make
Nachdem die Kompilierung fehlerfrei abgeschlossen wurde, die Module in's LDAP-Lib-Verzeichnis kopieren:
cp .libs/smbk5pwd.la /usr/lib/ldap/ cp .libs/smbk5pwd.so.0.0.0 /usr/lib/ldap/ chmod 644 /usr/lib/ldap/smbk5* ln -s /usr/lib/ldap/smbk5pwd.so.0.0.0 /usr/lib/smbk5pwd.so
LDAP Konfiguration
Extrahieren des Kerberos Schemas (kerberos.schema):
apt-get -d install heimdal-kdc
Damit wird das Paket heimdal-kdc heruntergeladen, aber nicht installiert. In diesem Paket ist das gesuchte Schema enthalten.
mkdir /usr/local/src/heimdal dpkg-deb -x /var/cache/apt/archives/heimdal-kdc*.deb /usr/local/src/heimdal/ cp /usr/local/src/heimdal/etc/ldap/schema/hdb.schema /etc/ldap/schema/
Schema analog dem Samba-Schema in LDAP einbinden:
vi /root/ldap_ldif/schema_convert.conf
Folgende Zeile anfügen:
include /etc/ldap/schema/hdb.schema
Ermitteln des Index ({SCHEMA_INDEX})des Kerberos-Schemas:
slapcat -f /root/ldap_ldif/schema_convert.conf -F /tmp/ -n 0 | grep hdb,cn=schema
Die Ausgabe des Befehls enthält die Index-Nummer:
z.B. dn: cn={13}hdb,cn=schema,cn=config
=> SCHEMA_INDEX=13 Einbinden des Kerberos Schemas in's LDAP Directory:
slapcat -f /root/ldap_ldif/schema_convert.conf -F /tmp/ -n0 -s "cn={SCHEMA_INDEX}hdb,cn=schema,cn=config" > /root/ldap_ldif/cn=hdb.ldif
Anpassen der generierten LDIF-Datei:
vi /root/ldap_ldif/cn=hdb.ldif
Folgende Änderungen durchführen:
- Zeile 1: SCHEMA_INDEX entfernen:
dn: cn=hdb,cn=schema,cn=config
- Zeile 3: SCHEMA_INDEX entfernen:
cn: hdb
- Sämtliche Zeilen am Ende des Files entfernen, die folgendermaßen beginnen:
structuralObjectClass: olcSchemaConfig entryUUID: ... creatorsName: cn=config createTimestamp: ... entryCSN: ... modifiersName: cn=config modifyTimestamp: ...
Kerberos-Schema in's LDAP-Directory einbinden:
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldap_ldif/cn=hdb.ldif
Overlay smbk5pwd Konfigurieren: Auch das Einbinden des Overlays und dessen Konfiguration des Overlays erfolgt im LDAP Directory selbst.
vi /root/ldap_ldif/smbk5-load.ldif
Folgende Zeilen einfügen:
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: smbk5pwd
/root/ldap_ldif/smbk5.ldif
Folgende Zeilen einfügen:
# {0}smbk5pwd, {1}bdb, config dn: olcOverlay={0}smbk5pwd,olcDatabase={1}hdb,cn=config objectClass: olcOverlayConfig objectClass: olcSmbK5PwdConfig olcOverlay: {0}smbk5pwd olcSmbK5PwdEnable: samba olcSmbK5PwdMustChange: 0
Einbinden der LDIF-Files ins Directory:
ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/ldap_ldif/smbk5-load.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldap_ldif/smbk5.ldif
Client und Samba konfigurieren
Damit die Passwort Sync-Fähigkeiten von LDAP verwendet werden, sind noch zwei kleine Änderungen erforderlich.
- Auf jedem LDAP-Client:
vi /etc/pam_ldap.conf
Das Kommentarzeichen (#) vor folgender Zeile entfernen:
pam_password exop
- Samba:
vi /etc/samba/smb.conf
Folgende Änderung durchführen (Option von 'yes' nach 'only' ändern):
ldap passwd sync = only
Samba neu starten:
/etc/init.d/samba restart
Samba-User mit LDAP Account Manager verwalten
Samba Module aktivieren
LDAP Account Manager bietet eine komfortable Möglichkeit die Samba-User zu verwalten.
- Webbrowser öffnen und http://IP_DES_SERVER/lam eingeben
- Links oben auf den Link LAM configuration klicken
- Edit server profiles anwählen
- Passwort eingeben (LAM_MASTER_PWD)
- Im Bereich Modules jeweils das Samba-Modul aktivieren:
- Users: Samba 3 (sambaSamAccount)
- Groups: Samba 3 (sambaGroupMapping)
- Hosts: Samba 3 (sambaSamAccount)
- Samba Domains: Samba domain (sambaDomain)
- Button Save anklicken, um die Änderungen zu übernehmen
Neuen Samba-User anlegen
- Mit Hilfe von LAM in's LDAP-Directory einloggen
- Bereich Users auswählen
- Button New User anklicken
- Im Bereich Personal die Masken nach Bedarf ausfüllen. Nachname (Last name) ist erforderlich, die anderen Optional
- Im Bereich Unix die Masken nach Bedarf ausfüllen. Die Einträge, die mit * gekennzeichnet sind, sind Pflichtfelder die anderen optional
- Falls der User unter Linux (z.B: via SSH) anmeldeberechtigt sein soll, dann die Login Shell auf /bin/bash setzen
- Falls der User unter Linux nicht anmeldeberechtigt sein soll, dann die Login Shell auf /bin/false setzen
- Im Berich Samba3
- Den Button Add samba 3 extension
- die Masken nach Bedarf ausfüllen.
- Den Button Set password anklicken
- In der erscheinenden Maske zweimal das gewünschte Passwort eingeben
- Am Ende Button Ok anklicken
- Den Button Save anklicken
Existenten User für Samba freischalten
- Mit Hilfe von LAM in's LDAP-Directory einloggen
- Bereich Users auswählen
- Button Edit vor dem geünschten User anklicken
- Den Button Add samba 3 extension
- die Masken nach Bedarf ausfüllen.
- Den Button Set password anklicken
- In der erscheinenden Maske zweimal das gewünschte Passwort eingeben
- Am Ende Button Ok anklicken
- Den Button Save anklicken