Linux gegen Active Directory authentifizieren

Mit genau diesem Thema habe ich mich jetzt ca. die lezten beiden Tage beschäftigt.

Ich weiss, dass das Thema nicht neu ist und auch schon lange kein bahnbrechender Erfolg mehr. Aber mein ganz persönliches Bedürfnis nach Herrausforderung konnte ich damit befriedigen. Zum Schluss durfte ich mich auch noch mit Erfolg belohnen 🙂

Der Beweggrund ist einfach folgender. Meine Firma legt hohen Wert auf Sicherheit und muss sich hierbei den gesetzlichen Vorschriften unterwerfen, sonst sieht der Kunde das nicht so gerne 🙂


Wirklich Lust etwas zu schreiben, dass sich um Passwortkomplexität und 90 Tage Gültigkeit der Passwörter kümmert hatte ich auch nicht. Darum ist dieses Projektchen enstanden.


Folgende Methoden habe ich ausprobiert:

-> native LDAP (zu komplex in Verbindung mit KRB5 und ohne Services for Unix / POSIX Objekte)

-> eigene Skripte (reden wir nicht drüber)

-> winbind (dabei ist es dann auch geblieben)

Da wir komplett auf RedHat-Linux arbeiten ist die Anleitung auch für den Rot-Hut gedacht. Bei anderen Distributionen, kann es sein, dass Pakete nach installiert werden müssen, oder Config-Files an einem anderen Ort im FileSystem rumliegen.

Ich setze ein funktionierendes ActiveDirectory auf Basis von Windows 2003 Server R2 vorraus. Das habe ich hier auch nich einrichten müssen und könnte es wahrscheinlich auch nicht so perfekt 🙂

Ebenso ist ein funktionierendes DNS System Vorrausetzung. Sonst geht gar nix 😛

Needs:

– winbind

– openldap

– samba

– Kerberos 5

Wenn man diese Softwarepakete auf seinem Rechner installiert hat, kann man eigentlich schon mit dem editieren der Config-Files beginnen.

Das File /etc/samba/smb.conf sollte so aussehen:

[global]
realm = EXAMPLE.COM
netbios name = WORKSTATION-NAME
workgroup = EXAMPLE
password server = domaincontroller.example.com
security = ads
winbind separator = +
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = Yes
winbind nested groups = Yes
template shell = /bin/bash
template homedir = /home/%D/%U  # Legt für den User ein Home an /home//



Danach bringt ein

/etc/init.d/winbind restart

winbind dazu die Config neu einzulesen.


An openldap sind in diesem Fall keine Änderungen zu machen.


Die Samba Config muss auch nicht mehr angepasst werden, es sei den es sollen noch Ordner geshared werden.


Das File /etc/krb5.conf sollte so aussehen:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true

[realms]
EXAMPLE.COM = {
kdc = host.example.com:88
admin_server = host.example.com:749
default_domain = example.com
}

[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM

[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}



In der Datei /etc/hosts sollte der Rechner mit seiner IP Adresse und Domain eingetragen sein.

XXX.XXX.XXX.XXX       HOSTNAME.DOMAIN.COM HOSTNAME



In die Dateien /etc/pam.d/login, /etc/pam.d/sshd und /etc/pam.d/system-auth müssen folgende Zeilen rein:

auth        sufficient    pam_winbind.so require_membership_of=
account     sufficient    pam_winbind.so
password    sufficient    pam_winbind.so use_authtok
session     require       pam_mkhomedir.so skel=/etc/skel umask=077



Damit werden die pam Module veranlasst nur User auf den Server zu lassen, die in einer bestimmtem Gruppe des ActiveDirectory Mitglied sind. Ausserdem werden User, die kein Homedirectory haben, gleich mit einem passenden selbigen versehen 🙂


Nach dem diese Änderungen gemacht wurden, kann man den Rechner in die Domain einfügen. Dies wird mit folgendem Befehl gemacht:

net ads join -U 



Nun sollte ein Maschinen-Konto im ActiveDirectory angelegt werden, dass dem Hostnamen des Rechners entspricht, auf dem das Kommando abgesetzt worden ist.


Um zu prüfen ob der Rechner jetzt Zugriff auf alle User und Groups der Domäne hat, gibt man die folgenden beiden Kommandos ein. Die Ausgabe sollte auf die Gruppen und Benutzer des ActiveDirectory anzeigen.

getent user
getent group



Wenn dieser Test erfolgreich war, kann man in der Datei /etc/nsswitch.conf die entsprechenden Zeilen anpassen.

passwd:    file winbind
groups:    file winbind
shadow:    file winbind 



Somit wird winbind scharf geschaltet und sucht nun nach Usern, die nicht lokal auf der Linux-Maschine vorhanden sind im Active-Directory.


Ich hoffe, dass man mir die dürftigen Zusatzinfos verzeiht. Ich denke, wer sowas implementieren muss, wird kein Grünling auf dem Gebiet von Linux/Unix sein 🙂


Try it and have fun,


j.klein

Tags: , ,

Leave a Reply