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 | + | == 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 | + | 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+ | + | '''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 | + | stopper WINBIND : |
service winbind stop | service winbind stop | ||
− | + | redémarrer SAMBA : | |
service smb restart | service smb restart | ||
− | démarrer | + | 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", | + | 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 | + | 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''' == | |
− | ''' | + | - 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"