Ich weiß nicht warum, aber die ganze Welt schimpfen auf Winbind. Ist aber meiner Meinung nach oft zu unrecht, denn es kann einem viel Arbeit beim AD/LDAP/ID Mapping ersparen. Wer Winbind noch nicht kennt, Winbind mappt die Windows SIDs auf lokale Linux UIDs und GIDs, sodass man unter Linux mit den Active Directory Benutzern und Gruppen arbeiten kann.
Meist wird winbind aber nicht eingesetzt, da es im nicht konfiguriertem Zustand zu einer Windows SIDs auf verschiedenen Servern unterschiedliche UIDs bzw. GIDs zurück liefert. Das ist in einer professionellen Umgebung natürlich inakzeptabel.

Die Lösung, die komischerweise nur wenige kennen hier, ist idmap_rid. Mit diesem Winbind Backend werden auf allen Linux Servern die selben UIDs zu Windows SIDs generiert.

Hier unsere Konfiguration mit idmap_rid in Kurzform (wer noch mehr wissen möchte einfach mich anschreiben).

Zunächst die Kerberos Konfiguration:
/etc/krb5.conf:

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

[libdefaults]
 default_realm = <SUBDOM.DOMAIN.DE>
 dns_lookup_realm = true
 dns_lookup_kdc = yes
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 <SUBDOM.DOMAIN.DE> = {
  default_domain = <subdom.domain.de>
 }

[domain_realm]
 .<subdom.domain.de> = <SUBDOM.DOMAIN.DE>

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

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

Die nsswitch nicht vergessen:
/etc/nsswitch.conf:

...
passwd:     files winbind
shadow:     files winbind
group:      files winbind
...

Und hier die Einträge in der smb.conf:
/etc/samba/smb.conf

[global]
workgroup = <WORKGROUPNAME>
security = ads
realm = <SUBDOM.DOMAIN.DE>
password server = *
wins server =
load printers = no
printcap name = /etc/printcap

idmap domains = DLD
idmap config DLD:backend = rid
idmap config DLD:range = 40000-1000000

winbind separator = /
template shell = /bin/bash
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
acl group control = yes

[test]
comment = Test Share for domain users only
path = /smbdata
read only = yes
valid users = @"DOM/domain users"
write list = "DOM/testy"

Die wichtigen Zeilen sind hier die drei idmap Einträge. Hier habe ich als backend, für die Berechnung der Linux UIDs und GIDs das Modul “rid” angegeben sowie eine Range für die IDs von 40.000 – 1.000.000 reserviert, sollte reichen…

Nachdem einem

net ADS join -U <username>

kann mit

wbinfo -t

die Winbind Konfiguration getestet werden. Ist hier alles OK sind die AD SIDs dem Linux bereits bekannt.

Prüfen:

  getent passwd | grep testy
  testy:*:65435:78221:USERNAME:/home/DOM/testy:/bin/bash

Der Benutzer testy hat bei dieser Konfiguration auf allen Linux Servern die uid 65435.

Nun dürfen alle Benutzer aus der AD Gruppe “domain users” auf die Samba Freigabe test zugreifen und testy darf zusätzlich schreiben.

Das ganze funktioniert übrigens auch mit mehreren Domains! Die Manpage “man idmap_rid” hilft weiter.

Einziger Nachteil ist hier, dass man jedem dieselbe Shell zuweisen muss. Das benötigt man ja aber eh nur, wenn sich der Benutzer auch direkt am System anmelden möchte.

Also: Winbind ist nicht nur böse! Nicht immer drauf rumhacken!