Outils personnels

Samba avec authentification sur Active Directory : Différence entre versions

De wikiGite

Ligne 1 : Ligne 1 :
 
Tout d'abord vérifiez si les paquets suivants sont installés ou non:
 
Tout d'abord vérifiez si les paquets suivants sont installés ou non:
 
  krb5-libs krb5-workstation pam_krb5 samba-client nss
 
  krb5-libs krb5-workstation pam_krb5 samba-client nss
Ensuite il faut configurer le fichier /etc/krb5.conf comme ceci:
+
samba et samba-common (qui fournit entre autres winbind) doivent évidemment être installés !
  
 +
== Kerberos ==
 +
=== Configurer /etc/krb5.conf ===
 
  [logging]
 
  [logging]
  default = FILE:/var/log/krb5libs.log
+
default = FILE:/var/log/krb5libs.log
  kdc = FILE:/var/log/krb5kdc.log
+
kdc = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
+
admin_server = FILE:/var/log/kadmind.log
 
   
 
   
 
  [libdefaults]
 
  [libdefaults]
  default_realm = DOMAIN.COM
+
default_realm = DOMAINE_AD.COM
  dns_lookup_realm = true
+
dns_lookup_realm = false
  dns_lookup_kdc = true
+
dns_lookup_kdc = false
 +
ticket_lifetime = 24h
 +
forwardable = yes
 
   
 
   
 
  [realms]
 
  [realms]
  DOMAIN.COM = {
+
DOMAINE_AD.COM = {
  kdc = controleur.domain.com:88
+
    kdc = server.domaine_ad.com
  admin_server = controleur.domain.com:749
+
    admin_server = server.domaine_ad.com
  default_domain = domain.com
+
    default_domain = domaine_ad.com
  }
+
}
 
   
 
   
 
  [domain_realm]
 
  [domain_realm]
  .domain.com = DOMAIN.COM
+
domaine_ad.com = DOMAINE_AD.COM
  domain.com = DOMAIN.COM
+
.domaine_ad.com = DOMAINE_AD.COM
 
   
 
   
  [kdc]
+
  # Optionnel
  profile = /var/kerberos/krb5kdc/kdc.conf
+
# [appdefaults]
   
+
  # pam = {
  [appdefaults]
+
#    debug = false
  pam = {
+
#    ticket_lifetime = 36000
     debug = false
+
#    renew_lifetime = 36000
     ticket_lifetime = 36000
+
#    forwardable = true
     renew_lifetime = 36000
+
#    krb4_convert = false
     forwardable = true
+
# }
     krb4_convert = false
+
 
  }
+
=== Valider la configuration de kerberos ===
Les deux lignes suivantes:
+
kinit user_AD
 +
ou user_AD est un utilisateur existant sur Active Directory. S'il n'y a pas de message d'erreur, vérifier le ticket obtenu par
 +
klist
 +
puis le supprimer par
 +
kdestroy
 +
 
 +
== Samba ==
 +
=== Modifier /etc/samba/smb.conf ===
 +
  #GLOBAL PARAMETERS
 +
[global]
 +
    workgroup = DOMAINE_AD
 +
    '''realm = DOMAINE_AD.COM'''
 +
    '''preferred master = no'''
 +
    server string = Linux Test Machine
 +
    '''security = ADS'''
 +
    encrypt passwords = yes
 +
    log level = 3
 +
    log file = /var/log/samba/%m
 +
    max log size = 50
 +
    printcap name = cups
 +
    printing = cups
 +
    '''winbind enum users = Yes
 +
    winbind enum groups = Yes
 +
    winbind use default domain = Yes
 +
    winbind nested groups = Yes
 +
    winbind separator = +
 +
    idmap uid = 600-20000
 +
    idmap gid = 600-20000'''
 +
    ;template primary group = "Domain Users"
 +
    template shell = /bin/bash
 +
 
 +
  [partage]
 +
    comment = Home Directories
 +
     path = /home/users/%u # le répertoire partagé devra s'appeler "DOMAINE_AD+user_AD" en toutes lettres
 +
     '''valid users = @"DOMAINE_AD+groupe_AD"''' # (pour un utilisateur seul, même syntaxe sans le "@")
 +
     read only = No
 +
     browseable = No
 +
# Si on utilise "%u" dans le "path", on ne peut pas forcer l'utilisateur par "force user", seulement le groupe
 +
     force group = apache
 +
 
 +
Valider la syntaxe de smb.conf par
 +
testparm
 +
 
 +
=== Joindre la machine au domaine AD ===
 +
net ads join -U administrateur
 +
doit demander le mot de passe administrateur AD et répondre au final
 +
Joined 'SERVER_LINUX' to realm 'DOMAINE_AD'
 +
 
 +
=== Vérifier l'accès à AD ===
 +
Lister les comptes et les groupes :
 +
# wbinfo -u # (liste des utilisateurs)
 +
# wbinfo -g # (liste des groupes)
 +
 
 +
== PAM ==
 +
Modifier /etc/nsswitch.conf
 +
passwd: files '''winbind'''
 +
shadow: files '''winbind'''
 +
group: files '''winbind'''
 +
 
 +
Vérifier que les librairies suivantes existent dans /lib :
 +
libnss_winbind.so
 +
libnss_winbind.so.2 -> libnss_winbind.so
 +
libnss_wins.so
 +
libnss_wins.so.2 -> libnss_wins.so
 +
 
 +
Modifier /etc/pam.d/system-auth
 +
#%PAM-1.0
 +
# This file is auto-generated.
 +
# User changes will be destroyed the next time authconfig is run.
 +
auth required /lib/security/$ISA/pam_env.so
 +
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
 +
'''auth sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 +
auth required /lib/security/$ISA/pam_deny.so
 +
 
 +
account required /lib/security/$ISA/pam_unix.so
 +
account sufficient /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
 +
'''account sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 +
account required /lib/security/$ISA/pam_permit.so
  
  dns_lookup_realm = true
+
  password requisite /lib/security/$ISA/pam_cracklib.so retry=3 type=
  dns_lookup_kdc = true
+
  password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
   
+
  '''password sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
indiquent qu'il faut se reposer sur la résolution DNS (enregistrements SRV) pour trouver le/les serveur(s) kerberos, mais s'il devait y avoir un soucis avec la résolution, tester ces paramètres à false : dans ce cas utiliser le fichier /etc/hosts du serveur.
+
password required /lib/security/$ISA/pam_deny.so
  
Modifier la configuration samba (fichier /etc/samba/smb.conf) de la manière suivante:
+
session required /lib/security/$ISA/pam_limits.so
 +
session required /lib/security/$ISA/pam_unix.so
 +
'''session required /lib/security/$ISA/pam_winbind.so use_first_pass'''
  
- passer security à "ads" (security = ads)
+
== Relancer les services ==
- donner le domaine kerberos: realm = domain.com
+
stopper service WINBIND :
- indiquer le serveur de mot de passe: password server = controleur
+
  service winbind stop
- vérifier qu'il y a bien:
+
redemarrer service SAMBA :
    encrypt passwords = yes
+
  service smb restart
    local master = no
+
démarrer service WINBIND :
    domain master = no
+
  service winbind start
    preferred master = no
 
    dns proxy = no
 
  - renommer pour backup le fichier secrets.tdb: mv /etc/samba/secrets.tdb /etc/samba/secrets.tdb.bak
 
Relancer samba:
 
  /etc/init.d/smb restart
 
 
Maintenant il faut vérifier que le kerberos passe bien, pour se faire:
 
# klist
 
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
 
 
 
Kerberos 4 ticket cache: /tmp/tkt0
 
klist: You have no tickets cached
 
Il n'y a pas de ticket en cache, tentons d'en obtenir un:
 
# kinit utilisateur@DOMAIN.COM
 
Password for utilisateur@DOMAIN.COM:
 
# klist
 
Ticket cache: FILE:/tmp/krb5cc_0
 
Default principal: utilisateur@DOMAIN.COM
 
 
Valid starting    Expires            Service principal
 
03/17/09 16:35:43  03/18/09 02:35:45  krbtgt/DOMAIN.COM@DOMAIN.COM
 
        renew until 03/18/09 16:35:43
 
 
Kerberos 4 ticket cache: /tmp/tkt0
 
klist: You have no tickets cached
 
Nous avons bien un ticket kerberos v5 en cache. Détruisons le:
 
# kdestroy
 
  # klist
 
  
Maintenant il faut joindre la machine avec Samba au domaine:
+
== Authentification et droits ==
 +
A ce moment, on doit pouvoir se connecter (en console ou ssh) au serveur linux avec un utilisateur Active Directory. Si le système reconnait ces utilisateurs, Samba doit les reconnaitre également.
  
# kinit Administrator@DOMAIN.COM
+
== Partages ==
[...]
+
La connexion se fait avec l'utilisateur "DOMAINE_AD+user_AD", si on utilise le homedir de l'utilisateur comme partage (path = /home/%u) il faut que ce homedir s'appelle en toutes lettres "DOMAINE_AD+user_AD" (avec le "+" au milieu).
# net ads join -Uadministrator%password
 
[...]
 
# /etc/init.d/smb restart
 
  
Avec ce type de configuration il n'y a plus besoin de créer les utilisateurs avec smbpasswd, mais il faut que l'utilisateur zxiste au niveau de l'OS pour les droits du/des filesystem(s). Pour ça nous pouvons utiliser winbind. Winbind est normalement déjà installé sur les CentOS et RedHat sinon il faut installer le paquet "nss".
+
Il faut ensuite ajouter le groupe du domaine aux droits du partage, sinon Samba autorisera l'accès, mais pas le système de fichier !
  
Ajouter ceci à smb.conf:
+
Activer les acl dans /etc/fstab pour une partition ("acl" dans les options), puis :
  idmap uid = 15000-20000
+
  # setfacl -m g:"DOMAINE_AD+groupe_AD":rwx /home/share
idmap gid = 15000-20000
 
 
winbind enum users = yes
 
winbind enum groups = yes
 
template shell = /bin/bash
 
winbind use default domain = Yes
 
  
Vérifier le fichier /etc/nsswitch.conf et éventuellement modifier les lignes suivantes:
 
passwd:    db files winbind
 
shadow:    db files
 
group:      db files winbind
 
hosts:      files dns winbind
 
  
Relancer le démon winbind: /etc/init.d/winbind start
+
'''NOTE''' - on ne peut pas mettre "force user = apache" quand on utilise "%u" dans le path, car il remplace tout de suite le nom de l'utilisateur par "apache" et cherche une chemin finissant par "/apache" dans ce cas
  
Il n'y a plus qu'à tester !
+
    - par contre on peut mettre force group = apache pour forcer les fichiers à se créer avec le groupe "apache"

Version du 14 janvier 2011 à 16:08

Tout d'abord vérifiez si les paquets suivants sont installés ou non:

krb5-libs krb5-workstation pam_krb5 samba-client nss

samba et samba-common (qui fournit entre autres winbind) doivent évidemment être installés !

Kerberos

Configurer /etc/krb5.conf

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMAINE_AD.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes

[realms]
DOMAINE_AD.COM = {
   kdc = server.domaine_ad.com
   admin_server = server.domaine_ad.com
   default_domain = domaine_ad.com
}

[domain_realm]
domaine_ad.com = DOMAINE_AD.COM
.domaine_ad.com = DOMAINE_AD.COM

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

Valider la configuration de kerberos

kinit user_AD

ou user_AD est un utilisateur existant sur Active Directory. S'il n'y a pas de message d'erreur, vérifier le ticket obtenu par

klist

puis le supprimer par

kdestroy

Samba

Modifier /etc/samba/smb.conf

#GLOBAL PARAMETERS
[global]
   workgroup = DOMAINE_AD
   realm = DOMAINE_AD.COM
   preferred master = no
   server string = Linux Test Machine
   security = ADS
   encrypt passwords = yes
   log level = 3
   log file = /var/log/samba/%m
   max log size = 50
   printcap name = cups
   printing = cups
   winbind enum users = Yes
   winbind enum groups = Yes
   winbind use default domain = Yes
   winbind nested groups = Yes
   winbind separator = +
   idmap uid = 600-20000
   idmap gid = 600-20000
   ;template primary group = "Domain Users"
   template shell = /bin/bash
[partage]
   comment = Home Directories
   path = /home/users/%u # le répertoire partagé devra s'appeler "DOMAINE_AD+user_AD" en toutes lettres
   valid users = @"DOMAINE_AD+groupe_AD" # (pour un utilisateur seul, même syntaxe sans le "@")
   read only = No
   browseable = No
# Si on utilise "%u" dans le "path", on ne peut pas forcer l'utilisateur par "force user", seulement le groupe
   force group = apache

Valider la syntaxe de smb.conf par

testparm

Joindre la machine au domaine AD

net ads join -U administrateur

doit demander le mot de passe administrateur AD et répondre au final

Joined 'SERVER_LINUX' to realm 'DOMAINE_AD'

Vérifier l'accès à AD

Lister les comptes et les groupes :

# wbinfo -u # (liste des utilisateurs)
# wbinfo -g # (liste des groupes)

PAM

Modifier /etc/nsswitch.conf

passwd: files winbind
shadow: files winbind
group: files winbind

Vérifier que les librairies suivantes existent dans /lib :

libnss_winbind.so
libnss_winbind.so.2 -> libnss_winbind.so
libnss_wins.so
libnss_wins.so.2 -> libnss_wins.so

Modifier /etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
auth sufficient /lib/security/$ISA/pam_winbind.so use_first_pass
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so
account sufficient /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
account sufficient /lib/security/$ISA/pam_winbind.so use_first_pass
account required /lib/security/$ISA/pam_permit.so
password requisite /lib/security/$ISA/pam_cracklib.so retry=3 type=
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/$ISA/pam_winbind.so use_first_pass
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
session required /lib/security/$ISA/pam_winbind.so use_first_pass

Relancer les services

stopper service WINBIND :

service winbind stop

redemarrer service SAMBA :

service smb restart

démarrer service WINBIND :

service winbind start

Authentification et droits

A ce moment, on doit pouvoir se connecter (en console ou ssh) au serveur linux avec un utilisateur Active Directory. Si le système reconnait ces utilisateurs, Samba doit les reconnaitre également.

Partages

La connexion se fait avec l'utilisateur "DOMAINE_AD+user_AD", si on utilise le homedir de l'utilisateur comme partage (path = /home/%u) il faut que ce homedir s'appelle en toutes lettres "DOMAINE_AD+user_AD" (avec le "+" au milieu).

Il faut ensuite ajouter le groupe du domaine aux droits du partage, sinon Samba autorisera l'accès, mais pas le système de fichier !

Activer les acl dans /etc/fstab pour une partition ("acl" dans les options), puis :

# setfacl -m g:"DOMAINE_AD+groupe_AD":rwx /home/share


NOTE - on ne peut pas mettre "force user = apache" quand on utilise "%u" dans le path, car il remplace tout de suite le nom de l'utilisateur par "apache" et cherche une chemin finissant par "/apache" dans ce cas

    - par contre on peut mettre force group = apache pour forcer les fichiers à se créer avec le groupe "apache"