Anbindung von Samba und freeRadius an LDAP
Anbindung von Samba und freeRadius an LDAP
Vorwort
Dieses Tutorial setzt das Wissen über LDAP, Samba, PAM etc. voraus und beschränkt sich ausschließlich auf die Beschreibung einer lauffähigen Konfiguration der Dienste.
Grundkonfiguration
Der LDAP und alle weiter folgenden Server wurden auf einem Debian 5.0 konfiguriert. Dabei wurden neben de standardisierten Paketen folgende Pakete zusätzlich installiert:
LDAP Server
Installation
Für den LDAP Server werden folgende Pakete benötigt:
- slapd
- ldap-utils
- phpldapadmin (optional)
Bei der Installation wird nach dem Administrationskennwort für LDAP gefragt welches aber später auch in der Datei /etc/ldap/slapd.conf überschrieben werden kann. Nach der Installation muss die /etc/ldap/slapd.conf angepasst werden, indem die Zeilen
suffix "dc=your,dc=domain" rootdn "cn=admin,dc=your,dc=domain" rootpw [yourpassword]
eingefügt oder einkommentiert werden müssen. Dabei kann der Parameter rootpw entweder direkt eingegeben werden oder zunächst mittels des Befehls slappasswd verschüsselt werden, wobei der Schlüssel z.B. mittels
slappasswd -s [yourpassword]
erzeugt werden kann.
Zusätzlich müssen in der Datei /etc/ldap/ldap.conf die folgenden Änderungen gemacht werden bzw. die Kommentarzeichen entfernt werden
BASE dc=your,dc=domain URI ldap://localhost SIZELIMIT 12 TIMELIMIT 15 DEREF never
Administration von LDAP
Die Administration von LDAP kann beispielsweise mittels des Webfrontends phpldapadmin oder des auf Eclipse basierenden Programms Apache Directory Studio[7] geschehen. In beiden Fällen erfolgt dies mittels der Daten:
Anmelde DN: cn=admin,dc=your,dc=domain Password [yourpassword]
Administration mit ldapvi
Für Konsolenmenschen ist ldapvi aus dem gleichnamigen Debianpaket ein Segen. Die /etc/ldapvi.conf (Rechte auf 600 setzen!) könnte so ausschauen:
profile default host: ldap://127.0.0.1 user: cn=admin,dc=your,dc=domain password: GeheimesPasswort discover: yes
Um dann den Benutzer Horst zu verändern, reicht ein ldapvi uid=Horst. Die Projekthomepage [8] ist empfehlenswert.
LDAP Clients
Auf allen Systemen, die sich per LDAP auf dem System anmelden können sollen, müssen folgende Pakete installiert werden. Dabei werden diese Pakete auch für die Anbindung von Samba an LDAP benötigt (siehe unten), daher empfiehlt es sich die Pakete auch auf dem Server zu installieren.
- libpam-ldap
- libnss-ldap
- nscd
- libpam-passwdqc
Konfiguration von libnss-ldap
Bei der Konfiguration von libnss-ldap müssen ausschließlich in der Datei /etc/nsswitch.conf die folgenden Zeilen angepaßt werden
passwd: files ldap group: files ldap shadow compat
Konfiguration von PAM
Bei der Installation von libpam-ldap wird nach einigen Angaben gefragt. Dabei sind die Einstellungen:
|| URI des Servers || ldap://localhost || || Distinguished Name of Search Base || dc=your,dc=domain || || LDAP Version to use || 3 || || Make local root Database admin: || yes || || Does the LDAP database require login? || no || || LDAP account for root: || cn=admin,dc=your,dc=domain || || LDAP root account password: || [yourpassword] ||
Die Konfiguration von PAM selbst erfolgt über die Dateien im Verzeichnis /etc/pam.d/* Die Dateien haben den Aufbau:
<Modultyp> <Kontroll-Flag> <ModulName/Pfad> <Optionen>
Modultyp
|| auth || Überprüfung der Identität der Benutzer ||
|| account || Bedingungen für den Zugriff auf das System ||
|| password || Aktualisierung der Authentisierungsdaten ||
|| session || Einstellung für die Sitzung ||
Kontroll-Flag
||required ||Die erfolgreiche Auswertung dieses Moduls ist notwendig für den Gesamterfolg. Bei einer gescheiterten Auswertung werden trotzdem alle weiteren Module von diesem Typ geladen ||
||requisite ||Die erfolgreiche Auswertung dieses Moduls ist notwendig für den Gesamterfolg. Bei einer gescheiterten Auswertung führt dieses zu einem Abbruch der Auswertung ||
||sufficient ||Die erfolgreiche Auswertung dieses Moduls ist ausreichend für den Gesamterfolg. Das heißt ein gescheiterte Auswertung beeinflußt die Gesamtbewertung nicht, bei einem Erfolg wird der Authentifzierungsprozess beendet und die Ergebnisse der vorherigen required Module berücktsichtigt. ||
||optional ||Eine erfolgreiche oder gescheiterte Authentifzierung hat nur dann eine Bedeutung wenn es das einzige eingebunde Modul ist ||
||include ||Bezieht alle Argumente des gleichen Types aus der angegeben Datei ein ||
Modulname / Options
Eine Auswahl an Modulen und den passenden Optionen ist beispielsweise hier[3] zu finden.
In der Datei /etc/pam.d/common-password muss die Zeile
password required pam_unix.so nullok obscure min=4 max=8 md5
oder
password required pam_cracklib.so retry=3 minlen=6 difok=3 password required pam_unix.so use_authtok nullok md5
auskommentiert / entfernt werden und durch die Zeilen
password required pam_passwdqc.so min=disabled,16,12,8,6 max=256 password sufficient pam_unix.so use_authtok md5 password sufficient pam_ldap.so use_first_pass use_authtok md5 password required pam_deny.so
ersetzt werden
In der Datei /etc/pam.d/common-auth muss die Zeile
auth required pam_unix.so nullok_secure
auskommentiert oder entfernt werden und durch die Zeilen
auth sufficient pam_unix.so auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so
ersetzt werden.
Schließlich muss noch die Datei /etc/pam.d/common-account dahin gehend angepasst werden, das die Zeile
account required pam_unix.so
durch die Zeilen
account sufficient pam_unix.so account sufficient pam_ldap.so account required pam_deny.so
ersetzt wird
chsh / chfn
Wenn die Benutzer und ihre Passwörter durch LDAP verwaltet werden funktionieren die Befehle chsh und chfn nicht mehr, daher sind die folgenden Änderungen notwendig
dpkg-divert --add --rename --divert /usr/bin/chfn.local /usr/bin/chfn dpkg-divert --add --rename --divert /usr/bin/chsh.local /usr/bin/chsh ln -s /usr/share/doc/libpam-ldap/examples/chsh /usr/bin/chsh ln -s /usr/share/doc/libpam-ldap/examples/chfn /usr/bin/chfn
Nun können bereits Benutzer mit LDAP angelegt werden, welche sich auf der Konsole anmelden können.
Samba
Für einen Samba Server sowie die Zusammenarbeit mit LDAP müssen die folgenden Pakete installiert werden
- samba
- samba-doc
- smbldap-tools
- smbclient
Die folgende Konfiguration beschreibt nur die Konfiguration von der Anbindung von Samba an LDAP und nicht die grundlegende Einstellung von Samba
Konfiguration von LDAP für Samba
Zunächst muss in der /etc/default/slapd die Zeile SLAPD_SERVICES nach
SLAPD_SERVICES = "ldaps://[Hostname]/ ldap://localhost"
geändert werden. Als nächstes muss das Samba Schema in LDAP eingebunden werden, dieses geschieht indem
zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
ausgeführt wird. Danach kann die Datei samba.schema mittels
include /etc/ldap/schema/samba.schema
in die /etc/ldap/slapd.conf eingebunden werden. Zum Schluß muß vor dem Neustart den Benutzern erlaubt werden ihre Passwörter zu ändern dieses geschieht indem
access to attrs=userPassword,shadowLastChange
zu
access to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword
verändert wird. Jetzt kann openldap mittels
/etc/init.d/slapd restart
neugestartet werden.
Konfiguration mit smbldap-tools
Die nachfolgenden Konfigurationsschritte können natürlich auch händisch ausgeführt werden. Allerdings wird diese Konfiguration durch das Paket smbldap-tools deutlich erleichert. Zunächst muss aber hierfür die für die Verwendung von smbldap-tools benötigten Konfigurationsdateien kopiert werden. Dieses erfolgt mit
cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/ cp /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz /etc/smbldap-tools/ gzip -d /etc/smbldap-tools/smbldap.conf.gz
Nun kann die von Samba bereitgestellte SID mittels
net getlocalsid
ermittelt werden. Diese muss jetzt in die Datei /etc/smbldap-tools/smbldap.conf eingetragen werden. Zusätzlich müssen noch einige andere Einstellungen wie die IP des LDAP Masters und die Maildomain eingetragen werden. Dabei sind alle Einstellungen
SID="[your_SID]" slaveLDAP="127.0.0.1" masterLDAP="127.0.0.1" ldapTLS="0" mailDomain="yourdomain.com" suffix="dc=your,dc=domain"
Bevor die Rechte korrekt gesetzt werden müssen, muss die Datei /etc/smbldap-tools/smbldap_bind.conf zur Anbindung von Samba an LDAP wie folgt angepasst werden
slaveDN="cn=admin,dc=your,dc=domain" slavePw="[ihr_password]" masterDN="cn=admin,dc=iom,dc=local" masterPw="[ihr_password]"
Zum Schluss müssen noch die Rechte für die beiden Konfigurationsdateien angepaßt werden dieses geschieht mittels
chmod 0644 /etc/smbldap-tools/smbldap.conf chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
Jetzt kann der Verzeichnisdienst mit den Organisationseinheiten, Group, Computers und Users, sowie dem Domainnamen und den grundlegenden Benutzern und Gruppen befüllt werden
smbldap-populate -u 30000 -g 30000
Dabei steht das -u für die erste zu vergebene User-ID und der Parameter g für die erste zu vergebene Group-ID. Während der Ausführung wird dabei nach dem Passwort für Root gefragt dabei handelt es sich um den root-User welcher in LDAP hinterlegt ist.
Samba Server
Konfiguration
Nun kann endlich die /etc/samba/smb.conf angepasst werden. Hierbei muss zuerst die Datenbank für die Passwörter umgestellt werden dieses geschieht indem die Zeile
passdb backend = tdbsam
zu
passdb backend = ldapsam:ldap://localhost/
geändert werden. Zusätzlich muss noch die Option obey pam restrictions auf no gesetzt werden. Darüber hinaus muss die Struktur des LDAP Baumes Samba bekannt gemacht werden dieses geschieht indem die folgenden Zeilen unter der [global] Section eingefügt werden
ldap admin dn = cn=admin,dc=your,dc=domain ldap suffix = dc=your, dc=domain ldap group suffix = ou=Groups ldap user suffix = ou=Users ldap machine suffix = ou=Computers ldap idmap suffix = ou=Users
Nun muss noch Samba erlaubt werden die Passwörter mit LDAP zu synchronisieren und definiert werden mit welchen Programm die Passwörter erzeugt werden. Dieses erfolgt mit dem Einfügen der Zeilen
ldap passwd sync = Yes passwd program = /usr/sbin/smbldap-passwd %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*
Bevor nun samba neu gestartet werden kann muss noch der Domain erlaubt werden sich bei Samba einzuloggen dieses geschieht indem in der /etc/samba/smb.conf
domain logons = yes
gesetzt wird. Zusätzlich muss noch am Ende der Datei der Pfad zu den Homeverzeichnissen definiert werden, dieses erfolgt mit
[homes] comment = Home Directories browseable = yes path = /home/%U guest ok = no inherit permissions = yes read only = no create mask = 0700 directory mask = 0700 #valid users = %S
Nun kann die Datei gespeichert werden und der Server mittels
/etc/init.d/samba restart
neu gestartet werden. Abschließend kann dann das Administrationskennwort für Samba gesetzt werden, dieses geschieht mit
smbpasswd -w admin_passwort
Benutzer und Gruppenverwaltung
Ein Benutzer kann mittels des Befehls
smbldap-useradd -a -m -M test.user -c "Test User" tuser
hinzugefügt werden. Die Parameter stehen dabei für
|| -a || Erlaubt den Login sowohl unter Windows als auch unter Linux || || -m || erstellt ein Homeverzeichnis || || -M || setzt den lokalen Mailalias || || -c || legt den vollständigen Namen fest ||
Das Passwort für den Benutzer kann dabei über den Befehl
smbldap-passwd tuser
festgelegt werden. Eine Gruppe kann darüber hinaus mittels
smbldap-groupadd [Gruppenname]
erstellt werden und der Benutzer dann der Gruppe über den Befehl
smbldap-usermod -G [Gruppenname(n)] tuser
einer Gruppe zugeordnet werden.
freeRadius
Für die Verwendung von freeRadius und die Anbindung an LDAP müssen die Pakete
- freeradius
- freeradius-ldap
installiert werden.
Konfiguration
Nach der Installation muss zunächst die /etc/freeradius/radiusd.conf an drei Stellen angepaßt werden. Zum einen muss der Block
ldap { server = "localhost" identity = "cn=admin,dc=iom,dc=local" password = [your_password] basedn = "dc=iom,dc=local" filter = "(uid=%u)" start_tls = no access_attr = "uid" dictionary_mapping = $(raddbdir}/ldap.attrmap ldap_connections_number = 5 timeout = 4 timelimit = 3 net_timeout = 1 }
eingefügt werden. Zum anderen muss in der Zeile
ldap
das Kommentarzeichen entfernt werden, und schließlich müssen noch die Zeilen
Auth-Type LDAP { ldap }
durch das entfernen der Kommentarzeilen mit hinein genommen werden.
Jetzt kann in der Datei die Authentifizierung von der Radius eigenen Datenbank auf LDAP umgestellt werden. Dieses geschieht indem in der Datei /etc/freeradius/users die Zeilen
DEFAULT Auth-Type = System Fall-Through = 1
durch
DEFAULT Auth-Type = LDAP Fall-Through :=1
ersetzt werden. Zum Schluss muss noch festgelegt werden welche Clients z.B. VPN Server auf den Radius Server mit welchem Passwort zugreifen dürfen. Dieses geschieht indem die Zeilen
client 127.0.0.1 { secret = testing123 shortname = localhost nastype = other }
eingefügt werden.
Test
Nun kann getestet werden ob die Konfiguration korrekt war und sich die Benutzer anmelden können. Bei dem Beispiel wird nun davon ausgegangen das ein Benutzer namens testuser mit dem Passwort foobar existiert. Wenn alle Einstellungen richtig sind sollte der Befehl
radtest testuser linus 127.0.0.1 0 foobar
folgende Ausgabe zurückliefern
Sending Access-Request of id 229 to 127.0.0.1 port 1812 User-Name = "testuser" User-Password = "[your_password]" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Accept packed from host 127.0.0.1:1812, id=229, length=20
Quellen
[1] [[1]]
[2] http://samba-ldap.de/node/46
[3] http://support.microsoft.com/kb/243330/de
[4] http://www.moduli.net/sysadmin/sarge-ldap-auth-howto.html
[5] http://islandlinux.org/howto/installing-samba-openldap-ubuntu
[6] http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html