[Accueil][Documents][C.V][Musique][Liens]

Doc :: Samba 3 + LDAP sur Woody


Installation de Samba PDC et OpenLDAP

Cette documentation traite de l’installation de Samba PDC avec un backend d’authentification OpenLDAP sur un serveur Debian/Woody [testpdc], et de la migration des comptes depuis le PDC Windows NT d’origine. La distribution utilisée est la Debian Woody. Cette documentation est largement inspirée de la documentation The Linux Samba-OpenLDAP Howto, de Idealx. N'hésitez pas à me faire part de vos commentaires ou de vos questions!

Logiciels utilisés

Les logiciels suivants on été utilisés pour cette documentation:

 

Contexte

Pour cette documentation, nous partons du principe que :

Installation de base

OpenLDAP

Après avoir vérifié que openldap2 était présent dans la liste des packages de la source apt backports.org (voir www.backports.org), suivi éventuellement d’un apt-get update, on installe slapd :

testpdc:~# apt-get install slapd

Si le choix du type de base de données n’est pas proposé, il faut éditer le fichier /etc/ldap/slapd.conf et changer :

 

Samba

On vérifie également que le package samba est présent dans la liste des packages associés à la source apt de backports.org. On installe ensuite samba :

testpdc:~# apt-get install samba

On arrête ensuite immédiatement Samba (lancé automatiquement suite à son installation), pour éviter des conflits lors de l’intégration, et en particulier si le serveur [testpdc] est connecté au même réseau lors de l’installation :

testpdc:~# /etc/init.d/samba stop

smbldap-tools

smbldap-tools est un paquetage contenant des scripts développés par idealx, très utiles pour manager les utilisateurs et les groupes dans un contexte samba+ldap.

Télécharger et décompresser l’archive depuis le site http://samba.idealx.org/dist/smbldap-tools-0.8.4.tgz :

testpdc:~# wget http://samba.idealx.org/dist/smbldap-tools-0.8.4.tgz
testpdc:~# tar xzf smbldap-tools-0.8.4.tgz

Dans le répertoire ainsi créé, on trouvera le README et INSTALL à lire attentivement. La procédure d’installation pour le package 0.8.4 est :

testpdc:~# cd smbldap-tools-0.8.4
testpdc:~/smbldap-tools-0.8.4# cp smbldap-* /usr/local/sbin
testpdc:~/smbldap-tools-0.8.4# cp smbldap_tools.pm /usr/local/sbin
testpdc:~/smbldap-tools-0.8.4# mkdir /etc/smbldap-tools
testpdc:~/smbldap-tools-0.8.4# cp *.conf /etc/smbldap-tools
testpdc:~/smbldap-tools-0.8.4# chmod 644 /etc/smbldap-tools/smbldap.conf
testpdc:~/smbldap-tools-0.8.4# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

Il y a aussi dans ce répertoire un fichier nommé mkntpwd.tar.gz. Ce programme remplacera smbpasswd pour générer les passwords NT. Nous allons donc le compiler et l’installer.

A préalable, on a besoin des outils make et gcc :

testpdc:~# apt-get install make gcc

Puis on extrait les fichiers de l’archive et on compile l’exécutable:

testpdc:~# tar xzf mkntpwd.tar.gz
testpdc:~# cd mkntpwd
testpdc:~/mkntpwd# make

Ignorer un éventuel warning concernant le type de retour de main qui est différent de int. La construction entraine la création d’un binaire : mkntpwd. On copie ce dernier :

testpdc:~/mkntpwd# cp mkntpwd /usr/local/sbin

Les scripts smbldap-tools nécessitent perl, ainsi que le module Perl Net::LDAP que l’on va récupérer via CPAN :

testpdc:~# perl –MCPAN –eshell

(la configuration de perl sort du cadre de cette documentation)

cpan> install Net::LDAP
cpan> exit

On peut alors tester si les outils smbldap-tools s’exécutent sans erreur :

testpdc:~# smbldap-usershow
Usage: /usr/local/sbin/smbldap-usershow [-?] username
-? show this help message

On reviendra sur la configuration de ce package plus tard.

 

Configuration

OpenLDAP

Nous allons configurer notre serveur OpenLDAP de façon à ce qu’il se comporte comme une base de données SAM (Security Account Manager). En prenant appui sur notre contexte d’installation, nous allons donc le configurer pour :

Schema

Le serveur LDAP doit reconnaître le schéma Samba. Ce dernier est inclus dans le package samba-doc, que nous installons :

testpdc:~# apt-get install samba-doc

On copie ensuite le schéma samba avec les autres schémas LDAP :

testpdc:~# gunzip -c /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema

On modifie alors le fichier de configuration de OpenLDAP /etc/ldap/slapd.conf pour qu’il incluse ce nouveau schéma :

# 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

 

Serveur

On configure le serveur slapd afin qu’il soit un serveur maître sur le suffixe dn : dc=testing,dc=6admin,dc=net. La plupart des modifications ont été apportées lors de l’installation du package slapd, on vérifiera que le fichier /etc/ldap/slapd.conf contient, entre autres, les directives suivantes :

suffix "dc=testing,dc=6admin,dc=net"

On en profite pour spécifier quelques index qui accéléreront les recherches par la suite :

index objectClass,uidNumber,gidNumber eq
index cn,sn,uid,displayName pres,sub,eq
index memberUid,mail,givenname eq,subinitial
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq

Nous ajoutons aussi quelques ACL pour protéger les données sensibles :

access to attrs=userPassword
by self write
by anonymous auth
by * none
access to attrs=sambaLMPassword
by self write
by anonymous auth
by * none
access to attrs=sambaNTPassword
by self write
by anonymous auth
by * none
access to *
by * read

On génère un mot de passe crypté pour le compte d’administration de slapd :

testpdc:~# slappasswd
New password:
Re-enter new password:
{SSHA}Y4m58WY9h057RZ2UbcAbW1wsT0C84jG4

Copier le mot de passe ainsi généré dans le fichier slapd.conf :

rootpw {SSHA}Y4m58WY9h057RZ2UbcAbW1wsT0C84jG4

Par défaut, le serveur prend en charge les interfaces Ipv6, ce qui générera un warning dans le syslog. Pour éviter cela, il faut spécifier l’option –4 dans le fichier /etc/default/slapd :

SLAPD_OPTIONS="-4"

Client

Configurer les clients LDAP : /etc/ldap/ldap.conf

BASE dc=testing,dc=6admin,dc=net
HOST 127.0.0.1

 

Validation

Lancer le serveur (ou relancer avec restart si il était déjà lancé) :

testpdc:~# /etc/init.d/slapd start

Si aucun message d’erreur n’apparaît, le serveur doit fonctionner correctement. On vérifiera dans la liste des processus (ps ax) que le serveur apparaît bien.

On peut également vérifier qu’aucun message d’erreur n’apparaît dans le fichier syslog.

Authentification des utilisateurs sur le système Linux

Nous allons configurer le système afin qu’il utilise le serveur LDAP pour authentifier les utilisateurs. PAM (Pluggable Authentication Modules) permet un mode d'authentification modulaire facilement paramétrable. Il existe donc un module PAM pour LDAP.

Pour cela, nous avons besoin des packages pam_ldap et nss_ldap, ainsi que du package nscd pour bénéficier d’un mécanisme de cache. Nous utiliserons la version de backports.org pour libnss-ldap, ainsi que db4.1 dont libnss-ldap est dépendant (à ajouter dans /etc/apt/sources.list).

testpdc:~# apt-get install libnss-ldap libpam-ldap nscd

 

testpdc:~# /etc/init.d/nscd start

 

Modules d’authentification PAM

Pour chaque module situé dans /etc/pam.d/, nous allons modifier les entrées pour la prise en charge de l’authentification via LDAP.

Pour cela, il suffit d’ajouter une ligne pour chaque type d’authentification (auth, account, password, session) :

auth sufficient pam_ldap.so use_first_pass
account sufficient pam_ldap.so
password sufficient pam_ldap.so use_authtok
session optional pam_ldap.so

Et modifier les entrées :

auth required pam_unix.so

de la façon suivante :

auth sufficient pam_unix.so likeauth nullok

Ces lignes seront ajoutées notamment dans les fichiers /etc/pam.d/samba, /etc/pam.d/login, /etc/pam.d/su

Nous devons également modifier le fichier /etc/pam_ldap.conf afin qu’il reflète notre configuration, en particulier en ce qui concerne les lignes suivantes :

host 127.0.0.1
base dc=testing,dc=6admin,dc=net
#binddn cn=admin,dc=testing,dc=6admin,dc=net
rootbinddn cn=admin,dc=testing,dc=6admin,dc=net
pam_password crypt

 

Configuration de libnss-ldap

Le fichier de configuration est /etc/libnss-ldap.conf, et doit contenir ces paramètres :

host 127.0.0.1
base dc=testing,dc=6admin,dc=net
rootbinddn cn=admin,dc=testing,dc=6admin,dc=net
nss_base_passwd ou=Users,dc=testing,dc=6admin,dc=net?one
nss_base_shadow ou=Users,dc=testing,dc=6admin,dc=net?one
nss_base_group ou=Groups,dc=testing,dc=6admin,dc=net?one
ssl no
pam_password md5

nss-ldap et pam-ldap utilisent le fichier /etc/ldap.secret pour stocker le mot de passe à utiliser pour accéder au serveur LDAP. Il faut donc l’éditer afin qu’il contienne le mot de passe admin LDAP. Vérifier que ce fichier a bien des droits restreints (600) et qu’il appartient à root.

Configuration de nsswitch

Editer le fichier /etc/nsswitch.conf afin de configurer le service de nommage pour utiliser LDAP :

passwd: files ldap
group: files ldap
shadow: files ldap

 

Samba

Nous allons tout d’abord configurer Samba comme contrôleur du domaine de sauvegarde (BDC) TESTDOM, puis enregistrer notre nouveau BDC sur le domaine afin d’avoir accès à la liste des comptes utilisateurs, groupes et machines. Sur notre BDC Samba, la base de données SAM sera stockée sur notre serveur OpenLDAP. Ensuite, on lancera le processus appelé " vampire " qui consiste à récupérer tous les comptes depuis le PDC NT. On pourra alors basculer notre BDC en PDC et arrêter le PDC NT.

Configuration

Nous allons configurer le fichier /etc/samba/smb.conf en considérant que :

Voir le fichier smb.conf en annexe pour apporter les modifications nécessaires. Il est rappelé que pour le moment, le serveur Samba ne doit pas être démarré (ou bien démarré si il n’est pas sur le même réseau que le PDC NT). Voici en particulier quelques directives nécessaires pour la section [global] :

workgroup = TESTDOM
netbios name = testpdc
server string = Samba-LDAP PDC Server
domain master = No
local master = No
domain logons = Yes
os level = 40

#unix password sync = Yes
#passwd program = /usr/local/sbin/smbldap-passwd –u %u
#passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n"
ldap passwd sync = Yes

passdb backend = ldapsam:ldap://127.0.0.1/
ldap admin dn = cn=admin,dc=testing,dc=6admin,dc=net
ldap suffix = dc=testing,dc=6admin,dc=net
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers

add machine script = /usr/local/sbin/smbldap-useradd -w "%u"
add user script = /usr/local/sbin/smbldap-useradd -m "%u"
ldap delete dn = Yes
#delete user script = /usr/local/sbin/smbldap-userdel "%u"
add machine script = /usr/local/sbin/smbldap-useradd -w "%u"
add group script = /usr/local/sbin/smbldap-groupadd -p "%g"
#delete group script = /usr/local/sbin/smbldap-groupdel "%g"
add user to group script = /usr/local/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/local/sbin/smbldap-usermod -g "%g" "%u"

Dos charset = 850
Unix charset = ISO8859-1

En ce qui concerne la section [homes], on aura les directives suivantes :

comment = Home Directories
valid users = %U
read only = No
create mask = 0664
directory mask = 0775
browseable = No

Afin de pouvoir faire exécuter un script sur chaque machine qui se connecte au domaine avec succès, on a besoin d’une section [netlogon], qui contient notamment les directives suivantes :

[netlogon]
path = /home/samba/netlogon
browseable = no
read only = yes

Dans ce répertoire, on placera le script de démarrage (dans cet exemple, STARTUP.BAT), et on l’indiquera dans la section [global] :

logon script = STARTUP.BAT

Attention, le répertoire dans lequel le logon script sera recherché est celui indiqué dans la section [netlogon].

On crée également toutes les sections relatives aux répertoires de groupe, par exemple :

[compta]
path=/home/samba/groups/compta
public = yes
writeable = yes
read only = no
create mask = 0750
valid users = "Comptabilité"

On indique dans valid users la liste des utilisateurs et des groupes autorisés à accéder au répertoire (on pourra la mettre à jour par la suite, après la migration des comptes et des groupes).

On teste enfin si la configuration de samba ne contient pas de fautes de syntaxe :

testpdc:~# testparm

Préparation

Nous allons d’abord créer les répertoires nécessaires, selon la configuration de notre smb.conf :

testpdc:~# mkdir /home/samba
testpdc:~# mkdir /home/samba/netlogon
testpdc:~# mkdir /home/samba/groups

Entrées initiales

Samba doit connaître le mot de passe (dans l’exemple c’est motdepasseadmin, à remplacer par le vrai mot de passe admin LDAP) pour l’administration LDAP (du DN cn=admin,dc=testing,dc=6admin,dc=net). Il faut en effet que Samba ait la permission de créer, supprimer, modifier des entrées pour les comptes utilisateurs, groupes et machines.

testpdc:~# smbpasswd –w motdepassedmin

Samba va stocker ce mot de passe dans le fichier /var/lib/samba/secrets.tdb.

On a également besoin de connaître le SID du domaine et de configurer samba et smbldap-tools avec ce SID :

testpdc:~# net rpc getsid –S NT4SERVER –W TESTDOM
Storing SID S-1-5-21-3016841243-3009801693-48680558 for Domain TESTDOM in secrets.tdb

Le système enregistre le SID dans le fichier secrets.tdb afin que Samba l’utilise, et on copie ce SID (dans cet exemple, S-1-5-21-3016841243-3009801693-48680558) dans /etc/smbldap-tools/smbldap.conf afin que les outils smbldap-tools puissent également se baser sur ce SID :

SID="S-1-5-21-3016841243-3009801693-48680558"

On force également notre Samba pour que son SID soit le même :

net setlocalsid S-1-5-21-3016841243-3009801693-48680558

On en profite pour éditer le fichier /etc/smbldap-tools/smbldap.conf pour qu’il corresponde à notre configuration, en particulier pour les lignes suivantes :

slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
suffix="dc=testing,dc=6admin,dc=net"
usersdn="ou=Users,dc=testing,dc=6admin,dc=net"
computersdn="ou=Users,dc=testing,dc=6admin,dc=net"
groupsdn="ou=Groups,dc=testing,dc=6admin,dc=net"
userHomePrefix="/home"
#defaultMaxPasswordAge="55"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
mk_ntpasswd="/usr/local/sbin/mkntpwd"

Régler les autres directives selon le besoin.

Les outils smbldap-tools vont utiliser le contenu du fichier /etc/smbldap-tools/smbldap_bind.conf pour s’authentifier auprès du serveur LDAP. On doit donc le mettre à jour (en remplaçant bien entendu par le vrai mot de passe admin ldap) :

slaveDN="cn=admin,dc=testing,dc=6admin,dc=net"
slavePw="lemotdepasseldap"
masterDN="cn=admin,dc=testing,dc=6admin,dc=net"
masterPw="lemotdepasseldap"

 

On va pouvoir alors créer les fondements de notre base LDAP :

testpdc:~# smbldap-populate

Cette commande va créer la structure des utilisateurs et groupes. Ignorer le Warning concernant la deuxième ligne " adding new entry : ou=Users,dc=testing,dc=6admin,dc=net ", car nous utilisons la même unité organisationnelle pour stocker les machines et les users.

On définit pour finir le mot de passe de l’utilisateur Administrator :

testpdc:~# smbldap-passwd Administrator

Tests

On peut vérifier avec slapcat que toutes les entrées ont bien comme SID de domaine le même que notre domaine existant TESTDOM, récupéré avec net rpc getsid.

On peut maintenant tester l’ajout d’utilisateurs et de groupes en utilisant les scripts de smbldap-tools. Voici quelques exemple :

Ces commandes génèrent à la fois des informations pour les comptes posix (Unix) et pour les comptes Samba.

On vérifie que les utilisateurs Administrator et nobody ont été ajoutés et apparaissent au niveau des utilisateurs Posix du système :

testpdc:~# getent passwd

Administrator:x:0:512:Netbios Domain Administrator:/home:/bin/false
nobody:x:999:514:nobody:/dev/null:/bin/false

De même, nous vérifions les nouveaux groupes Posix ajoutés :

testpdc:~# getent group

Domain Admins:x:512:Administrator
Domain Users:x:513:jpince
Domain Guests:x:514:
Print Operators:x:550:
Backup Operators:x:551:
Replicator:x:552:
Domain Computers:x:553:

Tester également les autres scripts smbldap-*, en lisant au préalable la documentation des différentes commandes.

Pour visualiser les comptes Samba :

testpdc:~# pdbedit -vL

Migration des comptes

Jonction au domaine

Attention, notre service Samba doit être arrêté. Nous allons enregistrer notre BDC temporaire Samba auprès du PDC NT du domaine TESTDOM. Pour cela, on a besoin d’un compte d’administrateur du domaine existant sur le PDC (ici administrator) ainsi que son mot de passe (ici toto) :

testpdc:~# net rpc join –S NT4SERVER –w TESTDOM –U Administrator
Joined domain TESTDOM.

Cette commande crée un compte de serveur BDC pour notre serveur Samba sur le PDC NT. Si cette étape échoue, il s’agit très probablement d’un problème de résolution de nom netbios. Le plus simple est alors d’éditer le fichier /etc/samba/lmhosts afin qu’il contienne les lignes :

192.168.1.4 NT4SERVER
192.168.1.4.....TESTDOM

 

Import des comptes

Nous pouvons maintenant importer les comptes utilisateur groupes et machines sur notre BDC temporaire Samba :

testpdc:~# net rpc vampire –S NT4SERVER –w TESTDOM –U Administrator

 

Tests

Nous allons maintenant tester le fonctionnement de notre serveur Samba en tant que PDC, mais déconnecté du réseau principal afin de ne pas gêner les utilisateurs. On a donc besoin d’un mini réseau local constitué de notre serveur Samba [testpdc], et d’au moins un poste de travail de test sous Windows.

Une fois qu’on est isolé du réseau principal, on bascule le Samba BDC en PDC, tout d’abord en changeant la directive du fichier /etc/samba/smb.conf :

domain master = Yes
local master = Yes

 

et en démarrant Samba :

testpdc:~# /etc/init.d/samba start

Le serveur [testpdc] est alors PDC du domaine TESTDOM, et on va :

Et toutes les autres manipulations qui permettront de bien se familiariser avec l’environnement samba pdc + ldap.

 

Répertoires de groupes

Nous allons créer les partages de groupes dans le fichier /etc/samba/smb.conf pour ensuite copier les fichiers des groupes du PDC NT vers notre nouveau PDC.

Chaque partage est de la forme (on prend comme exemple un groupe Comptabilité, ayant pour partage compta) :

[compta]
path=/home/samba/groups/compta
public = yes
writeable = yes
read only = no
create mask = 0750
valid users = "Comptabilité"

Le contenu de valid users est le nom d’un ou plusieurs groupes d’utilisateurs (tel qu’existant dans notre base LDAP) ayant les droits d’accès en lecture et écriture au répertoire.

On crée également le répertoire du groupe sur le serveur, et on règle les droits d’accès :

testpdc:~# mkdir /home/samba/groups/compta
testpdc:~# chmod 770 /home/samba/groups/compta
testpdc:~# chgrp "Comptabilité" /home/samba/groups/compta

 

Transfert des fichiers

Nous devons nous assurer que tous les partages sont utilisés en lecture seule, le temps du transfert. On peut également effectuer ce transfert durant les heures de la journée où personne ne travaille.

 

Répertoires de groupes

On va copier les fichiers et répertoires de chaque groupe en utilisant par exemple la technique suivante : monter un volume SMB correspondant au partage de groupe sur le PDC NT, et copier les fichiers sur le serveur Samba.

Pour cela, il est nécessaire d’avoir le package smbfs installé pour gérer les sytèmes de fichier de type SMB. Si ce n’est pas le cas, on l’installe :

testpdc:~# apt-get install smbfs

testpdc:~# mkdir /tmp/grpshare
testpdc:~# mount –t smbfs –o username=Admin6admin //NT4SERVER/COMPTA /tmp/grpshare
Password:
testpdc:~# cp –R /tmp/grpshare/* /home/samba/groups/compta/
testpdc:~# umount /tmp/grpshare

LDAP Account Manager (LAM)

LAM est une interface d’administration qui permet de gérer les comptes utilisateurs groupes et machines simplement.

On se rendra sur le site Web de LAM http://lam.sourceforge.net/ pour télécharger la dernière version au format .deb. Au moment de l’écriture de cette documentation, la version courante était la 4.6. Après avoir téléchargé le package, on l’installe :

testpdc:~# dpkg –i ldap-account-manager_0.4.6-1_all.deb

 


[Retour][Ecrivez-moi]Version française  English version