Freitag, 11. März 2011

Samba Multi-Domain Authentifizierung mit Windows-ADS und RHEL 5.4

Die Herausforderung in diesem HowTo ist die Anbindung eines Linux-Servers an eine bestehende MS ADS-Domaene.

Der Knackpunkt hierbei ist dass eine Anmeldung am Linux-Server fuer zwei Domaenen funktionieren muss. Es handelt sich um die Domaene "Bremen.local" und "Hamburg.local". Die Authentifizierung soll außerdem fuer Samba via dem Hoellenhund "Kerberos" moeglich sein und auch eine SSH-Verbindung muss mit Domain-Authentifizierung funktionieren.

Nun nicht lange schnaggen, Kopp in' Nacken! ;=)


1. System- und Paketinformationen
Linux: Red Hat Enterprise Linux 5.4
IP = 10.14.8.138
Name = client01

Kerberos: rpm -qa | grep "krb"
krb5-auth-dialog-0.7-1
krb5-workstation-1.6.1-36.el5
pam_krb5-2.2.14-10
krb5-devel-1.6.1-36.el5
krb5-libs-1.6.1-36.el5
pam_krb5-2.2.14-10
krb5-libs-1.6.1-36.el5_5.6

Samba: rpm -qa | grep "samba"
samba3-client-3.5.8-43.el5
samba3-utils-3.5.8-43.el5
samba3-cifsmount-3.5.8-43.el5
samba3-3.5.8-43.el5
samba3-winbind-3.5.8-43.el5
samba3-debuginfo-3.5.8-43.el5

Active Directory:
Windows 2008 Domaene = Hamburg.local
Windows 2000 Domaene = Bremen.local


2. Installation - Pakete / Dienste
Zunaechst muessen wir uns die aktuellen Pakete von Sernet herunterladen:
http://ftp.sernet.de/pub/samba/3.5/rhel/5/x86_64
Wir benoetigen ALLE Pakete die dort aufgelistet sind.

Dann deinstallieren wir alle vorhandenen Pakete (Samba v. 3.4.9):
rpm -e --allmatches --nodeps samba3-cifsmount-3.4.9-42.el5
rpm -e --allmatches --nodeps samba3-utils-3.4.9-42.el5
rpm -e --allmatches --nodeps samba3-winbind-3.4.9-42.el5
rpm -e --allmatches --nodeps samba3-3.4.9-42.el5
rpm -e --allmatches --nodeps libsmbclient0-3.4.9-42.el5

Nun installieren wir alle neuen Samba-Pakete (Samba v. 3.5.8):
rpm -Fvh ldb-tools-3.5.8-43.el5.x86_64.rpm
rpm -Fvh libwbclient0-3.5.8-43.el5.x86_64.rpm
rpm -Fvh libwbclient-devel-3.5.8-43.el5.x86_64.rpm
rpm -Fvh libsmbclient0-3.5.8-43.el5.x86_64.rpm
rpm -Fvh libsmbclient-devel-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-client-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-cifsmount-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-debuginfo-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-doc-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-utils-3.5.8-43.el5.x86_64.rpm
rpm -Uvh samba3-winbind-3.5.8-43.el5.x86_64.rpm

Bei der Installation des Paketes "samba3-doc-3.5.8-43.el5.x86_64.rpm"
werden einige Perl-Fehler geworfen, da Abhaengigkeiten zu aktuelleren Paketen
"nicht" hergestellt werden koennen. -> Dies kann ignoriert werden!


3. Konfiguation - Kerberos
Um die Aufloesung der einzelnen Hosts im Netzwerk gewaehrleisten zu koennen,
sollte zwingend ein DNS-Server konfiguriert sein. Ist dies nicht der Fall, so
muessen alle DC's und der Linux-Server entsprechend in der /etc/hosts hinterlegt
werden.

Inhalt der /etc/hosts:
10.14.8.138 client01.hamburg.local client01
10.14.8.1 dchh01.hamburg.local dchh01
10.14.3.4 bremen-rootdc1.bremen.local bremen-rootdc1

- client01.hamburg.local ist hierbei unser Linux-Server
- dchh01.hamburg.local ist der Domaincontroller der Domaene "hamburg.local"
- bremen-rootdc1.bremen.local ist der Domaincontroller der Domaene "bremen.local"

Via dem PING-Tool koennen wir nun die Aufloesung von "Name" in "IP" ueberpruefen.

Um Kerberos nutzen zu koennen muessen wir die Konfigurationsdatei des Dienstes unterhalb von /etc/ anpassen:

Inhalt der /etc/krb5.conf:
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log

[libdefaults]
default_realm = HAMBURG.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 600
forwardable = true
proxiable = true
default_keytab_name = FILE:/etc/krb5.keytab

[realms]
HAMBURG.LOCAL = {
kdc = dchh01.hamburg.local
master_kdc = dchh01.hamburg.local
admin_server = dchh01.hamburg.local
#default_domain = HAMBURG.LOCAL
}
BREMEN.LOCAL = {
kdc = bremen-rootdc1.bremen.local
}

[domain_realm]
.hamburg.local = HAMBURG.LOCAL
hamburg.local = HAMBURG.LOCAL
.bremen.local = BREMEN.LOCAL
bremen.local = BREMEN.LOCAL

[login]
krb4_convert = true
krb4_get_tickets = true

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


4. TEST - Kerberos-Authentifizierung
kinit administrator@HAMBURG.LOCAL
Password for administrator@HAMBURG.LOCAL: !wbc01 {ENTER}
-> "Administrator-Password" wird abgefragt, an dieser Stelle bitte das Passwort
eingeben und mit ENTER bestaetigen -> hier duerfen keine Fehler auftreten!

Ueberpruefen ob wir ein gueltiges Kerberos TGT Ticket erhalten haben:
klist
-> der Inhalt sollte so aussehen:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@HAMBURG.LOCAL
Valid starting Expires Service principal
01/20/11 17:36:17 01/21/11 03:39:06 krbtgt/HAMBURG.LOCAL@HAMBURG.LOCAL
renew until 01/21/11 17:36:17
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached


5. Konfiguration - Samba / Winbind
Nachdem der Kerberos-Dienst konfiguriert und erfolgreich getestet wurde,
muessen wir unseren Samba-Dienst entsprechend konfigurieren. Samba wird hierbei mit Hilfe von Winbind die Daten aus dem ADS von Microsoft beziehen (SID/RID, Gruppennamen, Benutzernamen) und diese dann auf die bekannten Linux UID's / GID's mappen.

Inhalt der /etc/samba/smb.conf:
# GLOBAL PARAMETERS
[global]
#netbios name = HAMBURG1
workgroup = HAMBURG
realm = HAMBURG.LOCAL
password server = *
preferred master = no
server string = Linux Test Server
security = ads
encrypt passwords = yes
local master = no
log level = 1
log file = /var/log/samba/%m
max log size = 50
#printcap name = cups
#printcap = cups
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind nested groups = Yes
winbind separator = \\
winbind refresh tickets = yes
winbind offline logon = true
winbind trusted domains only = no
map untrusted to domain = Yes
allow trusted domains = yes
obey pam restrictions = no
idmap backend = tdb
idmap uid = 10000-600000
idmap gid = 10000-600000
passdb backend = tdbsam
;template primary group = "domain users"
template shell = /bin/bash
winbind nss info = rfc2307
client use spnego = yes
client ntlmv2 auth = yes
restrict anonymous = 2

[homes]
comment = Heimatverzeichnisse
valid users = %S
path = /home/HAMBURG/
read only = no
browseable = no
create mask = 0700
directory mask = 0700

[testsh01]
comment = Rechtevergabe testen
valid users = root,@"domain users",@"BREMEN\domänen-benutzer"
path = /srv/smb/testsh
readonly = no
read list = @"domain admins",@"domain users"
write list = @"domain admins",@"domain users"
browseable = yes
force create mode = 0770
force directory mode = 0770
level2 oplocks = No
wide links = No
follow symlinks = No

Nachdem wir die Samba-Konfiguration ueberarbeitet haben, koennen wir mit "testparm" unsere smb.conf ueberpruefen.

Als naechstes legen wir die benoetigen Verzeichnisse an:
mkdir -p /home/HAMBURG
mkdir -p /home/DFD
mkdir -p /srv/smb/testsh

Da es unter 64-Bit Systemen (allgemein im Linux-Umfeld) immer mal wieder Probleme mit den Libaries / Bibliotheken gibt, kopieren wir diese noch an die richtigen Stellen im Dateisystem:
ln -s /lib/libnss_winbind.so.2 /lib/libnss_winbind.so
cp /lib/libnss_winbind.so* /usr/lib/
cp /lib/libnss_winbind.so* /usr/lib/security/
cp /lib/libnss_winbind.so* /lib64/
cp /lib/libnss_winbind.so* /usr/lib64/
cp /lib/libnss_winbind.so* /usr/lib64/security/
cp /lib/libnss_winbind.so* /usr/lib/nss/
cp /lib/libnss_winbind.so* /usr/lib64/nss/

Danach tragen wir den Samba-Dienst und Winbind-Dienst noch via "chkconfig" im Systemstart ein:
chkconfig smb on && chkconfig winbind on
Jetzt starten wir samba und winbind:
service smb start && service winbind start

Beide Dienste sollten nun gestartet sein, ein "ps ax | grep smb" bzw. "ps ax | grep winbind" sollte die jeweiligen Prozesse anzeigen.


6. Domain-Join (ADS)
Nachdem Samba, Winbind und Kerberos konfiguriert wurden, muessen wir unsere Linux-Maschine zum ADS hinzufuegen (sog. Domain-Join).

net ads join -U Administrator
-> "Administrator-Password" wird abgefragt, an dieser Stelle bitte das Passwort
eingeben und mit ENTER bestaetigen -> hier duerfen keine Fehler auftreten!

Auch hier duerfen "KEINE" Fehler auftreten. Nachdem der Join durchgefuehrt wurde muss eine Kerberos-Keytab Datei angelegt werden. Samba automatisiert diesen Prozess mit folgendem Befehl:
net ads keytab create
-> an dieser Stelle bitte das Passwort eingeben und mit ENTER bestaetigen
-> hier duerfen keine Fehler auftreten!

Info:
-> um einem ADS-Beitritt zu negieren, folgenden Befehl absetzen
-> net ads leave -U administrator


7. TEST - Winbind
Nun muessen wir Sicherstellen, dass winbind die Benutzerdaten und Gruppendaten aus dem ADS beziehen kann:
wbinfo -u
-> "wbinfo -u" listet die Benutzer aus dem AD auf
wbinfo -g
-> "wbinfo -g" listet die Gruppen aus dem AD auf
wbinfo -t
-> ueberprueft den "secret trust" fuer die Domaene "Hamburg.local"
wbinfo -m
-> listet alle bekannten "Interdomain-Vertrauensstellungen" zw. den Domains / Forests auf


8. Name Service Switch (NSS) konfigurieren
folgende Zeilen in der /etc/nsswitch.conf aendern:
ALT =>
passwd: db files nisplus nis
shadow: db files nisplus nis
group: db files nisplus nis

NEU =>
passwd: files winbind
shadow: files winbind
group: files winbind


9. Plugable Authentication Modules (PAM) konfigurieren
Achtung: Aenderungen an den PAM-Einstellungen koennen das System beschaedigen...
Bitte vorher ein Backup der /etc/pam.d/system-auth erstellen!
Wir "inkluden" nun die Module pam_winbind, pam_mkhomedir und pam_krb5:
vi(m) /etc/pam.d/system-auth
-> der Inhalt sollte so aussehen:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_krb5.so use_first_pass
auth sufficient pam_smb_auth.so use_first_pass nolocal
auth sufficient pam_winbind.so use_first_pass
auth required pam_deny.so

account required pam_unix.so broken_shadow
account sufficient pam_succeed_if.so uid < 500 quiet account sufficient pam_krb5.so account sufficient pam_winbind.so account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_krb5.so use_authtok
password sufficient pam_winbind.so use_authtok
password required pam_deny.so

session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_krb5.so
session required pam_mkhomedir.so skel=/etc/skel umask=0077


10. SSH-Dienst "kerberisieren"
folgende Zeilen zur /etc/ssh/sshd_config hinzufuegen:
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes

SSH-Dienst neustarten:
service sshd restart


11. TEST - Authentifizierung (am prompt / an der Kommandozeile)
via STRG+ALT+F2 wechseln wir auf das zweite Konsolenfenster.

client01 login: schlegels
Password: hamburg01
-> Ausgabe:
Warning: Your password will expire in 2 days.
Creating directory '/home/EOS/schlegels'.
Creating directory '/home/EOS/schlegels/.mozilla'.
Creating directory '/home/EOS/schlegels/.mozilla/plugins'.
Creating directory '/home/EOS/schlegels/.mozilla/extensions'.
Last login: Thu Mar 10 18:22:12 2011 from 10.14.3.240

Nach dem Login via SSH solltet ihr außerdem ein Kerberos-Ticket erhalten haben, dies kann via "klist" ueberprueft werden:
Ticket cache: FILE:/tmp/krb5cc_10269_Vr7ojc
Default principal: schlegels@HAMBURG.LOCAL

Valid starting Expires Service principal
03/11/11 14:00:28 03/12/11 00:00:28 krbtgt/HAMBURG.LOCAL@HAMBURG.LOCAL
renew until 03/12/11 00:00:28


Kerberos 4 ticket cache: /tmp/tkt10269
klist: You have no tickets cached

Soweit zur Authentifizierung an der HAMBURG.LOCAL - Domaene.
Der Parameter "winbind use default domain" sorgt dafuer das wir kein "HAMBURG" vor dem Benutzernamen eingeben muessen. Sonst wuerde die Anmeldung wie die eines Benutzers aus der "BREMEN"-Domaene aussehen.

Authentifizierung an der BREMEN-Domaene testen:
via STRG+ALT+F3 wechseln wir auf das dritte Konsolenfenster.

client01 login: dfd\schlegels
Password: Bremen01
-> Ausgabe:
Your password will expire in 13 days.

Creating directory '/home/DFD/schlegels'.
Creating directory '/home/DFD/schlegels/.mozilla'.
Creating directory '/home/DFD/schlegels/.mozilla/plugins'.
Creating directory '/home/DFD/schlegels/.mozilla/extensions'.
Last login: Fri Mar 11 12:45:03 2011 from 10.14.3.240

Nach dem Login via SSH solltet ihr außerdem ein Kerberos-Ticket erhalten haben, dies kann via "klist" ueberprueft werden:
Ticket cache: FILE:/tmp/krb5cc_11696
Default principal: schlegels@BREMEN.LOCAL

Valid starting Expires Service principal
03/11/11 14:07:18 03/11/11 14:17:18 krbtgt/BREMEN.LOCAL@BREMEN.LOCAL
renew until 03/18/11 14:07:18
03/11/11 14:07:19 03/11/11 14:17:18 krbtgt/HAMBURG.LOCAL@BREMEN.LOCAL
renew until 03/18/11 14:07:18
03/11/11 14:07:19 03/11/11 14:17:18 CLIENT01$@HAMBURG.LOCAL
renew until 03/18/11 14:07:18
03/11/11 14:07:19 03/11/11 14:17:18 CLIENT01$@HAMBURG.LOCAL
renew until 03/18/11 14:07:18


Kerberos 4 ticket cache: /tmp/tkt11696
klist: You have no tickets cached

Wenn die Authentifizierung am Systemprompt funktioniert hat, kann die Verbindung via SSH getestet werden.

Als letzten Schmankerl testen wir nach der Anmeldung noch die Verbindung auf eine Samba-Freigabe (testsh01) -> siehe smb.conf.

HAMBURG-User: schlegels
smbclient //client01/testsh01 -k
-> Ausgabe:
[schlegels@client01 ~]$ smbclient //client01/testsh01 -k
Domain=[HAMBURG] OS=[Unix] Server=[Samba 3.5.8]
smb: \>

-> TOP! Die Watte quillt! ;=)

BREMEN-User: BREMEN\schlegels
smbclient //client01/testsh01 -k
-> Ausgabe:
[BREMEN\schlegels@client01 ~]$ smbclient //client01/testsh01 -k
Domain=[HAMBURG] OS=[Unix] Server=[Samba 3.5.8]
smb: \>


Soooo.... Das wars auch schon. Wenn alles soweit geklappt hat, dann seid ihr im Besitz einen kerberisierten Samba- und SSH-Diensts welcher oben drein am Microsoft Active Directory angebunden ist. Somit wird die komplette System- und Samba-Authentifizerung mit Hilfe des ADS vorgenommen.

Sollten Fragen / Schwierigkeiten / Probleme bei der Konfiguration auftreten oder allgemein Kritik bestehen, dann bitte einfach eine Nachricht an mich schicken oder
einen Kommentar hinterlassen! ;-)

Schoene Grueße aus CuBa!
~Steven

Keine Kommentare:

Kommentar veröffentlichen