Quelle
Diese Dokumentation ist zu großen Teilen dem Artikel Debian Linux in eine Active Directory Domäne integrieren auf www.administrator.de entnommen. Eine sehr gute Anleitung, die ich hier nur für mich spezialisiert und erweitert habe.
Vorraussetzungen
Zeitsynchronisation (NTP)
Da das Kerberos Protokoll, das der Debian Server nutzen soll um mit dem Active Directory zu kommunizieren, stark von einer exakten Systemzeit abhängt, muss der Debian Server als NTP Client und der Windows Server als NTP Client als auch NTP Server konfiguriert sein, damit die Zeitsynchronität gewährleistet werden kann. Der Windows Server bezieht in unserem Szenario die Systemzeit von einem externen NTP Server, während der Debian Server als NTP Client die Systemzeit vom Windows Server bezieht.
DNS Namensauflösung (Forward Lookup und Reverse Lookup)
Ermitteln der verschiedenen Namen die der Domaincontroller trägt (Netbios, Workgroup, Domänen-Name, Kerberos-Realm) Man kann die NETBIOS- und Workgroup Namen auf dem Server2003 mit dem Befehl
nbtstat –n
ermitteln. Der Debian Server muss einen Reverse DNS Lookup auf den Domaincontroller machen können, also die IP Adresse in den DNS Namen auflösen können. Testen mit:
host 192.168.178.140
140.178.168.192.in-addr.arpa domain name pointer dc.firma.de
In aller Regel gilt z. B. bei einem Domaincontroller namens DC.FIRMA.DE
- der NETBIOS Name ist „DC“
- der Workgroup Name ist „FIRMA“
- der DNS Name ist „DC.FIRMA.DE“
- der Kerberos Realm ist „FIRMA.DE“
- der Domänen-Name ist „FIRMA.DE“
Damit die AD-Integration des Linux Servers einwandfrei funktioniert ist es wichtig dass..
- beide Server (Debian und DC) den Namen des anderen auflösen können
- Forward-Lookup (nslookup debian.firma.de bzw. nslookup dc.firma.de) als auch
- Reverse-Lookup (nslookup 192.168.178.140 bzw. nslookup 192.168.178.150)
einwandfrei auf beiden Servern funktionieren!
Debian IP Konfiguration
IP-Konfiguration: /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.178.150
netmask 255.255.255.0
network 192.168.178.0
broadcast 192.168.178.255
gateway 192.168.178.1
DNS Konfiguration: /etc/resolv.conf
# search firma.de
nameserver 192.168.178.140
Interface resetten (nur bei Konsolenverbindung machen!!!)
# ifdown eth0
# ifup eth0
Berechtigungen im Active Directory
Man benötigt für die AD-Integration ein AD-Benutzerkonto mit entsprechenden Berechtigungen. Dies kann ein Domänenadministrator sein. Es kann jedoch auch ein spezielles Benutzerkonto erstellt werden das die Berechtigung bekommt Objekte im AD anzulegen. Das ist notwendig da der Debian Server selbst ein Computerkonto im Active Directory anlegen muss und auch Berechtigungen braucht um Anfragen an das AD stellen zu können.
Debian Server Konfiguration
Installation Samba, Winbind, NTP, ntpdate, Kerberos und SSH
Installation für Windows Server 2003 Domänen
# aptitude install libkrb53 krb5-{user,config} samba smbclient winbind ntpdate ntp ssh
Unter Ubuntu (10.04 LTS) heißt das Paket libkrb53
libkrb5-3
Installation für Windows Server 2008 Domänen
Für die Integration des Servers in einen W2k8 Domäne ist zum aktuellen Zeitpunkt (20.05.2010) die Samba-Version des aktuell stabilen Debian Lenny zu alt, da ab Windows Server 2008 nur noch Kerberos und nicht mehr NTLM als Authentifizierung genutzt werden kann. Diese wird aber in der Samba-Version (3.2.5) noch nicht unterstützt. Deswegen müssen für eine Integration in W2k8-Domänen die Pakete aus dem Backport Repository installiert werden.
Dazu die folgende Zeile in die Datei /etc/apt/sources.list einfügen:
deb http:// www.backports.org/debian lenny-backports main contrib non-free
Danach ein …
# aptitude update
… und mann kann mit dem angepassten Install-Befehl die neueren Versionen installieren:
# aptitude -t lenny-backports install libkrb53 krb5-{user,config} samba smbclient winbind ntpdate ntp ssh telnet
Die Konfiguration ist die gleiche, wie in 2003-Domänen.
Dienste beenden
/etc/init.d/samba stop
/etc/init.d/winbind stop
/etc/init.d/ntp stop
Unter Ubuntu (10.04 LTS) heißt der Samba-Dienst anders:
/etc/init.d/smbd stop
Die Warnmeldung bzgl. upstart kann ignoriert werden.
Backup der Linux Config Dateien
Es ist ratsam zunächst alle Config Dateien auf dem Debian System zu sichern bevor man anfängt sie zu editieren. Wenn man beispielsweise bei der PAM Konfiguration die Config zerschießt ist u. U. keine Anmeldung am System mehr möglich.
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
cp /etc/krb5.conf /etc/krb5.conf.bak
tar -czf /etc/pam.d.targ.gz /etc/pam.d
tar -czf /var/lib/samba.tar.gz /var/lib/samba
Konfiguration der Dienste
Kerberos
Hier eine detailierte Beschreibung möglicher Parameter der krb5.conf
Datei: /etc/krb5.conf
[libdefaults]
Default_realm = FIRMA.DE
#The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
FIRMA.DE = {
kdc = dc.firma.de
admin_server = dc.firma.de
}
[domain_realm]
.firma.de = FIRMA.DE
[login]
krb4_convert = true
krb4_get_tickets = false
NTP
In der Datei /etc/ntp.conf den Domänencontroller als Zeitserver eintragen:
server 192.168.178.140
ntpdate
ntpdate dc.firma.de
NTP Dienst starten
/etc/init.d/ntp start
Zeitsynchronisation testen
ntpq -p
dat
Bei Bedarf Zeitzone ändern
Ich verwende Europe/Berlin.
dpkg-reconfigure tzdata
Winbind
Datei: /etc/samba/smb.conf
Hier eine detailliertere Beschreibung des winbind Dienstes
[global]
workgroup = FIRMA (Arbeitsgruppen Name; in aller Regel Domänen-Name ohne Suffix)
realm = FIRMA.DE (Domänen-Name)
netbios name = DEBIAN (NETBIOS-Name des Debian Servers; max. 15 Zeichen lang!)
security = ADS (Active Directory soll die Authentisierung stellen)
idmap uid = 10000-20000 (Range der UIDs für das Mapping von AD-RIDs auf UIDs)
idmap gid = 10000-20000 (Range der GIDs für das Mapping von AD-RIDs auf GIDs)
template shell = /bin/bash (Shell die der Benutzer nach der Anmeldung bekommt)
winbind use default domain = yes (User muss kein Prefix bei der Anmeldung angeben)
Hintergrundwissen „idmap“:
Das Linux System hat auch eine lokale Benutzerverwaltung (/etc/passwd). Jeder Benutzer und jede Gruppe benötigt eine eindeutige Kennung.
Im Active Directory sind dies die „SIDs“. Die SID besteht aus dem Domänen-Identifikator und einer RID (Relative Identifier). Jedes Benutzerkonto und jede Gruppe hat eine SID, eine eindeutige Sicherheitskennung.
Da Active Directory und Linux verschiedene Techniken für die Zuordnung von User- und Gruppennamen zu SIDs bzw. UID/GIDs benutzen, ist eine der Aufgaben von winbind, ein Mapping von Active Directory SIDs zu Linux UIDs/GIDs durchzuführen. Diese Zuordnung (welche SID ist zu welcher UID/GID zugeordnet) wird auf dem Linux Server in einer lokalen Datenbank unter /var/lib/samba/winbindd_idmap.tib gespeichert.
Durch den Eintrag „idmap uid = 10000-20000“ wird definiert, dass der Bereich von UID 10000 bis 20000 nicht von der internen Benutzerverwaltung verwendet wird, also für das Mapping von Active Directory SIDs zu Linux UIDs bzw. GIDs verwendet werden soll.
Testen der winbind Config mit
testparm
NSSWITCH
Datei: /etc/nsswitch.conf
Hier eine detailliertere Beschreibung der nsswitch Funktionalität
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat winbind
group: compat winbind
shadow: compat
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
PAM
Datei: /etc/pam.d/common-auth
Hier eine detailliertere Beschreibung der pam.d Konfigurationsdateien
# /etc/pam.d/common-auth - authentication settings common to all services
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure use_first_pass
Datei: /etc/pam.d/common-session
Damit bei der ersten Anmeldung am Rechner ein lokales Home-Verzeichnis angelegt wird, kann als erster Eintrag die Zeile
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
eingetragen werden.
Direkt dahinter sollte noch
session sufficient pam_winbind.so
stehen, damit der gdm bereits beim ersten Anmeldeversuch beim AD nachfragt.
Die vollständige Datei sieht dann bei mir so aus:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session sufficient pam_winbind.so
session required pam_unix.so
Debian Server in die Domäne integrieren
Checkliste
- host 192.168.178.140 (Funktioniert der Reverse Lookup?)
- nslookup dc.firma.de (Funktioniert die DNS Namensauflösung?)
- ping dc.firma.de (Ist der Domaincontroller erreichbar?)
- telnet dc.firma.de 445 (Port TCP445 erreichbar?)
- telnet dc.firma.de 139 (Port TCP139 erreichbar?)
- ntpq –p (Läuft die Zeitsynchronisation?)
- dpkg-reconfigure tzdata (Stimmt die Zeitzone?)
- ps –ef | grep mbd (Testen ob der Dienst läuft – wenn ja, stoppen!)
- ps –ef | grep winbind (Testen ob der Dienst läuft – wenn ja, stoppen!)
- /etc/init.d/winbind stop (winbindd stoppen!)
- /etc/init.d/samba stop (smbd / nmbd stoppen!)
- rm –rf /var/lib/samba/* (eventuell vorhandene winbind cache DB löschen!)
net join
net ads join –U Administrator (Das ist der Domänen-Administrator oder ein Benutzerkonto das berechtigt ist Objekte im AD anzulegen)
Dienste starten
/etc/init.d/samba start
/etc/init.d/winbind start
Unter Ubuntu (10.04 LTS) heißt der Samba-Dienst anders:
/etc/init.d/smbd start
Die Warnmeldung bzgl. upstart kann ignoriert werden.
Kontrollieren ob SMBD, NMBD und WINBIND Dienste gestartet sind:
ps –ef | grep mbd
ps –ef | grep winbind
Funktionalität testen
wbinfo –t (zeigt an ob das RPC trust secret passt)
wbinfo -a Administrator%Passwort (zeigt an ob sich AD-User Administrator über winbind authentisieren kann)
wbinfo –u (zeigt die Active Directory Benutzer an)
wbinfo –g (zeigt die Active Directory Gruppen an)
ssh Administrator@localhost (testen ob man sich lokal per SSH als Administrator (oder andere AD-Benutzer) anmelden kann)
init 6 (Debian Server neu starten und schaun ob die Dienste beim Neustart sauber starten)
update-rc.d samba defaults (Dienste, die eventuell nicht automatisch starten, zu den Autostart Services hinzufügen)
update-rc.d ntp defaults
update-rc.d winbind defaults
Fehlersuche
Was tun wenn es nicht funktioniert, oder wenn es „in der Regel“ funktioniert und plötzlich nicht mehr funktioniert?
Es wird dann Zeit für das wofür man eigentlich bezahlt wird – Fehlersuche und Fehlerbeseitigung.
Teste die grundsätzliche Erreichbarkeit auf Netz- und Portebene
- ping IP-Adresse (beidseitig)
- telnet 192.168.178.140 445
- telnet 192.168.178.140 139
Teste die DNS Namensauflösung auf beiden Servern
Debian Server:
- host 192.168.178.140 (funktioniert Reverse-Lookup?)
- host dc.firma.de (funktioniert Forward-Lookup?)
- ping dc.firma.de (funktioniert Layer3 Konnektivität?)
Windows Server:
- nslookup 192.168.178.150
- nslookup debian.firma.de
- ping debian.firma.de
Logfiles checken
Debian Server:
- /var/log/samba/log.winbindd
- /var/log/messages
Windows Server:
Active Directory checken
- Ist das Computerkonto des Debian Servers deaktiviert? Wenn ja – aktivieren.
- Ist das Computerkonto des Debian Servers gelöscht? Wenn ja – neu anlegen mit „net ads join -U Administrator“ auf dem Debian-Server. Computerkonto nicht manuell auf dem DC anlegen!
Wiederherstellung der Funktionalität
Siehe oben in der Anleitung ab Backup der Linux Config Dateien.
Informationen aus dem AD anzeigen
Benutzerinformationen zu einem Benutzer
wbinfo -i <benutzername>
AD-Gruppen eines Benutzers abfragen
for GID in $(wbinfo -r <benutzername>); do echo Windows-Gruppe: $(wbinfo -s $(wbinfo -G $GID)), Unix-GID: $GID ; done