Samba avec authentification sur Active Directory : Différence entre versions
De wikiGite
(Page créée avec « Tout d'abord vérifiez si les paquets suivants sont installés ou non: krb5-libs krb5-workstation pam_krb5 samba-client nss Ensuite il faut configurer le fichier /etc/krb5.c... ») |
(→Authentification et droits) |
||
(27 révisions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | Tout d'abord | + | == 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 ! | |
+ | 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] | [logging] | ||
− | + | default = FILE:/var/log/krb5libs.log | |
− | + | kdc = FILE:/var/log/krb5kdc.log | |
− | + | admin_server = FILE:/var/log/kadmind.log | |
[libdefaults] | [libdefaults] | ||
− | + | default_realm = DOMAINE_AD.COM | |
− | + | dns_lookup_realm = false | |
− | + | dns_lookup_kdc = false | |
+ | ticket_lifetime = 24h | ||
+ | forwardable = yes | ||
[realms] | [realms] | ||
− | + | DOMAINE_AD.COM = { | |
− | + | kdc = server.domaine_ad.com | |
− | + | admin_server = server.domaine_ad.com | |
− | + | default_domain = domaine_ad.com | |
− | + | } | |
[domain_realm] | [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. | ||
− | # kinit | + | 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 !).<br/> | ||
+ | - 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
Sommaire
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"