Warum muss eigentlich für jedes Linux-System immer ein Passwort aus einem Passwort-Manager geholt werden, nur um eben einen Dienst neuzustarten oder die Logs zu durchforsten, wenn wir doch ein funktionierendes Active Directory im Einsatz haben?
Was muss also her: AD-Login für die Linux-Maschinen (Ubuntu/Debian)!
Da wir aber, wie auf den Windows Servern, nicht jedem den Zugriff und sudo (Kommandos als root ausführen!) erlauben wollen, müssen wir die Zugriffe einschränken, welches ich in diesem kurzen Tutorial ebenfalls tun werde.
Im Wesentlichen brauchen wir dafür die folgenden Pakete:
apt-get install winbind samba krb5-user libpam-krb5
Winbind übernimmt hier als Komponente von Samba im Zusammenspiel mit PAM & Kerberos die Hauptarbeit.
Kerberos
Als erstes werden die Kerberos Konfigurationen erledigt, dazu erstellen wir die /etc/krb5.conf in folgender Weise:
[libdefaults]
default_realm = DOMAIN.TLD
allow_weak_crypto = yes
# passend zum AD:
default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
[domain_realm]
.domain.tld = DOMAIN.TLD
# wir nutzen nicht den PRÄ-2000 Namen!
[realms]
DOMAIN.TLD = {
kdc = dc1.fqdn
kdc = dc2.fqdn
admin_server = dc1.fqdn
}
# wir nutzen nicht den PRÄ-2000 Namen, daher umschreiben, falls nötig
[appdefaults]
pam = {
mappings = DOMAIN_2000\\(.*) $1@DOMAIN.TLD
forwardable = true
validate = true
}
# Vorbereitung für Apache Kerberos Authentifizierung!
httpd = {
mappings = DOMAIN_2000\\(.*) $1@DOMAIN.TLD
reverse_mappings = (.*)@DOMAIN\.TLD DOMAIN_2000\$1
}
Zu ändern sind hier nur die Domänen-Namen, also der 2000er Name und die "moderne" Variante, sowie die Domänen-Controller, idealerweise als fqdn.
Jetzt testen wir den ersten Login mit einem AD-Admin und erzeugen ein Kerberos-Ticket mit
kinit AD-Admin@DOMAIN.TLD
Und lassen uns das erzeugte Ticket anzeigen:
klist
Der Kerberos Part ist damit abgeschlossen.
Samba
Auch hier müssen wir die Konfiguration in /etc/samba/smb.conf ändern:
[global]
security = ads
realm = domain.tld
workgroup = DOMAIN
idmap uid = 70000-100000
idmap gid = 70000-100000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind refresh tickets = yes
template homedir = /home/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
encrypt passwords = true
restrict anonymous = 2
domain master = no
local master = no
preferred master = no
os level = 0
socket address = 127.0.0.1
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
[domain-share]
path = /foo/bar
comment = Foo-Bar
browseable = no
read only = no
force user = root
force group = "DOMAIN+ad-group"
force create mode = 0666
force directory mode = 2777
force directory security mode = 0777
valid users = @"DOMAIN+ad-group"
Der "domain-share" ist nur ein Beispiel, wie man Samba-Freigaben mit AD Berechtigungen anlegen kann.
Wenn dieser genutzt werden soll, sollte die socket address auf die entsprechende IP-Adresse gesetzt werden oder einfach auskommentiert werden.
Um den Overhead zu reduzieren habe ich dem Samba hier verboten Master zu werden, sowie Druckfunktionen anzubieten.
Die Konfiguration des Samba ist abgeschlossen, wir müssen nun die smb und winbind (Wichtig!) Dienste neustarten
/etc/init.d/smbd restart && /etc/init.d/winbind restart
Fehlt nun noch der AD-Join:
net ads join -U AD-Admin
Ob der AD-Join wirklich erfolgreich war, können wir mit dem Tool wbinfo gut ermitteln:
wbinfo -u | wc -l
wbinfo -u liefert alle User aus dem AD zurück und mit wc -l zählen wir das Ergebnis.
Alternativ geht auch wbinfo -g (Gruppen).
Achtung: es kann eine gewisse Zeit dauern bis wbinfo korrekte Ergebnisse anzeigt!
Damit wir die gefundenen User auch als User im System und damit auch für die Anmeldung nutzen können, müssen wir am "internen" DNS ebenfalls etwas ändern und zwar in der /etc/nsswitch.conf:
Im Wesentlichen ergänzen wir die Zeilen user und group, so dass diese dann folgendermaßen aussehen:
passwd: compat winbind
group: compat winbind
Anschließend können wir noch einmal die Dienste neustarten:
/etc/init.d/smbd restart && /etc/init.d/winbind restart
Und einen erneuten Test durchführen, dieses Mal rufen wir die virtuelle passwd inkl. Domänen-User ab:
getent passwd
Hier sollten nun alle Domänen-User im normalen Passwd Format auftauchen:
username:*:71776:70000:Surname, givenName:/home/username:/bin/bash
Die Domänen-User können wir gut an den IDs über 70000 erkennen.
Damit haben wir die Samba Konfiguration abgeschlossen.
PAM
Dem Plugable Authentication Mechanism, kurz PAM, muss nun noch die Nutzung von Winbind beigebracht werden, dazu wird die Datei /etc/pam.d/common-account um folgende Zeile erweitert:
account [success=1 new_authtok_reqd=done default=ignore] pam_winbind.so
Weiterhin müssen wir Datei /etc/pam.d/common-auth erweitern, so dass sie wie folgt aussieht:
## restricted access
auth required pam_listfile.so onerr=fail item=group sense=allow file=/etc/login.group.allowed
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
Wir erinnern uns, wir wollen den Zugriff für bestimmte Nutzer Gruppen einschränken, dazu nutzen wir das PAM-Modul pam_listfile.so und tragen dort zeilen-basiert unsere erlaubten Gruppen (ohne Prefix!) ein.
Damit wir auf jedem System auch ein entsprechendes Home Verzeichnis bekommen, benötigen wir das Modul pam_mkhomedir.so, welches wir in die Datei /etc/pam.d/common-session einfügen:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
Abschluss
Damit wir die Änderungen testen können, machen wir einen SSH auf uns selbst:
ssh ad-user@hostname
Wenn das erfolgreich ist, fügen wir noch Samba und Winbind zum Autostart hinzu:
update-rc.d smb defaults && update-rc.d winbind defaults
Das wars!
Nachtrag: RHEL/CentOS/Oracle Linux
Das ganze funktioniert natürlich auch unter RHEL basierten Systen, dafür nutzt man die Pakete:
nscd pam_krb5 samba-common samba
Und ergänzt die Datei /etc/pam.d/system-auth-ac um folgende Zeilen:
auth sufficient pam_winbind.so use_first_pass
account [default=bad success=ok user_unknown=ignore] pam_winbind.so
session optional pam_winbind.so mkhomedir
Ansonsten variieren natürlich die Befehle etwas.
Bei Fragen bitte einfach melden.