Installation de Samba avec authentification LDAP sous Linux Debian Lenny
Par Rémi TAUPIN le mercredi 11 mars 2009, - Lien permanent
L'article suivant explique
pas à pas l'installation d'un serveur Samba avec authentification LDAP sous
Linux Debian Lenny. C'est l'évolution de l'article "Installation de Samba avec authentification LDAP sous Linux
Debian Etch".
Nous allons commencer par installer et configurer openldap qui fournira le système de base pour l'authentification des utilisateurs. Ensuite, on configurera le système pour qu'il s'appuie intégralement sur Openldap, et on installera Samba pour pouvoir partager des fichiers. Il y aura un disque réseau par utilisateur, et un disque partagé entre tous les utilisateurs.
J'ai choisi d'intégrer l'installation et le paramétrage d'Openldap dans cette procédure au lieu de faire un chapitre à part, car l'utilisation des smbldap tools présentée plus loin permet en une seule commande de créer un utilisateur système + samba + ldap . Samba, LDAP et la gestion des utilisateurs système sont donc intimement liés.
Installation de linux debian 5 (Lenny)
Ici, on part du principe que Linux Debian Lenny est déjà installé. Néanmois, on commence par reconfigurer debconf pour que le niveau des questions qu'il pose à l'installation des paquets soit positionné sur Intermédiaire.
Configuration de Debconf
monserveur:~# dpkg-reconfigure debconf
Répondre aux questions suivants :
Interface à utiliser : Dialogue
Ignorer les questions de priorité inférieurs à : Intermédiaire
Installation de openldap
Installation des paquets
monserveur:~# aptitude install slapd ldap-utils ldapvi
Répondre aux questions suivantes :
Faut il omettre la configuration d'OpenLDAP ?
Non
Nom de domaine : antiseches.net
Nom de votre organisation : antiseches.net
Mot de passe administrateur : ********
Faut-il autoriser le protocole LDAPv2 : Non
Note importante: le mot de passe entré ici correspond à l'utilisateur cn=admin,dc=antiseches,dc=net. Cet utilisateur est différent du superutilisateur qui sera déclaré dans le fichier de configuration /etc/ldap/slapd.conf. Cependant pour éviter les confusions, on veillera à prendre toujours le même mot de passe.
Configuration de base du serveur LDAP
On génère le mot de passe crypté pour le compte d’administration de slapd (celui de /etc/ldap/slapd.conf). La sortie sera à coller dans le fichier de configuration :
monserveur:~# slappasswd
New password: ********
Re-enter new password: ********
{SSHA}Y4m58WY9h057RZ2UbcAbW1wsT0C84jG4
Note : le mot de passe à générer doit être le même que celui qui a été rentré précédement.
Maintenenant, il faut éditer le fichier de configuration /etc/ldap/slapd.conf et vérifier ou corriger les lignes suivantes :
Paramètres de domaine (le mot de passe rootpw est celui de la commande slappasswd)
suffix "dc=antiseches,dc=net"
rootdn "cn=admin,dc=antiseches,dc=net"
rootpw {SSHA}Y4m58WY9h057RZ2UbcAbW1wsT0C84jG4
Backend de base de données
moduleload back_hdb
backend hdb
database hdb
Restrictions d'accés à certains attributs
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=antiseches,dc=net" write
by anonymous auth
by self write
by * none
#
access to dn.base="" by * read
#
access to *
by dn="cn=admin,dc=antiseches,dc=net" write
by * read
Optionnel : pour que le serveur slapd démarre en ne prenant en compte que
TCP/IP v4, on rajoute la ligne suivante dans le fichier /etc/default/slapd
SLAPD_OPTIONS="-4"
Note annuaire est maintenant installé. Pour l'instant il est vide et ne sert pas à grand chose. On peut néanmoins vérifier qu'il fonctionne en se connectant avec un client LDAP comme LDAP Browser/Editor. C'est un client LDAP développé en Java par Jarek Gawor qui fonctionne trés bien sur plateformes Windows, MacOSX et Linux. On peut également utiliser ldapvi que l'on a installé plus haut et qui est une interface à la mode "vi" pour lire et éditer le contenu de la base LDAP.
Installation de Samba
L'une des utilisation d'un home serveur doit être de pouvoir partager des fichiers ou de sauvegarder des données sur un disque réseau. Pour ce faire, nous allons installer Samba, puis nous créerons des zones de stockages privées et publiques.
Modification du schéma LDAP
Nous allons installer Samba de telle sorte que l'authentification des ressources s'appuie sur l'annuaire LDAP précédement installé. On va donc commencer par modifier le schéma LDAP pour qu'il intègre Samba. Pour ce faire, on utilise l'exemple fournit avec la documentation Samba. On l'installe sur notre système puis on l'intégre au système :
monserveur:~# aptitude install samba-docmonserveur:~# gunzip -c /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
On édite ensuite le fichier de configuration /etc/ldap/slapd.conf pour qu'il prenne en charge ce nouveau schéma :
monserveur:~# vi /etc/ldap/slapd.conf
On rajoute la ligne qui contient samba.schema à la fin de la série des "include" :# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
C'est fait. Pour terminer, on redémarre le service LDAP :
monserveur:~# /etc/init.d/slapd restart
Installation des paquets samba
monserveur:~# aptitude install samba smbclient smbfs smbldap-tools
Répondre aux questions suivantes :
Nom du domaine ou groupe de travail :
ANTISECHES
Voulez vous chiffrer les mots de passe : Oui
Modifier smb.conf pour utiliser les paramètres WINS fournis par DHCP :
Non
Comment voulez-vous lancer Samba : Démon
Faut-il créer une base de données /var/lib/samba/passdb.tdb :
Non (voir note ci dessous)
Note : si on répond Oui à la dernière question, le programme d'installation de Samba va importer tous les comptes locaux déjà présent dans /etc/passwd. Ca inclut les comptes comme root, daemon, nobody, www-data, game, etc. Sur un serveur fraichement installé, il vaut mieux répondre Non. On pourra les rajouter à la main plus tard en cas de besoin.
Une fois l'installation terminée, on arrête samba car on n'a pas terminé la configuration.
monserveur:~# /etc/init.d/samba stop
Configuration de Samba
Il faut maintenant configurer Samba pour qu'il intègre LDAP et les outils SMBLDAP que l'on installera dans la foulée. Un fichier de configuration /etc/samba/smb.conf est déjà présent, mais il n'est pas trés lisible car il contient beaucoup de zones de commentaire.Un fichier de départ lisible, c'est à dire débarassé de tous ses commentaires peut être obtenu de la façon suivante :
monserveur:~# cp
/etc/samba/smb.conf /etc/samba/smb.conf.master
monserveur:~# testparm -s
/etc/samba/smb.conf.master > /etc/samba/smb.conf
Maintenant qu'il est créé, on le modifie pour qu'il ressemble à ceci :
monserveur:~# vi /etc/samba/smb.conf
[global
workgroup = ANTISECHES
server string = Server de fichiers
netbios name = monserveur
domain master = yes
local master = yes
domain logons = yes
# On met security = user pour un controleur de domaine
# domain pour un serveur membre
# share pour un serveur stand alone
security = user
os level = 40
ldap passwd sync = yes
passdb backend = ldapsam:ldap://127.0.0.1/
ldap admin dn = cn=admin,dc=antiseches,dc=net
ldap suffix = dc=antiseches,dc=net
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Machines
add user script = /usr/sbin/smbldap-useradd -m "%u"
ldap delete dn = yes
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
#delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
logon path = \\%L\profiles\%U
logon drive = P:
logon home = \\%L\%U
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
case sensitive = No
default case = lower
preserve case = yes
short preserve case = Yes
#character set = iso8859-1
#domain admin group = @admin
dns proxy = No
wins support = Yes
hosts allow = 192.168.129. 127.
winbind use default domain = Yes
nt acl support = Yes
msdfs root = Yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
# autre possibilité : "veto files = "
#
# Reglage de l'encodage des caracteres :
unix charset = iso-8859-15
display charset = iso-8859-15
dos charset = 850
#
[netlogon]
path = /home/samba/netlogon
writable = No
browseable = No
write list = Administrateur
#
[profiles]
path = /home/samba/profiles
browseable = No
writeable = Yes
profile acls = yes
create mask = 0700
directory mask = 0700
#
[homes]
comment = Repertoire Personnel
browseable = No
writeable = Yes
#
[partage]
comment = Repertoire commun
browseable = Yes
writeable = Yes
public = No
path = /home/partage
#
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
browseable = No
#
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
Il faut ensuite créer les répertoires nécessaires à la bonne exécution de samba et leur donner les droits nécesaires :
monserveur:~# mkdir
/home/samba/netlogon
monserveur:~# mkdir
/home/samba/profiles && chmod -R 777 /home/samba/profiles
monserveur:~# mkdir
/home/partage
Les répertoires utilisateurs seront créés en même temps que la créations des comptes.
Samba doit connaître le mot de passe administrateur du serveur slapd pour l’administration LDAP. Ca lui donnera l'autorisation de créer, supprimer, modifier des entrées pour les comptes utilisateurs, groupes et machines. La commande suivante permet de le faire:
monserveur:~# smbpasswd
-w 'mot_de_passe'
Setting stored password for
"cn=admin,dc=antiseches,dc=net" in secrets.tdb
Le fichier secrets.tdb se trouve dans le répertoire /var/lib/samba.
Configuration de smbldap-toolsCes outils sont des scripts perl qui permettront de créer les utilisateurs POSIX, Samba et LDAP de manière automatisée.
La configuration des outils smbldap se fait par l'intermédiaire des 2 fichiers de configurations : smbldap.conf et smbldap_bind.conf qui se trouvent dans /etc/smbldap-tools :
Les outils smbldap vont utiliser le fichier /etc/smbldap-tools/smbldap_bind.conf pour s’authentifier auprès du serveur LDAP.
monserveur:~# vi /etc/smbldap-tools/smbldap_bind.conf
masterDN="cn=admin,dc=antiseches,dc=net"
masterPw="mot_de_passe"
slaveDN="cn=admin,dc=antiseches,dc=net"
slavePw="mot_de_passe"
Note : dans ce fichier, le mot de passe apparait en clair, il faut donc restreindre son droit d'utilisation :
monserveur:~# chmod 600 /etc/smbldap-tools/smbldap_bind.conf
Il faut maintenant déterminer le SID du domaine et le renseigner dans le fichier /etc/smblsap/smbldap.conf
monserveur:~# net getlocalsidSID for domain monserveur is: S-1-5-21-906464913-1234567890-391352000
Il faut également éditer le fichier /etc/smbldap-tools/smbldap.conf pour qu’il corresponde à notre configuration :
monserveur:~# vi /etc/smbldap-tools/smbldap.conf
SID="S-1-5-21-906464913-1234567890-391352000"
masterLDAP="127.0.0.1"
masterPort="389"
slaveLDAP="127.0.0.1"
slavePort="389"
ldapTLS="0"
verify="require"
suffix="dc=antiseches,dc=net"
usersdn="ou=Users,${suffix}"
computersdn="ou=Machines,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
# La ligne ci-dessous est commentee pour eviter une erreur lors de
# l'execution de la commande smbldap-populate.
# sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
scope="sub"
hash_encrypt="SSHA"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
#Nom d'affichage - utiliser smbldap-useradd -c
userGecos="User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
#Les mots de passe expirent dans 10ans
defaultMaxPasswordAge="3650"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
# mk_ntpasswd="/usr/local/sbin/mkntpwd"
Création de l'arbre LDAP
Il est maintenant temps de créer l'arbre LDAP de base pour Samba. On va le faire en utilisant le script smbldap-populate :
monserveur:~# smbldap-populate
Populating LDAP directory for domain ANTISECHES
(S-1-5-21-906464913-1234567890-391352000)
(using builtin directory structure)
entry dc=antiseches,dc=net already
exist.
adding new entry:
ou=Users,dc=antiseches,dc=net
adding new entry:
ou=Groups,dc=antiseches,dc=net
adding new entry:
ou=Computers,dc=antiseches,dc=net
adding new entry:
ou=Idmap,dc=antiseches,dc=net
adding new entry:
uid=root,ou=Users,dc=antiseches,dc=net
adding new entry:
uid=nobody,ou=Users,dc=antiseches,dc=net
adding new entry: cn=Domain
Admins,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Domain
Users,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Domain
Guests,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Domain
Computers,ou=Groups,dc=antiseches,dc=net
adding new entry:
cn=Administrators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Account
Operators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Print
Operators,ou=Groups,dc=antiseches,dc=net
adding new entry: cn=Backup
Operators,ou=Groups,dc=antiseches,dc=net
adding new entry:
cn=Replicators,ou=Groups,dc=antiseches,dc=net
entry sambaDomainName=ANTISECHES,dc=antiseches,dc=net
already exist. Updating it...
Please provide a password for the domain
root:
Changing UNIX and samba passwords for
root
New password: ********
Retype new password: ********
Notes :
- Le mot de passe à entrer est toujours le même
- Par défaut, l'administrateur du domaine ne sera pas Administrateur comme sous Windows, mais root. Si on veut que l'administrateur soit Administrateur, il faut lancer la commande avec le paramètre
-a :
monserveur:~# smbldap-populate -a Administrateur
L'arbre du serveur LDAP est maintenant créé. Pour le visualiser, on peut utiliser une interface graphique en java : LDAP Browser/Editor. On peut également utiliser la commande slapcat ou ldapvi.
Gestion des utilisateurs
Création d'un utilisateur
Maintenant que la base est installée, on peut commencer à créer des utilisateurs avec les scripts smbldap-tools.
Pour créer un utilisateur :
monserveur:~# smbldap-useradd -a -c "Remi TAUPIN" -m -P rtaupin
Changing UNIX and samba passwords for
rtaupin
New password: ********
Retype new password: ********
-a : D ésigne l'utilisateur Windows
-c : Le champ Gecos de l'utilisateur (un
commentaire qui est souvent le nom de l'utilisateur)
-m : Crée le répertoire de base de l'utilisateur
et copie le contenu de /etc/skel/
-P : Demande la mot de passe qui sera attribué à
l'utilisateur en appelant smbldap-passwd
On vérifie avec LDAP Browser que le compte soit bien créé dans l'OU Users, puis on vérifie également que le répertoire de base de l'utilsateur soit bien créé :
monserveur:~# ls -al
/home
drwx------ 2 rtaupin Domain Users 4096 2007-04-18 07:13 rtaupin
On vérifie maintenant que le compte Samba existe :
monserveur:~# smbldap-usershow rtaupin
dn: uid=rtaupin,ou=Users,dc=antiseches,dc=net
objectClass:
top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
cn: rtaupin
sn: rtaupin
givenName: rtaupin
uid: rtaupin
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/rtaupin
loginShell: /bin/bash
gecos: Remi TAUPIN
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: Remi TAUPIN
sambaSID: S-1-5-21-906464913-1234567890-391352000-3000
sambaPrimaryGroupSID: S-1-5-21-906464913-1234567890-391352000-513
sambaLMPassword: 54B53DA495E9EBAAECD3B435B51404EE
sambaAcctFlags: [U]
sambaNTPassword: BFAD8787F5AB64B735528C20A64EFA94
sambaPwdLastSet: 1194016271
sambaPwdMustChange: 1509376271
userPassword: {SSHA}airX8WBHwDUGBLxbpboOFA0X+mYueUEz
Si on utilise la commande pdbedit pour lister les comptes présents, il est possible que la sortie présente un message d'erreur au niveau du Primary Group SID :
monserveur:~# pdbedit -vL
Unix username: rtaupin
NT username:
rtaupin
Account Flags:
[U ]
User
SID:
S-1-5-21-906464913-1234567890-391352000-3000
--- >>> pdb_get_group_sid: Failed to
find Unix account for rtaupin
--- >>> Primary Group SID: (NULL
SID)
Home Directory: \\monserveur\rtaupin
HomeDir Drive: H:
Logon Script: logon.bat
Profile Path:
\\monserveur\profiles\rtaupin
Domain:
ANTISECHES
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: mar, 19 jan
2038 04:14:07 CET
Kickoff time: mar, 19 jan 2038
04:14:07 CET
Password last set: mer, 18 avr 2007 07:11:01 CEST
Password can change: 0
Password must change: sam, 02 jun 2007 07:11:01 CEST
Last bad password : 0
Bad password count : 0
Logon hours :
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Cette erreur sera corrigée plus tard quand on aura installé et configuré la librairie libnss-ldap
Par contre, si on regarde dans le fichier /etc/passwd, on s'apercoit que l'utilisateur que l'on vient de créer n'y est pas. C'est LDAP qui gére les utilisateurs.
A ce stade, bien que le compte Unix soit créé on ne peut pas l'utiliser car le système ne le reconnait pas encore. Un su - rtaupin donnerait le message d'erreur suivant :
monserveur:~# su -
rtaupin
identifiant inconnu : rtaupin
De même, une tentative de connexion à un répertoire partagé sur le serveur samba se solderai par un echec.
Supprimer d'un utilisateur :
La commande pour supprimer un compte d'utilisateur est dans la même logique :
monserveur:~# smbldap-userdel –r rtaupin
L'utilisateur n'est plus dans la base LDAP, et son répertoire de base a disparu.
Configuration de linux pour une authentification par LDAP
Nous allons configurer linux pour que les utilisateurs puissent s'authentifier grâce à l'annuaire LDAP. La première étape va être d'installer et de configurer une librairie qui permet d'utiliser l'annuaire (libnss-ldap), puis une deuxième librairie qui permettra à pam.d de s'appuyer sur LDAP (pam_ldap) pour l'authentification.
Installation des librairies libnss-ldap et libpam-ldap
monserveur:~# aptitude install libnss-ldap libpam-ldap nscd
Répondre aux questions posées par les programmes d'installation :
Configuration de libnss-ldap :
URI du serveur ldap : ldap://127.0.0.1
Nom distinctif (DN) de la base de recherche :
dc=antiseches,dc=net
Version de LDAP à utiliser : 3
La base LDAP demande-t-elle une identification :
non
Privilèges LDAP spécifiques pour le superutilisateur
: oui
Rendre le fichier de configuration lisible et modifiable
uniquement par son propriètaire : oui
Compte LDAP pour le superutilisateur (« root »)
: cn=admin,dc=antiseches,dc=net
Mot de passe du compte du superutilisateur LDAP :
********
Configuration de libpam-ldap :
Le superutilisateur local doit-il être un
administrateur de la base LDAP ? Oui
Faut-il créer une base de données locale pour l'administrateur :
oui
La base LDAP demande-t-elle une identification :
non
Compte LDAP pour le superutilisateur (« root »)
: cn=admin,dc=antiseches,dc=net
Mot de passe du compte du superutilisateur LDAP :
********
Méthode de chiffrement pour les changements de mots de
passe : chiffré
Maintenant que l'installation est faite, il faut vérifier le contenu des fichiers de configuration.
Vérifier le contenu du fichier de configuration /etc/libnss-ldap.conf pour être certain qu'il ressemble à çà :
# Emplacement du serveur
# host 127.0.0.1
uri ldap://127.0.0.1/
port 389
#
# Racine de l'annuaire
base dc=antiseches,dc=net
#
# Version du protocole a utiliser
ldap_version 3
#
# Superutilisateur. Note : le mot de passe se trouve en clair
# dans le fichier /etc/libnss-ldap.secret
rootbinddn cn=admin,dc=antiseches,dc=net
#
# Peut eviter un bloquage au boot si le serveur LDAP est down et qu'un process
le sollicite
bind_policy soft
#
# Portee de la recherche par defaut
# scope sub
#
# Emplacement des comptes
# nss_base_passwd dc=antiseches,dc=net?sub
# nss_base_group ou=groups,dc=antiseches,dc=net?one
Vérifier le contenu du fichier de configuration /etc/pam_ldap.conf pour vérifier qu'il ressemble à ceci :
# Emplacement du serveur
# host 127.0.0.1
uri ldap://127.0.0.1/
port 389
#
# Racine de l'annuaire
base dc=antiseches,dc=net
#
# Version du protocole a utiliser
ldap_version 3
#
# Superutilisateur. Note : le mot de passe se trouve en clair
# dans le fichier /etc/pam_ldap.secret
rootbinddn cn=admin,dc=antiseches,dc=net
#
pam_password crypt
#
# Portee de la recherche par defaut
# scope sub
#
# Emplacement des comptes
# nss_base_passwd dc=antiseches,dc=net?sub
# nss_base_group ou=groups,dc=antiseches,dc=net?one
Pour plus de sécurité, les fichiers /etc/libnss-ldap.* et /etc/pam_ldap.* doivent être en chmod 600 :
monserveur:~# chmod 600
/etc/libnss-ldap.*
monserveur:~# ls -al
/etc/libnss-ldap.*
-rw------- 1 root root 468 2007-04-11 13:16
/etc/libnss-ldap.conf
-rw------- 1 root root 7 2007-04-11 12:55 /etc/libnss-ldap.secret
monserveur:~# chmod 600
/etc/pam_ldap.*
monserveur:~# ls -al
/etc/pam_ldap.*
-rw------- 1 root root 468 2007-04-11 13:16
/etc/pam_ldap.conf
-rw------- 1 root root 7 2007-04-11 12:55 /etc/pam_ldap.secret
Maintenant que les librairies sont configurées, on doit activer la recherche LDAP en modifiant le fichier de configuration /etc/nsswitch.conf pour que les lignes passwd, group et shadow ressemblent à ceci :
passwd: compat ldap
group: compat ldap
shadow: compat ldap
Il faut aussi modifier 4 fichiers présents dans /etc/pam.d pour leur ajouter la prise en charge du module pam_ldap.so au début des lignes :
Dans le fichier /etc/pam.d/common-account, modifier les lignes suivantes :
account sufficient pam_ldap.so
account required pam_unix.so try_first_pass
Dans le fichier /etc/pam.d/common-auth, modifier les lignes suivantes :
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
Dans le fichier /etc/pam.d/common-password, modifier les lignes suivantes :
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass
Dans le fichier /etc/pam.d/common-session, ajouter la ligne suivante :
session required pam_unix.so
session optional pam_ldap.so
Notes :
- la directive use_first_pass du fichier
/etc/pam.d/common-auth permet au système de
demande le mot de passe une seule fois.
- la directive use_authok du fichier /etc/pam.d/common-password est identique à use_first_pass mais pour passwd.
Les explications détaillées de ces paramètes sont dans man pam_ldap
Enfin, il suffit de rajouter les lignes suivantes dans chaques fichiers qui se trouvent dans /etc/pam.d pour que les serveurs correspondants (ssh, ftpd, etc) utilisent l'authentification LDAP :
@include common-account
@include common-session
@include common-password
@include common-auth
On redémarre le serveur :
monserveur:~# reboot
Nous avons maintenant la situation suivante :- le compte POSIX rtaupin et le groupe
Users sont créés dans les bases LDAP et Samba par la commande
smbldap-useradd
- l'utilisateur rtaupin n'est pas listé dans les
fichiers /etc/passwd et /etc/shadow
- le groupe Users n'apparait pas dans le fichier
/etc/groups
De plus, il est interessant de noter que si on retape la commande pdbedit -vL, le système ne renvoie plus de messages d'erreur au sujet du GID des utilisateurs :
monserveur:~# pdbedit -vL
.....
Unix username: rtaupin
NT username: rtaupin
Account Flags: [U ]
User SID: S-1-5-21-1015146449-1234567890-1166735929-3000
Primary Group SID: S-1-5-21-1015146449-1234567890-1166735929-513
Full Name: Remi TAUPIN
Home Directory: \\monserveur\rtaupin
HomeDir Drive: P:
Logon Script:
Profile Path: \\monserveur\profiles\rtaupin
Domain: ANTISECHES
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: mar, 19 jan 2038 04:14:07 CET
Kickoff time: mar, 19 jan 2038 04:14:07 CET
Password last set: ven, 02 nov 2007 16:11:11 CET
Password can change: 0
Password must change: lun, 30 oct 2017 16:11:11 CET
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Tests de connexion au serveur
Avant toutes choses, on redémarre le serveur pour être certain que tous les services soient bien démarrés et à jour.
monserveur:~# reboot
Ouverture d'une session en local
Il est maintenant possible de se connecter sur le serveur en utilisant le compte rtaupin :
monserveur login : rtaupin
Password : ********
rtaupin@monserveur:~$
Si on voit apparaitre I have no name! à la place du nom de l'utilisateur, c'est que le paquets nscd n'a pas été installé comme ca aurait dû être le cas lorsqu'on a installé la librairie libnss-pam. La commande aptitude install nscd et un reboot devrait résoudre le problème.
A propos de root
Comme les utilisateurs sont gérés par LDAP, leurs mots de passe sont stockés dans sa base. Par contre, root possède 2 mots de passe :
- le mot de passe stocké dans la base LDAP
- le mot de passe local stocké dans /etc/passwd et/ou /etc/shadow
Si root veut se connecter sur le serveur, il peut donc utiliser l'un ou l'autre des mots de passe, ce qui est pratique pour accéder au système si le serveur LDAP ne répond plus.
Voici la sortie du journal de log /var/log/auth.log dans les 2 cas de figure :
Si on saisie le mot de passe local de /etc/passwd
monserveur login : root
Password : ********
root@monserveur:~$
Sortie de /var/log/auth.log :
monserveur login[2375]: pam_ldap: error trying to bind as
user "uid=root,ou=Users,dc=antiseches,dc=net" (Invalid credentials)
monserveur login[2375]: (pam_unix) session opened for user root by
(uid=0)
monserveur login[2383]: ROOT LOGIN on 'tty1'
Si on saisie le mot de passe LDAP
monserveur login : root
Password : ********
root@monserveur:~$
Sortie de /var/log/auth.log :
monserveur login[2396]: (pam_unix) session opened for user
root by (uid=0)
monserveur login[2406]: ROOT LOGIN on 'tty1'
Le système commence par tester le mot de passe de la base LDAP, et s'il est faux il essaye celui de la base locale. C'est pour cette raison que dans le premier cas, on voit apparaitre Invalid credentials dans le journal de log /var/log/auth.log.
Remarques et résolution de problèmes
Gestion des utilisateurs et mots de passe
Si on veut gérer les comptes en mode texte, il faudra bien veiller à utiliser les commandes smbldap-xxxxx à la place des commandes classiques useradd, passwd, userdel, smbpasswd et autres. En effet ce sont elles qui vont permettre une parfaite synchronisation entre les comptes et mots de passe POSIX, Samba et LDAP. Si on utilise les commandes classiques, on risque d'avoir un message d'erreur ou de changer les parametres POSIX mais pas Samba ou LDAP, ou inversement.
Problèmes rencontrés au cours de l'installation
I have no name!
Ce message apparait quand le système n'arrive pas à trouver le nom de l'utilsateur qui se connecte en ligne de commande. Pour le résoudre, il faut installer le paquet nscd :
monserveur login : rtaupin
Password : ********
I have no name!@monserveur:~$
monserveur:~# sudo aptitude install
nscd
monserveur:~# reboot
monserveur login : rtaupin
Password : ********
rtaupin@monserveur:~$
Erreur pdbedit -vL
Cette erreur arrive quand on tape la commande pdbedit pour voir la liste des utilisateurs et que libnss-ldap n'est pas encore installé.
monserveur:~# pdbedit
-vL
...
db-getgroup_sid : Failed...
Elle se corrige toute seule aprés l'installation de la librairie libnss-ldap.
Erreur nss_ldap dans les logs
monserveur:~# cat /var/log/auth.log
monserveur slapd[1973]: nss_ldap: could not connect to any
LDAP server as cn=admin,dc=antiseches,dc=net - Can't contact LDAP server
monserveur slapd[1973]: nss_ldap: failed to bind to LDAP server
ldap://127.0.0.1/: Can't contact LDAP server
monserveur slapd[1973]: nss_ldap: could not search LDAP server - Server is
unavailable
Ces messages d'erreurs s'inscrivent au démarrage dans /var/log/auth.log. Il semble que durant la phase de boot, un processus essaie d'accéder au serveur LDAP avant que celui-ci ne soit lancé. Une fois la phase de boot terminée, ce message n'apparait plus dans les logs et le système fonctionne correctement.
Erreur pam_ldap
error trying to bind as user...
Le mot de passe rootdn inscrit dans un des fichiers de configuration (pam_ldap.secret, etc.) n'est pas bon. Il faut soit le corriger, soit configurer le système pour une interrogation de l'annuaire LDAP en mode anonyme.
Problème de création de profile
Quand l'utilisateur ouvre une session sur sa machine Windows pour se connecter au domaine Samba, la session s'ouvre mais le message suivant apparait :
Windows ne peut pas trouver le profil local et tente de vous connecter avec un profil temporaire. Les modifications effectuées à ce profil seront perdues lorsque vous vous déconnecterez.
Cause probable : le répertoire /home/samba/profiles n'est pas correct. Soit il n'a pas la même orthographe que celui défini dans smb.conf, soit il n'a pas les bons droits d'éxécution. Vérifier qu'il sont en chmod 777 pour que la machine windows puisse y écrire dedans.
Erreur d'ouverture de session
Quand l'utilisateur tente d'ouvrir un session sur le domaine depuis sa machine Windows, le message d'erreur suivant apparait :
Windows ne peut pas se connecter au domaine, car le controleur de domaine ne fonctionne pas, est indisponible, ou votre compte d'ordinateur n'a pas été trouvé...
Cause probable : mauvaise diffusion wins, et le client windows ne trouve pas le serveur sur le réseau. Ca peut arriver si le serveur est en DHCP, si le client et le serveur ne sont pas sur le même plan d'adresse IP (cas d'un VPN) ou si une autre machine a le même nom que le serveur, ce qui bien entendu ne devrait pas se produire. Pour régler ca, il faut renseigner le fichier c:\windows\system32\drivers\etc\lmhosts.sam et rajouter la ligne suivante à la fin :
192.168.129.140 monserveur #PRE #DOM:ANTISECHES
La syntaxe de cette ligne est :
adresse_ip nom_du_pdc #PRE #DOM:nom_du_domaine
Ensuite, on renomme le fichier lmhosts.sam en lmhosts et on relance le client. Ca devrait fonctionner.
Sources
La rédaction de ce tutoriel samba ldap m'a pris beaucoup de temps en recherche, notes, tests, plantages, re-tests, etc, et pour finir ca marche ! Voici une selection des sites qui m'ont beaucoup aidé :
L'admin Debian http://damstux.free.fr/
Le site de Martymac. Trés interessant également : http://contribs.martymac.com/
Un tuto Samba 2.2 / LDAP, créé pour une Debian Sarge : http://www.supinfo-projects.com/en/2003/sambaldap/0/
Un tuto Samba 3.0 / LDAP, créé pour une Debian Woody : http://cj.tronquet.free.fr/doc/samba3ldap.php
Un bon tuto sur Samba, mais sans LDAP : http://www.gcolpart.com/howto/samba.php4
Un documentation sur LDAP et son utilisation : http://www-id.imag.fr/~svarrett/download/polys/Tutorial_LDAP_HTML/node1.html
La mise en place d'un serveur d'authentification basé sur LDAP : http://julp.developpez.com/freebsd/authentification-ldap/
Une doc en anglais assez "ancienne" mais pleine de détails techniques :
http://www.unav.es/cti/ldap-smb/smb-ldap-3-howto.html
Commentaires
Wouaw, je n'avais jusque là jamais trouvé un tutoriel aussi PARFAIT !
Je me bats avec FreeNAS et OpenFiler depuis 1 semaine, impossible de les faire fonctionner correctement avec mon LDAP, et là je viens d'essayer ce tuto, en 30min j'avais un serveur samba et un serveur LDAP qui fonctionnent tout deux parfaitement bien !
Merci beaucoup Rémi !
Bonjour,
j'ai suivi vôtre tuto qui est très clair d'ailleur mais je pensse avoir fait une erreur au niveau des fichiers pam.d du coup je ne peut plus me loguer mème en root est ce qu'il y a une solution pour rectifier sa ou il faut tout réinstaller.
merci de repondre au plus vite
Bonjour,
Ca doit être effet une erreur de syntaxe dans un fichiers de pam.d (ca m'est aussi arrivé !).
Pas besoin de tout ré-installer : il suffit de booter avec un CD Live de ubuntu par exemple, puis il faut monter le disque et vérifier/éditer le fichier en question.
Bon courage !
Super tuto, qui permet d'avoir un système fonctionnelle.
Toutefois, il me semble avoir vue quelques incohérences en se qui concerne le répertoire profiles
dans la partie concernant la configuration de samba
smb.conf contient
[profiles]
path = /home/profiles
et plus loin concernant la création des répertoires
monserveur:~# mkdir /home/samba/profiles && chmod -R 777 /home/samba/profiles
de plus dans la partie
Problème de création de profile
vous parlez de /etc/home/profiles
Pour ma part j'ai changer le smb.conf en
[profiles]
path = /home/samba/profiles
et cela fonctionne
Autre petite coquille concenant l'installation de ldap
"
C'est fait. Pour terminer, on redémarre le service LDAP :
monserveur:~# vi /etc/init.d/slapd restart
"
il me semble que la vi soit de trop ...
Sinon, très bon boulot, merci encore
Bonjour,
Merci pour votre commentaire. Je viens de corriger les coquilles, merci de me les avoir signalées !
Rémi
Bonjour Remi;
merci bien pour ce tuto qui est vraiment très très satisfaisant.
je voudrait cependant savoir comment pourrait-on, au lieu de compte unix, connecter des comptes Windows au domaine antiseches.net ??
doit_on s'y prendre de la même manière dont on connecte une machine a un domaine gérer par un server windows 2003 ???
Bonjour,
Cette installation remplace un serveur Windows 2003. On peut donc utiliser le serveur comme contrôleur et y connecter des machines Windows en les joignant au domaine.
Personnellement je n'ai testé qu'avec des stations Windows XP Pro et ca fonctionne très bien.
Rémi
mais Bien sur que oui !!!!!!!!!
Bonjour Remis,
J'ai bien réussi l'installation de samba et de LDAP, l'ajout des utilisateurs et des machine se fait correctement.
Cependant au niveau de la machine Windows, lorsqu'un utilisateur se connecte j'obtiens ce message:
" Windows ne peut pas trouver le profil local et tente de vous connecter avec un profil temporaire. Les modifications effectuées à ce profil seront perdues lorsque vous vous déconnecterez..."
Pourtant j'ai bien attribuer les droits au répertoire /home/samba/Profiles.
Voici mon fichier smb.cnf:
[global]
*
*
*
name resolve order = wins host lmhosts bcast
time server = Yes
domain admin group = root
encrypt passwords = yes
passdb backend = ldapsam:ldap://127.0.0.1/
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
logon path = /usr/Profiles\%U
#logon path = \\%L\Profiles\%U
#logon path = /home/samba/Profiles\%U
logon home = \\%L\%U\.Profiles
logon drive = C:
domain logons = Yes
local master = yes
security = user
os level = 40
domain master = Yes
dns proxy = No
wins support = No
ldap passwd sync = yes
*
*
*
ldap group suffix = ou=Groups
ldap machine suffix = ou=Machines
ldap user suffix = ou=Users
ldap delete dn = Yes
winbind use default domain = Yes
case sensitive = No
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
nt acl support = Yes
msdfs root = Yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
[netlogon]
path = /home/samba/netlogon
write list = Administrateur
writable = No
browseable = No
[profiles]
path = /home/samba/Profiles/
create mask = 0700
directory mask = 0700
profile acls = Yes
browseable = No
writeable = Yes
[homes]
comment = Repertoire Personnel %U
writeable = Yes
browseable = No
[partage]
comment = Repertoire commun
browseable = Yes
writeable = Yes
public = No
path = /home/partage
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
Dites moi pleaze, ai-je manquer quelque chose ??
Windows ne peut pas trouver le profil local et tente de vous connecter avec un profil temporaire. Les modifications effectuées à ce profil seront perdues lorsque vous vous déconnecterez.
J'ai suivi ce tuto a la lettre, mais jai ce message d'erreur des que jme login sur un client XP, il reconnait bien le domaine, arrive a sy authentifier mais me sort ce message d'erreur svp ca fait des jours que je cherche la solution aidez moi !!!
C'est bizarre je ne me souviens pas avoir eu ce problème. Cependant il semblerait que ce soit un problème de droits en lecture seule sur le répertoire home le l'utilisateur. Vous avez vérifié que l'utilisateur en question puisse bien écrire dans son répertoire ?
Rémi
bjr Rémi.
J'ai en effet penser cela et j'ai attribuer a chaque utilisateur tous les droits sur son répertoire dans le /home mais le message reste cependant inchangé !?
Bonjour,
Sur ma config à la jonction d'un poste windows sur le domaine, il enregistre bien le compte machine toto$ dans ou=machines,dc=domaine,dc=fr. Cependant juste après il cherche ce compte dans ou=utilisateurs,dc=domaine,dc=fr pour permettre l'authentification.
J'ai contourné le problème en créant l'unité organisationel "machines" dans ou=utilisateurs.
et en modifiant la config smb et smbldap pour que le serveur enregistre bien les comptes machines dans ou=machines,ou=utilisateurs,dc=domaine,dc=fr.
Si tu as une idée d'où viens mon problème et comment le règler au lieu de le contourner, ou si à défaut ca peux aider quelqu'un .
ps : Merci pour ce tuto