Winbind

Winbind ist eine Software, mit deren Hilfe ein Linuxrechner in eine Windows-Domäne aufgenommen werden kann.
Die Anmeldung an diesem Rechner kann dann mit dem normalen Windows-benutzernamen und dem zugehörigen Passwort erfolgen.

Installation

Der aufzunehmende Rechner muss dem DNS-Server bekannt sein, dh. der Client muss von anderen per nslookup meinClient auflösbar sein.
Dazu muss sich der Client per DHCP-Server eine IP ziehen und von diesem dem DNS-Server bekannt gemacht werden oder der Client erhält eine
statische IP-Adresse und wird manuell einmalig auf dem DNS-Server eingetragen.
dann als root die benötigte Software installieren:

apt-get install winbind libnss-winbind ntp libnss-winbind libpam-winbind krb5-user

Samba ist nicht nötig!!! Samba ist nur nötig, wenn Freigaben oder Drucker konfiguriert werden sollen.(siehe auch: SAMBA)
samba-common wird automatisch mit installiert.

dann die Zeit des Clients an die Domäne angleichen.(siehe auch ntp)
Die genaue Uhrzeit ist bei einer Domänenanbindung eines Linuxservers wichtig.
Bei mehr als 5 Minuten Zeitunterschied zwischen Client und Server wird die Authentifizierung vom Server standardmäßig abgelehnt.
typische Fehlermeldung : Timeskew to great.

jetzt den bei der Installation gestarteten WINBIND-Dienst erstmal wieder stoppen :

/etc/init.d/winbind stop

jetzt die Datei /etc/nsswitch editieren:

passwd:   files winbind
group:    files winbind
# "compat winbind" geht meistens auch

jetzt die Datei /etc/samba/smb.conf editieren.
hier die eigenen gültigen Daten eintragen:

workgroup = MYNTDOM
netbios name = myserver
wins support = no
wins server = 192.168.1.99
security = ADS
winbind offline logon = yes
winbind use default domain = yes
winbind refresh tickets = yes
winbind enum users = yes
winbind enum groups = yes
encrypt passwords = true
password server = myDomcontr.my.dom.ain
realm = MY.DOM.AIN
idmap config MYNTDOM:range = 20000-30000
idmap config MYNTDOM:backend = ad
idmap config * : backend = tdb
# ab hier weitere Freigaben konfigurieren

jetzt die Datei /etc/krb5.conf editieren.
hier die eigenen gültigen Daten eintragen:

[libdefaults]
             default_realm = MY.DOM.AIN
[realms]
             MY.DOM.AIN = {
             kdc = 192.168.1.90
             admin_server = 192.168.1.90
             kpasswd_server = 192.168.1.90
             default_domain = MYNTDOM
[domain_realms]
              .MYNTDOM = MY.DOM.AIN
               MYNTDOM = MY.DOM.AIN

jetzt die Datei /etc/pam.d/common-account editieren:

account sufficient   pam_krb5.so
account sufficient   pam_winbind.so use_first_pass
session required     pam_mkhomedir.so skel=/etc/skel umask=0022
account required     pam_unix.so use_first_pass

jetzt die Datei /etc/pam.d/common-auth editieren:

auth sufficient   pam_krb5.so
auth sufficient   pam_winbind.so use_first_pass
# wenn nur einer bestimmten Windowsgruppe Zugriff erlaubt sein soll, Zeile so abändern:
# auth sufficient   pam_winbind.so use_first_pass require_membership_of=myNTGroup1,myNTGroup2
auth required     pam_unix.so nullok_secure use_first_pass

jetzt die Datei /etc/pam.d/common-session editieren:

session sufficient   pam_krb5.so
session sufficient   pam_winbind.so
session sufficient   pam_mkhomedir.so
session required     pam_limits.so
account required     pam_unix.so

jetzt den Rechner in die Windowsdomäne aufnehmen und den Clientrechner neustarten:

net ads join –U administrator
Enter administrators's password: <password von admin>
net ads keytab create -U administrator
Enter administrator's password:
reboot

Nach dem Neustart sollte eine Anmeldung mit einem Domänenaccount möglich sein.

Und jetzt das ganze nochmal als Script

Tricks

Benutzer

Zeige mir alle Benutzer der Domäne an:

wbinfo -u

Zeige mir alle Benutzer der Domäne an:

net ads user -U einDomänenbenutzer

oder:

net rpc shell -U domadmin -S mydomctrl
user list

Zeige mir alle Domänenbenutzer deren samaccountname mit a beginnt und deren LDAP-Felder der Domäne an:

net ads search "(sAMAccountName=a*)" -U einDomänenbenutzer

Zeige mir alle deaktivierten Benutzer der Domäne an:

net ads search "(userAccountControl:1.2.840.113556.1.4.803:=514)" -U einDomänenbenutzer

Zeige mir alle gesperrten Benutzer der Domäne an:

net ads search "(&(&(sAMAccountType=805306368)(lockoutTime>=1)))" -U einDomänenbenutzer

Zeige mir alle Benutzer mit nicht ablaufendem Passwort an:

net ads search "(userAccountControl=66048)" samaccountname -U einDomänenbenutzer

Zeige mir die Mailadresse des Benutzers „Meier“ an:

net ads search "(samAccountname=meier)" name mail -U einDomänenbenutzer

Zeige mir alle Benutzer der Domäne und die lokalen Benutzer an:

getent passwd

Zeige mir die SID des Benutzers „doedel“ an:

wbinfo -n doedel

Zeige mir den Windowsbenutzernamen der SID „S-1-5-21-2025429265-861567501-839422115-1234“ an:

wbinfo -s SID S-1-5-21-2025429265-861567501-839422115-1234

Zeige mir die Unix-Benutzer-UID der Windows-SID „S-1-5-21-2025429265-861567501-839422115-1234“ an:

wbinfo -S SID S-1-5-21-2025429265-861567501-839422115-1234

Zeige mir die Windows-SID der Unix-Benutzer-UID „12345“ an:

wbinfo -U 12345

Zeige mir Infos von einem Benutzer an:

wbinfo -i doedel

oder:

  net rpc shell -U domadmin -S mydomctrl
  user show doedel
  user edit description doedel 

Gruppeninfos:

net rpc shell -U domadmin -S mydomctrl
user info doedel

Prüfe ob der Benutzer gesperrt ist:

net rpc shell -U domadmin -S mydomctrl
user edit autolock doedel
quit

Prüfe das Passwort eines Benutzers:

wbinfo -a doedel%seinPasswort

Zeige mir alle Benutzer der Domäne und ihre jeweilige AD-Gruppenmitgliedschaft an:

for i in `wbinfo -u`;do echo $i;id $i|tr , '\n'|nl;done

Füge einen Domänenbenutzer in eine lokale Gruppe ein:

usermod -aG www-data myNTUser

Erstelle von Linux aus einen Window-Domänenbenutzer myNTUser und aktiviere ihn:

net ads user add myNTUser -U domadmin%domadminpassword
#setze jetzt das Passwort:
net ads password myNTUser -U domadmin%domadminpassword
# Benutzer muss danach noch aktiviert werden:
net rpc shell -U domadmin%domadminpassword -S Domctlr
user edit disabled myNTUser no
exit
# füge den Benutzer jetzt in die Gruppe myNTGroup ein:
net rpc group addmem myntgroup myNTUser -u domadmin%domadminpassword -S Domctlr

Benutzerpasswort soll nicht mehr ablaufen:

net rpc shell -U domadmin%domadminpassword -S Domctlr
user edit pwnoexp myNTUser yes
exit

Teste indirekt ob der Benutzer doedel in einer NT-Gruppe myntgroup ist:

ntlm_auth --username=doedel --require-membership-of=MYNTDOM\\myntgroup


Gruppen

Zeige mir alle Gruppen der Domäne an:

wbinfo -g

Zeige mir alle Gruppen der Domäne per LDAP an:

net ads search "(objectCategory=group)" samaccountname -U einDomänenbenutzer

Zeige mir alle Gruppen der Domäne und die lokalen Gruppen an:

getent group

Zeige mir alle Gruppen an, in der der Benutzer „doedel“ Mitglied ist:

net rpc user info doedel -S myNTDomController -U user
Enter user's password: geheim

Zeige mir alle Mitglieder der Gruppe „myNTGroup“ an:

net rpc group members myNTGroup -S myNTDomController -U einDomänenbenutzer

Füge den Benutzer doedel in die Domänengruppe Luschies ein:

net RPC group addmem "MYNTGROUP\Luschies" doedel -U domadm
Enter domadm's password: geheim

Entferne den Benutzer doedel aus der Domänengruppe Luschies :

net RPC group delmem "MYNTGROUP\Luschies" doedel -U domadm
Enter domadm's password: geheim

Zeige mit alle Benutzer mit den Gruppen-SIDS an:

net usersidlist


Die im AD gemachten Änderungen werden nicht vom winbind übernommen:

net cache flush
/etc/init.d/winbind stop
rm /var/cache/samba/*
/etc/init.d/winbind start

dabei werden jedoch die IDs auf dem Linuxhost eventuell neu vergeben.

Computer, Dienste, Zeit, Verschiedenes

Zeige mir alle Dienste auf einem Rechner (oder Server) an:

net rpc service list -S IPoderHostname -U einAdmin
Enter einAdmin's password:

Zeige mir ob der Zeitdienst auf einem bestimmten Server ausgeführt wird:

net rpc service status w32time -S IPoderHostname -U einAdmin
Enter einAdmin's password:

Stoppe den Zeitdienst auf dem Server:

net rpc service stop w32time -S IPoderHostname -U einAdmin
Enter einAdmin's password:

Starte den Zeitdienst auf dem Server:

net rpc service start w32time -S IPoderHostname -U einAdmin
Enter einAdmin's password:

Starte den Windowsrechner neu :

net rpc shutdown -r -t 120 -C "Rechner wird in 2 Minuten neu gestartet" -S IPoderHostname -U einAdmin
Enter einAdmin's password:

Teste die Domänenverbindung:

wbinfo -t

Erstelle ein Kerberosticket mit WINBIND:

wbinfo -K domuser%seinPassword

Verhindere, dass einfache Benutzer sich interaktiv anmelden können;die Domänenauthentifizierung wird nur für SVN, Samba o.ä. gebraucht:

touch /etc/nologin

oder editiere die Datei /etc/pam.d/common-auth wie folgt:

auth sufficient pam_winbind try_first_pass require_membership_of=meineNTGruppe1,meineNTGruppe2

Registriere den Computer erneut im DNS:

 net ads dns register

Registriere den Computer erneut im DNS mit einer bestimmten IP-Adresse (wichtig wenn der Rechner mehrere IPs hat):

 net ads dns register -I 192.168.1.100

Erstelle einen Kerberostoken für einen Benutzer:

net ads keytab create -U meinBenutzer

Zeige mir allgemeine Infos an wo und wie der Rechner sich authentifiziert:

net ads info

Teste den Rechner auf Mitgliedschaft in der Domäne:

net ads testjoin

Wenn es Probleme gibt mit dem net-Befehl kann man bsp. das Debugging wie folgt einschalten:

net -d 10 ads info

realm testen:

realm discover $(hostname -d)
realm list
net ads keytab list
klist
smbcontrol all dump-domain-list


smb.conf neu einlesen:

smbcontrol all reload-config

Erweiterungen in der /etc/samba/smb.conf:


wenn kerberos benutzt werden soll dann:

kerberos method = secrets and keytab

wenn winbind die ID eine Stunde statt 5 Minuten cachen soll dann:

winbind cache time = 3600

wenn auch verschachtelte Untergruppen durchsucht werden sollen, dann:

winbind nested groups = yes

Homeverzeichnis umbiegen:

template homedir = /daten/home/%D/%U

wenn auf allen Rechnern die selben GIDs verwendet werden sollen, dann auf allen Rechnern:

idmap backend = idmap_rid:MyNTDOM=10000-20000
idmap config MYNTDOM:range = 20000-30000

dadurch erhält beispielsweise ein Benutzer mit der SID: S-1-5-21-2025429265-861567501-839522115-1409
auf allen Linuxrechnern die ID:11409. Das ist der letzte Teil der SID + der Wert von idmap uid
Das funktioniert aber nur mit Domänenbenutzern, die noch nie an dem Linuxechner angemeldet waren.
Sonst wird nähmlich die alte ID zwischengespeichert und weiterverwendet.
Dann muss man winbind stoppen und die Datei /var/cache/samba/winbindd_cache.tdb löschen und winbind wieder neu starten.
auch sollte man alle Benutzer per getent passwd angezeigt bekommen, sonst muss idmap_backend auskommentiert werden.

Eintrag per sed in smb.conf machen:

sed -i '/^\[global]/a\winbind use default domain = yes' /etc/samba/smb.conf

erweiterte Dateiattribute unterstützen:

vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes


Backup/Restore von Winbindinformationen

Hoffentlich muss ich das nie zurückspielen.
TDB-Dateien sichern:

cd /var/lib/samba/
tdbbackup *.tdb

ID-Mapping sichern:

cd;mkdir backup
net idmap dump /var/lib/samba/winbindd_idmap.tdb > backup/idmap.txt

Besonderheiten SUSE

net join kann auch so gemacht werden:

yast2 samba-client joindomain domain=MY.DO.MAIN user=myaduser password=geheim
yast2 samba-client winbind enable
#test mit:
yast2 samba-client isdomainmember domain=MYNTDOMAIN

Suse fügt evtl. nicht die Parameter in der /etc/samba/smb.conf hinzu:

winbind use default domain = yes
winbind enum groups = yes
winbind enum users = yes

dann also diese hinzufügen.
wenn auch noch die homedirs automatisch angelegt werden sollen, dann:

pam-config -a --mkhomedir

Überwachung von Winbind mit snmpd

apt install sudo snmpd

wbinfo braucht Rootrechte zur Ausführung.
deshalb in der Datei /etc/sudoers folgende Zeile einfügen:

Debian-snmp ALL = (root)NOPASSWD: /usr/bin/wbinfo -t

in der Datei /etc/snmp/snmpd.conf folgende Zeile einfügen:

extend wbinfo /usr/bin/sudo /usr/bin/wbinfo -t

dann Snmpdienst neustarten:

systemctl restart snmpd

Danach sollte unter der OID 1.3.6.1.4.1.8072.1.3.2.3.1.4.6.119.98.105.110.102.111 oder ähnlich der Wert gleich 0 sein,
wenn wbinfo erfolgreich ist und 1 wenn es keine Verbindung zur Domäne hat oder Dienst aus ist.
Die OID kann abweichen und muss dann mit snmpwalk oder snmptester.exe ermittelt werden.
Danach kann in Prtg ein Sensor (SNMP Benutzerdef.) hinzugefügt werden.

Fehler

Fehler:
Ein Benutzer wird im AD in eine Domänengruppe eingefügt.Dies wird aber nicht auf dem Linuxserver sichtbar.
Lösung:
Warten bis zum nächsten Tag.
oder:
Wenn die UserIDs auf dem Rechner egal sind, kann man die TDB-Dateien löschen und die Dienste neu starten.
Das Gefummel in der smb.conf mit den Cachewerten führt nicht zum Erfolg.

rm /var/cache/samba/*.tdb
/etc/init.d/winbind restart
/etc/init.d/samba restart
getent passwd
getent group | grep meineGruppe
#Gegenprobe
id meinDomuser | grep meineGruppe


Fehlersuche

/etc/init.d/winbind stop
winbindd -d 6 -i -s /etc/samba/smb.conf


Fehler:
Nach dem Upgrade des Domänenlevels auf Windows 2008R2 können sich alte Linuxclients mittels Kerberos nicht mehr anmelden.
Fehlersuche
Auf dem Domänencontroller muss DES als Verschlüsselungsoption wieder eingeschaltet werden.
starte secpol.msc Security Settings \ Local Policies \ Security Options \„Network security: Configure encryption types allowed for Kerberos“

hier alles anknipsen


Fehler:
Nach Installation von winbind auf debian 8 (jessie) werden trotz erfolgreichem netjoin keine Benutzer mit wbinfo -u und wbinfo -g angezeigt.
Fehlersuche
Eintrag in der /etc/samba/smb.conf:

client ldap sasl wrapping = plain

danach Neustart der dienste erforderlich.
zurück