Outils personnels

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

De wikiGite

(Authentification et droits)
 
(25 révisions intermédiaires par un autre utilisateur non affichées)
Ligne 1 : Ligne 1 :
Tout d'abord vérifiez si les paquets suivants sont installés ou non:
+
== Pré-requis ==
 +
Tout d'abord vérifier 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
 
samba et samba-common (qui fournit entre autres winbind) doivent évidemment être installés !
 
samba et samba-common (qui fournit entre autres winbind) doivent évidemment être installés !
 +
 +
Vérifier que samba et winbind sont lancés au démarrage du serveur !
 +
 +
De plus, penser à synchroniser l'heure du contrôleur de domaine et du serveur linux avec ntp, kerberos est très sensible à ça !
  
 
== Kerberos ==
 
== Kerberos ==
Ligne 49 : Ligne 54 :
 
  #GLOBAL PARAMETERS
 
  #GLOBAL PARAMETERS
 
  [global]
 
  [global]
     workgroup = DOMAINE_AD
+
     '''workgroup = DOMAINE_AD'''
 
     '''realm = DOMAINE_AD.COM'''
 
     '''realm = DOMAINE_AD.COM'''
 
     '''preferred master = no'''
 
     '''preferred master = no'''
Ligne 60 : Ligne 65 :
 
     printcap name = cups
 
     printcap name = cups
 
     printing = cups
 
     printing = cups
     '''winbind enum users = Yes
+
     '''winbind enum users = Yes'''
     winbind enum groups = Yes
+
     '''winbind enum groups = Yes'''
     winbind use default domain = Yes
+
     '''winbind use default domain = Yes'''
     winbind nested groups = Yes
+
     '''winbind nested groups = Yes'''
     winbind separator = +
+
     '''winbind separator = +'''
     idmap uid = 600-20000
+
     '''idmap uid = 600-20000'''
     idmap gid = 600-20000'''
+
     '''idmap gid = 600-20000'''
 
     ;template primary group = "Domain Users"
 
     ;template primary group = "Domain Users"
 
     template shell = /bin/bash
 
     template shell = /bin/bash
Ligne 72 : Ligne 77 :
 
  [partage]
 
  [partage]
 
     comment = Home Directories
 
     comment = Home Directories
     path = /home/users/%u # le répertoire partagé devra s'appeler "DOMAINE_AD+user_AD" en toutes lettres
+
     path = /home/users/%u # le répertoire devra s'appeler "DOMAINE_AD+user_AD" en toutes lettres, case sensitive, et le "+" au milieu
     '''valid users = @"DOMAINE_AD+groupe_AD"''' # (pour un utilisateur seul, même syntaxe sans le "@")
+
     '''valid users = @"DOMAINE_AD+groupe1_AD" @"DOMAINE_AD+groupe2_AD"'''  
 +
# (pour un utilisateur seul, même syntaxe sans le "@") - (si plusieurs noms, séparer par un espace)
 
     read only = No
 
     read only = No
 
     browseable = No
 
     browseable = No
Ligne 112 : Ligne 118 :
 
  '''auth sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 
  '''auth sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 
  auth required /lib/security/$ISA/pam_deny.so
 
  auth required /lib/security/$ISA/pam_deny.so
 
+
 
  account required /lib/security/$ISA/pam_unix.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_succeed_if.so uid < 100 quiet
 
  '''account sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 
  '''account sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 
  account required /lib/security/$ISA/pam_permit.so
 
  account required /lib/security/$ISA/pam_permit.so
 
+
 
  password requisite /lib/security/$ISA/pam_cracklib.so retry=3 type=
 
  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_unix.so nullok use_authtok md5 shadow
 
  '''password sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 
  '''password sufficient /lib/security/$ISA/pam_winbind.so use_first_pass'''
 
  password required /lib/security/$ISA/pam_deny.so
 
  password required /lib/security/$ISA/pam_deny.so
 
+
 
  session required /lib/security/$ISA/pam_limits.so
 
  session required /lib/security/$ISA/pam_limits.so
 
  session required /lib/security/$ISA/pam_unix.so
 
  session required /lib/security/$ISA/pam_unix.so
Ligne 128 : Ligne 134 :
  
 
== Relancer les services ==
 
== Relancer les services ==
stopper service WINBIND :
+
stopper WINBIND :
 
  service winbind stop
 
  service winbind stop
redemarrer service SAMBA :
+
redémarrer SAMBA :
 
  service smb restart
 
  service smb restart
démarrer service WINBIND :
+
démarrer WINBIND :
 
  service winbind start
 
  service winbind start
  
 
== Authentification et droits ==
 
== 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.
 
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.
 +
Attention, il peut y avoir un message d'erreur si le homedir de l'utilisateur n'a pas été créé avant.
 +
 +
On peut tester le partage à partir du serveur linux, après obtention d'un ticket kerberos, par :
 +
# kinit utilisateur_AD
 +
 +
# smbclient //serveur_linux/partage -k
 +
OS=[Unix] Server=[CentOS 5.5]
 +
smb: \> put hello_world.txt
 +
putting file hello_world.txt as \hello_world.txt (0.0 kb/s) (average nan kb/s)
 +
smb: \> quit
 +
# ls -l /data/testshare/hello_world.txt
 +
-rwxr--r--  1 utilisateur_AD Util. du domaine 0 2005-07-22 13:37 /data/test/hello_world.txt
 +
Puis bien sûr faire le ménage
 +
# kdestroy
  
 
== Partages ==
 
== 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).
+
La connexion se fait avec l'utilisateur "DOMAINE_AD+user_AD" (avec le "+" au milieu, puisque c'est ce qu'on a demandé par "winbind separator = +" dans smb.conf)
 +
 
 +
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" (DOMAINE en majuscule, toujours le "+" au milieu, et le login utilisateur tel qu'il a été créé dans AD). Si on utilise un chemin statique par contre ça ne pose pas de problème, mais ça n'empêche pas de devoir modifier les acls (voir ci-dessous).
  
 
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 !
 
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 :
+
Activer les acl dans /etc/fstab pour la partition qui contiendra le partage ("acl" dans les options), puis :
 
  # setfacl -m g:"DOMAINE_AD+groupe_AD":rwx /home/share
 
  # setfacl -m g:"DOMAINE_AD+groupe_AD":rwx /home/share
  
 
+
== '''NOTES''' ==
'''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
+
- on ne peut pas mettre "force user = apache" (par exemple) quand on utilise "%u" dans le path, car Samba remplace tout de suite le nom de l'utilisateur par "apache" et cherche une chemin du type "/home/user/apache" dans ce cas (à moins que ce répertoire existe, évidemment, et qu'on veuille que tout le monde tombe dedans !).<br/>
 
+
- par contre on peut mettre force group = apache pour forcer les fichiers à se créer avec le groupe "apache"
    - par contre on peut mettre force group = apache pour forcer les fichiers à se créer avec le groupe "apache"
 

Version actuelle datée du 11 avril 2011 à 16:41

Pré-requis

Tout d'abord vérifier 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 !

Vérifier que samba et winbind sont lancés au démarrage du serveur !

De plus, penser à synchroniser l'heure du contrôleur de domaine et du serveur linux avec ntp, kerberos est très sensible à ça !

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 devra s'appeler "DOMAINE_AD+user_AD" en toutes lettres, case sensitive, et le "+" au milieu
   valid users = @"DOMAINE_AD+groupe1_AD" @"DOMAINE_AD+groupe2_AD" 
# (pour un utilisateur seul, même syntaxe sans le "@") - (si plusieurs noms, séparer par un espace)
   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 WINBIND :

service winbind stop

redémarrer SAMBA :

service smb restart

démarrer 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. Attention, il peut y avoir un message d'erreur si le homedir de l'utilisateur n'a pas été créé avant.

On peut tester le partage à partir du serveur linux, après obtention d'un ticket kerberos, par :

# kinit utilisateur_AD

# smbclient //serveur_linux/partage -k
OS=[Unix] Server=[CentOS 5.5]
smb: \> put hello_world.txt
putting file hello_world.txt as \hello_world.txt (0.0 kb/s) (average nan kb/s)
smb: \> quit
# ls -l /data/testshare/hello_world.txt
-rwxr--r--  1 utilisateur_AD Util. du domaine 0 2005-07-22 13:37 /data/test/hello_world.txt

Puis bien sûr faire le ménage

# kdestroy

Partages

La connexion se fait avec l'utilisateur "DOMAINE_AD+user_AD" (avec le "+" au milieu, puisque c'est ce qu'on a demandé par "winbind separator = +" dans smb.conf)

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" (DOMAINE en majuscule, toujours le "+" au milieu, et le login utilisateur tel qu'il a été créé dans AD). Si on utilise un chemin statique par contre ça ne pose pas de problème, mais ça n'empêche pas de devoir modifier les acls (voir ci-dessous).

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 la partition qui contiendra le partage ("acl" dans les options), puis :

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

NOTES

- on ne peut pas mettre "force user = apache" (par exemple) quand on utilise "%u" dans le path, car Samba remplace tout de suite le nom de l'utilisateur par "apache" et cherche une chemin du type "/home/user/apache" dans ce cas (à moins que ce répertoire existe, évidemment, et qu'on veuille que tout le monde tombe dedans !).
- par contre on peut mettre force group = apache pour forcer les fichiers à se créer avec le groupe "apache"