Samba 3.6 und 4.x ADS Member Server

Aus Wiki
Wechseln zu: Navigation, Suche

Hintergrundwissen

Der Debian Server muss ein Memberserver im AD werden, er braucht ein Computerkonto im AD. Dieses legt er selbst an, es wird kein Computerkonto manuell im AD angelegt!

SAMBA ist das Linux Pendant zum Windows SMB bzw. CIFS System (Datei- und Druckerfreigabe). SAMBA wird benötigt um den Debian Server zum Memberserver werden zu lassen.

Winbind löst AD-Benutzerkonten und -Gruppen auf, kann also die zu Benutzern und Gruppen gehörenden SIDs aus dem AD ziehen und die Zuordnung der gefundenen SIDs zu Unix UIDs und GIDs in einer localen Datenbank unter /var/lib/samba/ speichern. Das ist notwendig, da Unix-Systeme mit Active-Directory-SIDs nichts anzufangen wissen, sondern nur UIDs und GIDs kennen, die für Berechtigungen für Unix-Dienste genutzt werden. Dabei ist wichtig, dass Winbind UIDs und GIDs verwendet, die bereits auf dem Unix-System vorhandene Benutzer nicht schon benutzen. Welchen Range von UIDS bzw. GIDs Winbind für das Mapping verwenden soll, definiert man über die Parameter idmap uid = 10000-20000 bzw. idmap gid = 10000-20000.

Man könnte genausogut 1000000-150000 eintragen – Hauptsache die verwendeten Werte sind außerhalb der Bereiche, die Unix-User auf dem System bereits verwenden (siehe /etc/passwd). Winbind wird über die SAMBA Konfigurationsdatei /etc/samba/smb.conf konfiguriert.

Net join ist ein Hilfsprogramm, welches Teil der SAMBA Suite ist. Es generiert ein Computerkonto im AD für den Debian Server. Dazu ist ein Domänenuser mit entsprechenden Berechtigungen notwendig (z. B. Domänenadministrator).

Nsswitch ist ein „Schalter“, mit dem man definieren kann, welche Namensdienste genutzt werden sollen.

PAM dient dazu, zu definieren, welche Authentisierungs- und Autorisierungsmechanismen Anwendungen nutzen können sollen.

NTP sorgt für eine genaue Systemzeit. Driftet die Systemzeit auf dem Windows Server und dem Debian Server auseinander, kann eine Kerberos Authentisierung nicht funktionieren, da Kerberos ein Ticketingsystem ist, das auf exakte Timestamps angewiesen ist.

Kerberos ist ein Authentisierungsprotokoll. Es ist vergleichbar mit einem „Ticketschalter“ im Kino. Man bekommt eine „Eintrittskarte“, die eine bestimmte Zeit lang gilt und für verschiedenste Dienste nutzbar ist, je nachdem, wozu man berechtigt ist. Kerberos hat den Vorteil von Single Sign-On – man muss sich nur einmal authentisieren, und hat dann automatisch Berechtigung auf alle Ressourcen zuzugreifen, die von dem Kerberos Server kontrollierbar sind (Anmeldung, Dateizugriff, Druckerzugriff, etc.).

Ab Samba 3.6

Ab Samba 3.6 verwendet man nicht mehr idmap uid oder idmap gid, sondern verwendet jetzt in der smb.conf idmap config. z.b.: Die Domäne ist IMMO, somit kann man dies so aufbauen:

    idmap config * : backend = tdb
    idmap config * : range = 31000-40000
    idmap config IMMO : backend = rid
    idmap config IMMO : range = 20000-30000
    idmap config IMMO : base_rid = 0

Bei einem ADS Schema nach rfc2307 sollte man die idmap-config ein wenig anpassen:

    idmap config * : backend = tdb
    idmap config * : range = 31000-40000
    idmap config IMMO : backend = ad
    idmap config IMMO : schema_mode = rfc2307
    idmap config IMMO : range = 20000-30000

    winbind nss info = rfc2307
    winbind trusted domains only = no
    winbind use default domain = yes #User muss kein Prefix bei der Anmeldung angeben
    winbind enum users  = yes
    winbind enum groups = yes

Voraussetzung

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 und Reverselookup)

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. Dies kann man Testen mit:

host 192.168.178.140
140.178.168.192.in-addr.arpa domain name pointer mmi6020ad1.immo.mmi-holding.com

Einrichten

Unsere bestehende Domäne (Samba4 oder Windows-Active-Directory) hat folgende vorgaben: Damit dies auf Anhieb funktioniert, sollte überprüft werden ob der Linux Server die DNS vollständig auflösen kann.

Active Directory Server (Samba 4)

  • NETBIOS Name MMI6020AD1
  • Workgroup Name ist IMMO
  • DNS Name ist mmi6020ad1.immo.mmi-holding.com
  • Kerberos Realm IMMO.MMI-HOLDING.COM
  • Domänen-Name IMMO.MMI-HOLDING.COM

Debian Linux Member Server(Storage99)

  • NETBIOS Name Storage99
  • DNS Name ist storage99.immo.mmi-holding.com

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.

Server Konfiguration

Installation benötigter Packete

aptitude install libkrb53 krb5-user samba winbind ntp libnss-winbind libpam-winbind

Dienste beenden

/etc/init.d/samba stop 
/etc/init.d/winbind stop 
/etc/init.d/ntp stop

Sicherung der 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.

tar cfz config-server.tgz /etc/samba /etc/pam.d /etc/nsswitch.conf /etc/krb5.conf /var/lib/samba

Konfiguration der Dienste

Kerberos

Hier eine ausführlichere Beschreibung von krb5.conf [1]

/etc/krb5.conf

[libdefaults]
	default_realm = IMMO.MMI-HOLDING.COM
# 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]
	IMMO.MMI-HOLDING.COM = {
		kdc = mmi6020ad1.immo.mmi-holding.com
		admin_server = mmi6020ad1.immo.mmi-holding.com
		}
[domain_realm]
	.immo.mmi-holding.com = IMMO.MMI-HOLDING.COM
[login]
krb4_convert = true
krb4_get_tickets = false

NTP (Zeitsync)

Hier tragen wir unseren AD Zeitserver ein.

/etc/ntp.conf

server 192.168.0.221

Dannach den NTP Dienst starten.

/etc/init.d/ntp start
Überprüfen von der Zeitsynchronisation
ntpq –p 
date

Winbind und Samba-conf (smb.conf)

Ausführliche Beschreibung für Winbind [2], idmap [3].

/etc/samba/smb.conf

[global]
#Arbeitsgruppen Name; in aller Regel Domänen-Name ohne Suffix
    workgroup = IMMO
#Domänen-Name
    realm = IMMO.MMI-HOLDING.COM
#NETBIOS-Name des Debian Servers; max. 15 Zeichen lang!
    netbios name = STORAGE99
#Active Directory soll die Authentisierung stellen
    security = ADS
    encrypt passwords = yes

#idmap uid = 20000-30000 #Ab Samba 3.6 nicht mehr in verwendung!
#idmap gid = 20000-30000 #Ab Samba 3.6 nicht mehr in verwendung!
    idmap config * : backend = tdb
    idmap config * : range = 31000-40000
    idmap config IMMO : backend = rid
    idmap config IMMO : range = 20000-30000
    idmap config IMMO : base_rid = 0

    winbind trusted domains only = no
#User muss kein Prefix bei der Anmeldung angeben
    winbind use default domain = yes
    winbind enum users  = yes
    winbind enum groups = yes
#15 Sekunden die Abfragen vom Auth-Server Aufbewahren
    winbind cache time = 15
#Shell die der Benutzer nach der Anmeldung bekommt
    template shell = /bin/bash
  • Bei einem rfc2307 fähigem ADS Schema kann man auch dies so verwenden.
##bei rfc2307 fähigem ADS Schema sollte man dies verwenden###
    idmap config IMMO : backend = ad
    idmap config IMMO : schema_mode = rfc2307
    idmap config IMMO : range = 20000-30000

    winbind nss info = rfc2307
    winbind trusted domains only = no
#User muss kein Prefix bei der Anmeldung angeben
    winbind use default domain = yes
    winbind enum users  = yes
    winbind enum groups = yes
#15 Sekunden die Abfragen vom Auth-Server Aufbewahren
    winbind cache time = 15
#Shell die der Benutzer nach der Anmeldung bekommt
    template shell = /bin/bash
Um ACL Support erweitern
  • ACL Support in der smb.conf hinzufügen: [4]
    vfs objects = acl_xattr
    map acl inherit = Yes
    store dos attributes = Yes

Die Platten sollten danach mit acl und attr gemounted werden:

/etc/fstab
/dev/sda3     /daten     ext4      user_xattr,acl      1 1

Die gerade erstellte smb.conf testen:

testparm

Tipp: Wenn man bei den Freigaben die Option valid users verwendet, um bestimmten Gruppen zu erlauben, auf die Freigabe zuzugreifen, sollte dies so aussehen: valid users = "@IMMO\Domain Users". Dabei sollte darauf geachtet werden, ob dies mit oder ohne Leerzeichen geschrieben wird.

Erklärung zu 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 = 20000-30000 wird definiert, dass der Bereich von UID 20000 bis 30000 nicht von der internen Benutzerverwaltung verwendet wird, also für das Mapping von Active Directory SIDs zu Linux UIDs bzw. GIDs verwendet werden soll.

NSSWITCH

Näheres zu nsswitch.conf [5].

/etc/nsswitch.conf

# /etc/nsswitch.conf
#
# 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

Näheres zu PAM [6]

Nach den Änderungen bei den PAM-Configs sollte man es mit pam-auth-update verifizieren.

/etc/pam.d/common-auth

  • Dies Oberhalb default Block eintragen.
#samba 4 AD Integration
auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure use_first_pass

# Falls dies nicht vorhanden ist
auth    requisite                       pam_deny.so

/etc/pam.d/common-account

  • Oberhalb vom default Block eintragen.
#samba 4 add
account sufficient      pam_winbind.so
account required        pam_unix.so

/etc/pam.d/common-session

#unter Additional Block
session required                        pam_unix.so
session required                        pam_mkhomedir.so umask=0022 skel=/etc/skel

/etc/pam.d/sudo

  • Falls es nicht schon vorhanden ist noch ergänzen.
Auth sufficient pam_winbind.so
Auth sufficient pam_unix.so use_first_pass
Auth required pam_deny.so

@include common-account

Server in die Domäne einbinden

  • Folgende Serverdienste stoppen
/etc/init.d/winbind stop
/etc/init.d/samba stop
  • Eventuell vorhandene Winbind cache DB löschen
rm –rf /var/lib/samba/*.tdb
  • Nach dieser kurzen überprüfung kann man den Server zur Domain hinzufügen
net ads join –U Administrator
  • Dannach die Dienste starten
/etc/init.d/winbind start
/etc/init.d/samba start

Überprüfen

  • RPC trust secret prüfen
wbinfo -t
  • AD-User Administrator über winbind auth prüfen
wbinfo -a Administrator%Passwort
  • Active Directory Benutzer anzeigen
wbinfo -u
  • Active Directory Gruppen anzeigen
wbinfo -g
  • Testen, ob man sich lokal per SSH als Administrator (oder andere AD-Benutzer) anmelden kann.
ssh Administrator@localhost
  • Server neu starten und überprüfen, ob die Dienste laufen
init 6
  • Dienste, die eventuell nicht automatisch starten, zu den Autostart-Services hinzufügen
update-rc.d samba defaults
update-rc.d ntp defaults 
update-rc.d winbind defaults

Nur eine Bestimmte AD Gruppe am System Anmelden lassen

Leider kann sich jeder, der in der AD ist, am Server lokal bzw. über SSH anmelden.

Dies kann man in der Datei /etc/security/pam_winbind.conf einstellen [7] (Funktioniert unter RHEL, DEBIAN, SUSE,...).

Als Beispiel /etc/security/pam_winbind.conf

#
# pam_winbind configuration file
#
# /etc/security/pam_winbind.conf
#

[global]

# turn on debugging
;debug = no

# turn on extended PAM state debugging
;debug_state = no

# request a cached login if possible
# (needs "winbind offline logon = yes" in smb.conf)
cached_login = yes

# authenticate using kerberos
;krb5_auth = no

# when using kerberos, request a "FILE" krb5 credential cache type
# (leave empty to just do krb5 authentication but not have a ticket
# afterwards)
;krb5_ccache_type =

# make successful authentication dependend on membership of one SID
# (can also take a name)
# require_membership_of = SID,SID,SID
require_membership_of = S-1-5-21-4255311587-2195296704-2687208041-1794

# password expiry warning period in days
;warn_pwd_expire = 14

# omit pam conversations
;silent = no

# create homedirectory on the fly
mkhomedir = yes

SID ermitteln

Mit diesem Befehl kann man auf dem Samba Server die komplette SID ermitteln.

wbinfo -n <Group or User>

Mehr Informationen mit wbinfo --help.

ADS Info

Um zu schauen auf welchen ADS Samba verbunden ist, gibt es das net ads info.

root@smb3test:/# net ads info
LDAP server: 192.168.0.221
LDAP server name: mmi6020ad1.immo.mmi-holding.com
Realm: IMMO.MMI-HOLDING.COM
Bind Path: dc=IMMO,dc=MMI-HOLDING,dc=COM
LDAP port: 389
Server time: Di, 08 Okt 2013 08:37:39 CEST
KDC server: 192.168.0.221
Server time offset: 0
root@smb3test:/#

Member Server / Client von der Domäne Abmelden

Um einen Samba Member Server von der Domäne richtig abzumelden, braucht man nur diesen Befehl eingeben.

Nach der Eingabe kann man den Server Herunterfahren oder für andere Zwecke umbauen (z.b.: Hostnamen ändern,...).

net ads leave -U Administrator

Links

  1. krb5.conf
  2. Documentation_Winbind
  3. Documentation_idmap
  4. Erstellen von Freigaben mit Windows ACLs
  5. nsswitch.conf
  6. PAM
  7. Serverfault.com_linux-active-directory-authentication-only-letting-certain-groups-login