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"
