… es war mal wieder einfacher als gedacht und trotzdem Bastelei… Wenn man Samba an eine Windows Active Directory Domäne anbinden will ist das eigentlich einfach – hängt aber an der ein oder anderen Stelle.
Hiermit möchte ich eine schnelle Lösung für die mir bekannten Probleme liefern.
Man benötigt Samba, Krb5 oder Heimdal, NTP und Winbind um diese Aufgabe meistern zu können. Da man für diese Aufhabe Kerberos benötig und für Kerberos eine möglichst exakte Zeit auf den betroffenen Maschinen notwendig ist kann man nicht auf die Synchronisieren der Zeit mit NTP verzichten.
Unter debian installiert man die notwendigen Pakete so:
apt-get install samba winbind krb5-config krb5-user ntpd
Kerberos konfiguriert man in der Datei /etc/krb5.conf:
[libdefaults] default_realm = MEINEDOMAIN.LOCAL clockskew = 300 dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true [realms] MEINEDOMAIN.LOCAL = { kdc = dc.meinedomain.local:88 admin_server = dc.meinedomain.local default_domain = MEINEDOMAIN.LOCAL } [domain_realm] .meinedomain.local = MEINEDOMAIN.LOCAL meinedomain.local = MEINEDOMAIN.LOCAL .meinedomain = MEINEDOMAIN.LOCAL [login] krb4_convert = true krb4_get_tickets = false [appdefaults] pam = { ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false retain_after_close = false minimum_uid = 0 debug = false }
In dieser Datei muss man unbedingt auf die Groß und Kleinschreibung achten. Es funktioniert nur so wie hier angegeben! Allerdings sollte man MEINEDOMAIN.LOCAL und meinedomain durch die eigene Domäne ersetzten.
Wenn man diese Datei angelegt hat kann man schon gegen Kerberos authentifizieren:
root@opsi:/etc/pam.d# kinit -V Administrator Password for Administrator@MEINEDOMAIN.LOCAL: Authenticated to Kerberos v5 root@opsi:/etc/pam.d# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: Administrator@MEINEDOMAIN.LOCAL Valid starting Expires Service principal 06/10/12 01:47:34 06/10/12 11:47:39 krbtgt/MEINEDOMAIN.LOCAL@MEINEDOMAIN.LOCAL renew until 06/11/12 01:47:34
Sollte es hier bereits Probleme geben muss man darauf achten, dass die Namensauflösung funktionert. Man muss den DC als DNS Server auf dem Linuxrechner angeben oder in der Datei /etc/hosts alle notwendigen hosts eintragen.
Achtung – ein Fallstrick kann hier und auch für winbind die Konfiguration der Namensauflösung werden. Es muss unbedingt eine dns Abfrage erfolgen – dafür muss die Datei /etc/nsswitch.conf so aussehen:
# winbind verwenden für die Benutzerdaten passwd: compat winbind group: compat winbind shadow: compat winbind hosts: files dns mdns4 # so wird kein dns abgefragt - das funktioniert nicht! #hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Wenn die Konfiguration korrekt ist kann man per DNS die Kerberos Server erfragen:
root@opsi:~# host -t srv _kerberos._tcp.meinedomain.local _kerberos._tcp.meinedomain.local has SRV record 0 100 88 dc.meinedomain.local. _kerberos._tcp.meinedomain.local has SRV record 0 100 88 bdc.meinedomain.local.
Wenn man diese Schritte erfolgreich durchgeführt hat kann man mit Samba beginnen. Eine einfache Konfiguration würde so aussehen:
[global] workgroup = MEINEDOMAIN realm = MEINEDOMAIN.LOCAL server string = %h server security = ADS obey pam restrictions = Yes password server = * pam password change = Yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 local master = No domain master = No preferred master = No # Adressen der WINS Server wins server = 192.168.1.1, 192.168.1.2 panic action = /usr/share/samba/panic-action %d idmap backend = rid idmap uid = 10000-20000 idmap gid = 10000-20000 template shell = /bin/nologin template homedir = /home/%U winbind enum users = Yes winbind enum groups = Yes winbind use default domain = Yes winbind nss info = rfc2307 winbind separator = / client use spnego = yes client ntlmv2 auth = yes restrict anonymous = 2 os level = 0 # Verschlüsselung notwendig? #client ldap sasl wrapping = seal # .... Weitere Einstellungen wie gewünscht - nur der General Bereich ist für die Konfiguration entscheidend
Nachdem die Konfiguration angepasst wurde muss man Samba und Winbind neustarten. Dann kann man mit diesen Befehlen der Domäne beitreten und sich die Informationen der Domäne anzeigen lassen:
# Der Domäne beitreten net ads join -U Administrator # hat der Join geklappt net ads join # Informationen über die Domäne anzeigen net ads info # Authentifizierung testen wbinfo -a Benutzer%Passwort
Sollte man hier bei „net ads info“ eine Meldung bekommen, dass die Uhrzeit des DC nicht gelesen werden kann, dann muss man sich um die DNS Auflösung kümmern – wie oben beschrieben muss die Auflösung klappen und die /etc/nsswitch.conf angepasst werden!
Ein paar weitere Testmöglichkeiten hat man mit wbinfo:
# Online Status der Domänen wbinfo --online-status # Benutzer anzeigen wbinfo -u # Gruppen anzeigen wbinfo -g # Aktuellen DC anzeigen wbinfo --getdcname MEINEDOMAIN # Status der Domäne/der Vertrauensstellung wbinfo -t