Vous êtes ici : Accueil > Administration réseaux > PDC Samba + LDAP

PDC Samba + LDAP

Pré-requis:

Dans cet article, nous allons voir comment configurer un contrôleur de domaine Samba + LDAP. Pour cela j'ai utilisé une Debian Lenny.

Afin que ce guide corresponde à votre environnement, je vous conseille reconfigurer le niveau de Debconf qui est à "Elevé" par défaut.

# dpkg-reconfigure debconf

Allez sur "Dialogue" puis choisisser "Intermédiaire".

Il est conseillé d'utiliser votre mot de passe root à chaque fois que l'on vous demande un mot de passe. Ceci à fin d'éviter les erreurs.

Le serveur sur lequel le PDC sera installé doit automatiquement avoir une adresse IP statique.

Dans ce guide le serveur Samba et le serveur OpenLDAP se trouvent sur le même PC.

Je ne pourrais être tenu responsable des éventuelles erreurs de manipulation.

Installation du serveur OpenLDAP :

Installation :

Pour installer OpenLDAP, nous aurons besoin des paquets suivants : slapd, db4.2-util et ldap-utils. Nous allons donc les installer :

# apt-get install slapd db4.2-util ldap-utils

Le paquet slapd contient la partie serveur d'OpenLDAP.

Veuillez ensuite répondre aux questions comme ceci :

  • Le nom du domaine : domain.local (nom de votre LDAP (Totalement diférent du domaine Samba)

Si vous mettez domain.local vous aurez donc dc=domain,dc=local

  • Nom de votre organisation: domain.local (cette question à peu d'importance)
  • Mot de passe de l'administrateur (C'est le mot de passe que vous utiliserez pour vous connecter)
  • Module de base de données à utiliser : HDB
  • Faut-il supprimer la base de données à la purge du paquet ? NON
  • Faut-il déplacer l'ancienne base de données ? NON
  • Faut-il autoriser le protocole LDAPv2 ? NON

Installation du schéma Samba:

OpenLDAP fonctionne à l'aide de schéma. Il y en 4 par défaut d'installés sur OpenLDAP. Pour pouvoir utiliser Samba avec LDAP, il nous faut donc installé le schéma Samba approprié, qui se trouve dans le paquet samba-doc.

# apt-get install samba-doc

Une fois le paquet installé on décompresse le schéma pour Samba dans le répertoire LDAP qui contient les schéma :

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

Lorsque le schéma a été copié, il faut indiqué à OpenLDAP qu'il doit l'utiliser. Pour cela, il faut modifier le fichier /etc/ldap/slapd.conf. On déclare alors le schéma comme ceci:

include         /etc/ldap/schema/samba.schema

Nous allons ensuite créer un mot de passe crypté grâce à la commande slappasswd. Cette étape est pour moi nécessaire car elle permet de ne pas voir le mot de passe en clair dans le fichier slapd.conf.

srv-ced:/home/ced# slappasswd
New password:
Re-enter new password:
{SSHA}2pNfYSrrpZ0mi5H/jXCYp2xQj7anuROs

Il faut ensuite copier le mot de passe obtenu ({SSHA}2pNfYSrrpZ0mi5H/jXCYp2xQj7anuROs) dans le fichier slapd.conf. Pour cela cherchez dans ce fichier la ligne :

# The base of your directory in database #1
suffix          "dc=domain,dc=local"

et rajouter les lignes suivantes en dessous :

rootdn          "cn=admin,dc=domain,dc=local"
rootpw          {SSHA}2pNfYSrrpZ0mi5H/jXCYp2xQj7anuROs

Il faut ensuite relancer le serveur OpenLDAP pour qu'il prenne en compte les modifications effectuées.

# /etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.

Installation du Serveur Samba :

Installation :

Nous allons dans un premier temps installer le serveur samba ainsi que les outils pour le client :

# aptitude install samba smbclient smbfs

Répondez au question en laissant les valeurs par défaut. Cela n'a pas d'importance car nous ferons nous-même notre configuration.

Modification du fichier smb.conf :

Afin de paramétrer comme nous le voulons le serveur Samba, nous allons modifier le fichier /etc/samba/smb.conf. Voici mon fichier avec en rouge les lignes que vous devez modifier :

# /etc/samba/smb.conf
# Fichier de configuration de Samba
# Formation Debian GNU/Linux par Alexis de Lattre
# http://formation-debian.via.ecp.fr/

# Consultez "man smb.conf" pour plus de détails sur les options
# Exécuter "testparm" pour vérifier la validité de ce fichier
# Exécuter "/etc/init.d/samba reload" à chaque changement de ce fichier

# DEBUT des paramètres globaux

[global]
### A changer: pas d'espace, ni point === >
workgroup = DOMAIN

### A changer, mettre le meme nom que le nom de votre machine === >
netbios name = machine
server string = Samba-LDAP PDC Server
domain master = Yes
local master = Yes
domain logons = Yes
os level = 40
#passwd program = /usr/sbin/smbldap-passwd ?u %u
ldap passwd sync = Yes
passdb backend = ldapsam:ldap://127.0.0.1/
### A changer === >
ldap admin dn = cn=admin,dc=domain,dc=local
### A changer === >
ldap suffix = dc=domain,dc=local
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Machines

#Scripts pour samba pour créer les utilisateurs, les groupes, etc.
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"

#remplacer %L directement par le nom du serveur (apparement un bug avec la version smbldap-tools 0.9.4-1)
logon path = \\nom_du_serveur\profile\%U
logon drive = P:
logon home = \\nom_du_serveur\%U
logon script = %U.bat

#/!\ Les lignes suivantes sont requises pour les clients Windows XP
server signing = auto
server schannel = auto

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
### A changer si vous n'utilisez pas ce réseau === >
hosts allow = 192.168.1.0/255.255.255.0
winbind use default domain = Yes
nt acl support = Yes
msdfs root = Yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/

# FIN des paramètres globaux du serveur

# DEBUT des paramètres spécifiques à chaque partage
[netlogon]
path = /home/netlogon
guest ok = Yes
browseable = No
admin users = root
[profile]
path = /home/export/profile
browseable = No
writeable = Yes
profile acls = yes
create mask = 0777
directory mask = 0777
[homes] comment = Repertoire Personnel valid users = %S browseable = No writeable = Yes [partage] comment = Repertoire commun browseable = Yes read only = No public = No path = /home/partage # FIN des paramètres spécifiques à chaque partage

Une fois que ce fichier de configuration a été enregistré, il faut maintenant créer les dossiers pour les partages et leur affectés les droits adéquats.

mkdir -p /home/netlogon
mkdir -p /home/export/profile
mkdir -p /home/partage
chmod a+w /home/export
chmod a+w /home/export/profile
chmod a+w /home/partage

Samba + LDAP :

Cette partie concerne l'interaction en le serveur Samba et le serveur OpenLDAP. Pour que nos deux serveurs puissent communiquer entre eux, il faut installer le paquet smbldap-tools :

# apt-get install smbldap-tools

Ce paquet contient plusieurs scripts facilitant l'administration de notre contrôleur de domaine.

Nous allons maintenant exécuter un script perl permettant de configurer Samba et LDAP afin qu'ils puissent fonctionner ensemble :

# gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
# perl /usr/share/doc/smbldap-tools/configure.pl

Lorsque vous y êtes invités, appuyer sur la touche "Entrer" sans insérer quoi que ce soit. Vous devez renseigner quelque chose que lorsque l'on vous demande "l'ouverture de session Accueil" et "le chemin d'ouverture de session". Il faudra alors mettre le caractère "." (point). Lors de l'exécution de ce script, il vous sera demander de rentrer un mot de passe pour "le maître du bind LDAP" et "l'esclave du bind LDAP", Veillez à mettre le même mot de passe que lors de la configuration de LDAP !!

Modification du fichier smbldap_bind.conf :

Nous allons donc maintenant configurer Samba afin qu'il puisse joindre LDAP. Tout se passe dans le fichier /etc/smbldap-tools/smbldap_bind.conf. Nous allons donc l'éditer ou le créer:

slaveDN="cn=admin,dc=domain,dc=local"
slavePw=votremotdepasseenclair
masterDN="cn=admin,dc=domain,dc=local"
masterPw=votremotdepasseenclair

Comme vous pouvez vous en doutez, il y un problème de sécurité car le mot de passe est en clair dans le fichier. Ici nous ne pouvons pas le chiffrer donc nous allons contourner le problème en changeant les droits sur du fichier :

chmod 600 /etc/smbldap-tools/smbldap_bind.conf

Modification du fichier smbldap.conf :

Une fois que Samba peut se connecter au LDAP, il faut faire une correspondance entre leurs variables respectives afin qu'ils puissent se comprendre. Tout se passe dans le fichier /etc/smbldap-tools/smbldap.conf. Nous allons donc l'éditer ou le créer (modifiez ce qu'il y a en rouge):

### General Configuration  ####
sambaDomain="DOMAIN"

### LDAP Configuration ###
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="require"
#cafile="/etc/opt/IDEALX/smbldap-tools/ca.pem"
#clientcert="/etc/opt/IDEALX/smbldap-tools/smbldap-tools.pem"
#clientkey="/etc/opt/IDEALX/smbldap-tools/smbldap-tools.key"
suffix="dc=domain,dc=local"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=domain.local,${suffix}"
scope="sub"
hash_encrypt="SSHA"
crypt_salt_format="%s"

### Unix Accounts Configuration ###
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"

### SAMBA Configuration ###
#userSmbHome="\\machine\%U"
#userProfile="\\machine\profiles\%U"
#userHomeDrive="H:"
#userScript="%U.bat"
mailDomain="domain.local"

### SMBLDAP-TOOLS Configuration ###
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
# no_banner="1"

Nous allons maintenant appliquer les bonnes permissions pour ce fichier de configuration :

# chmod 644 /etc/smbldap-tools/smbldap.conf

Mise en route :

Tout d'abord, nous devons stopper Samba :

# /etc/init.d/samba stop

Une fois samba stoppé, il nous faut créer le fichier /var/lib/samba/secrets.tdb qui servira à fournir à samba le mot de passe du compte administrateur qui effectue les requêtes dans l'annuaire LDAP.

# smbpasswd -w votremotdepasseroot

On relance ensuite le serveur Samba :

# /etc/init.d/samba start

Le démarrage doit-être quasi immédiat. S'il dure plusieurs secondes, c'est qu'il doit y avoir une erreur.

Après le redémarrage, on vérifie que tout s'est bien passé grâce à la commande net getlocalsid :

srv-ced:/home/ced# net getlocalsid
SID for domain SRV-CED is: S-1-5-21-574508431-2504965313-861103235

Cette commande ne doit retourner aucune erreur ni warning !

Une fois le SID obtenu, il faut le mettre dans le fichier /etc/smbldap-tools/smbldap.conf au début dans la section General Configuration :

SID="S-1-5-21-574508431-2504965313-861103235"

Architecture LDAP :

Dans cette partie, nous allons créer l'architecture de notre annuaire LDAP grâce à la commande smbldap-populate :

# smbldap-populate

Si tout se passe bien, vous devez normalement saisir deux fois votre mot de passe root.

Avec cette commande nous créons:

  • Les différentes OU (Organisation Unit) qui contiendront vos Machines, Users et Groups
  • Deux UID : root et nobody qui seront dans OU = Users
  • Plusieurs CN (Common Name): Les groupes qui seront dans OU = Groups

Copiez quelque part la dernière ligne cela vous servira peut-être par la suite si vous voulez configurer une interface d'administration pour votre LDAP.

sambaDomainName=domaine,dc=domain,dc=local

À partir de cet instant, nous pouvons tester l'ajout d'un utilisateur. Cela se fait grâce à la commande smbldap-useradd :

# smbldap-useradd -a -c "toto" -m -P toto
  • -a : désigne un utilisateur
  • -c : Information Gecos : Le nom entier
  • -m : Créé le répertoire personnel
  • -P : création du mot de passe

Pour nous assurer que l'utilisateur toto a bien été créé :

# smbldap-usershow toto

Cette commande fonctionne avec n'importe quel utilisateur. Elle permet de voir les informations de chaque utilisateur.

Authentification Unix :

Par défaut, l'authentification Unix se fait à l'aide du fichier /etc/passwd.Cependant, il est tout à fait possible d'indiquer au système de choisir une autre base d'authentification. Nous allons donc indiquer à notre serveur de se basé sur notre LDAP fraichement installé. Pour cela, nous allons installé un module NSS qui va lui permettre d'aller chercher les informations nécessaires à l'authentification dans le LDAP. Nous allons donc installer ce module :

# apt-get install libnss-ldap

Il faut ensuite répondre aux questions posées comme ceci :

  • Adresse du serveur LDAP : 127.0.0.1
  • Nom distinctif (DN) de la base de recherche: dc=domain,dc=local
  • Version de LDAP: 3
  • La base de données demande-t-elle une identification ? NON
  • Le fichier de configuration doit-il être lisible et modifiable uniquement par son propriétaire ? NON

Il faut répondre NON à la dernière question car sinon seul root pourra se interroger l'annuaire. De tout façon le fichier de configuration ne contient aucun mot de passe.

Vérifions ensuite que le fichier de configuration contient bien les bonnes valeurs. Pour cela, éditez le fichier /etc/libnss-ldap.conf. Vous devez avoir :

host 127.0.0.1
base dc=domain,dc=local
uri ldap://127.0.0.1/
rootbinddn cn=admin,dc=domain,dc=local

Par défaut, si la connexion au LDAP échoue, elle va être relancé automatiquement. Le temps imparti entre chaque connexion augmente à chaque fois si que votre client n'arrivera pas à booter. Vous serez donc obligé de passé par un liveCD et de monter la partition système. Pour évitez ce genre de mésaventure, il faut changer la règle de connexion au LDAP. Tout se passe dans le fichier /etc/libnss-ldap.conf. Il faut décommenter la ligne #bind_policy hard afin de mettre :

bind_policy soft

Cela permettra au poste de démarrer quand même en cas d'erreur.

Nous allons maintenant installé le module PAM pour LDAP :

#apt-get install libpam-ldap

Il faut ensuite répondre aux questions posées par Debconf :

  • Hôte du serveur LDAP : 127.0.0.1
  • Nom distinctif (« distinguished name») de la base de recherche : dc=domain,dc=local
  • Version de LDAP: 3
  • Faut-il créer une base de données locale pour l'administrateur ? NON
  • La base de données requiert-elle une connexion authentifiée ? NON
  • Méthode de chiffrement pour les changements de mots de passe : crypt

Authentification grâce à LDAP :

Il suffit maintenant d'indiquer à notre système d'aller interroger LDAP lors de la demande de connexion d'un client.

Tout se passe dans le fichier /etc/nsswitch.conf :

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

Il suffit de rajouter ldap après la directive compat des lignes : passwd, group, shadow.

ATTENTION : si vous faites une erreur en manipulant ce fichier, vous ne pourrez plus vous connecter avec aucun de vos utilisateurs (même root) !!!

Séparation des logs :

Nous allons maintenant séparer les logs LDAP qui par défaut sont stockés dans /var/log/syslog.  Ce fichier comprenant beaucoup de logs autres que ldap, il est plus pratique d'avoir des logs séparés pour LDAP.

Afin de séparer, les logs, il faut éditer le fichier /etc/rsyslog.conf :

# vi /etc/rsyslog.conf

Et ensuite rajouter cette ligne à la fin du fichier :

#Logs LDAP
local4.* /var/log/openldap.log

Nous devons ensuite redémarrer le service rsyslog afin de prendre en compte les modifications :

# /etc/init.d/rsyslog restart

Vérification :

Vous avez créé un utilisateur toto.

Nous allons maintenant vérifier le bon fonctionnement de notre système grâce à la commande getent passwd :

# getent passwd

Cette commande doit vous retourner quelque chose comme :

toto:x:1070:513:toto:/home/toto:/bin/bash

Intégration d'un client Windows :

Une fois que vous avez terminé toute l'installation et la configuration de votre serveur Linux, penser à relancer les deux services:

/etc/init.d/samba stop
/etc/init.d/slapd restart
/etc/init.d/samba start

Nous allons maintenant joindre le poste client Windows à notre domaine :

  • Click droit sur Poste de Travail, Propriétés.
  • Onglet Nom de l'ordinateur
  • Click sur le bouton Modifier...
  • Membre de: Chosissez Domaine : Saisissez le nom de la directive workgroup que vous avez renseigné dans smb.conf
  • OK
  • On vous demande un login: root et votre mot de passe : celui de root
  • Si tout va bien le message " Bienvenue dans le domaine ...." s'affiche.
  • Redémarrez la machine
  • Choisissez le domaine que vous avez créé et connectez vous avec root ou toto

Votre profil Windows est stocké sur le serveur Linux dans /home/export/profile/ chaque utilisateur possède son répertoire. Il contient les éléments de votre bureau, le répertoire "Mes Documents", les fichiers de configuration des applications (Firefox, Thunderbird....).

Si votre utilisateur dispose d'un répertoire personnel sur le serveur Linux (/home/utilisateur) il est automatiquement créé dans le Poste de Travail. C'est bien pratique si vous utilisez un dual boot sur les machines clientes.

J'espère que cet article vous aura été utile et n'hésitez pas à me laissez vos remarques 😉

[source]

  • lam

    bonjour ced j'ai une série d'erreur aprés avoir tapé la commande net getlocalsid. j'ai vErifié tous mes fichiers de conf et je ne trouve pas d'erreur .

    voila ce que la console me retourne :

    root@debian-master:~# net getlocalsid
    [2012/01/03 23:47:34.362290, 0] lib/smbldap.c:731(smb_ldap_start_tls)
    Failed to issue the StartTLS instruction: Protocol error
    [2012/01/03 23:47:35.369054, 0] lib/smbldap.c:731(smb_ldap_start_tls)
    Failed to issue the StartTLS instruction: Protocol error
    [2012/01/03 23:47:36.374875, 0] lib/smbldap.c:731(smb_ldap_start_tls)
    Failed to issue the StartTLS instruction: Protocol error
    [2012/01/03 23:47:37.376761, 0] lib/smbldap_util.c:310(smbldap_search_domain_info)
    smbldap_search_domain_info: Adding domain info for UTOPIAGROUP failed with NT_STATUS_UNSUCCESSFUL
    SID for domain DEBIAN-MASTER is: S-1-5-21-3529920711-4121103214-3359838667

    Tu n'aurais pas une idée de la provenance de ces erreurs?

    Merci d'avance

    • ced

      Bonjour lam

      Est-ce que dans le fichier /etc/smbldap-tools/smbldap.conf la valeur ldapTLS est bien à zéro?

  • didi2a

    salut ced et merci pour le tuto
    juste une petite question, quand tu dit "Il faut ensuite copier le mot de passe obtenu ({SSHA}2pNfYSrrpZ0mi5H/jXCYp2xQj7anuROs) dans le fichier slapd.conf. Pour cela cherchez dans ce fichier la ligne"

    mon fichier slapd.conf est vide a par le include que j'ai rajouté c'est normal ?
    cela vient peut etre du fait que j'ai installer db4.8-util et non pas 4.2 car il n'etait pas compatible avec mon ubuntu. 11.10
    a+

    • ced

      Bonjour,

      Mon tuto a été fait sur une debian 5 donc il y avait encore le fichier slapd.conf... Pour une nouvelle install sur debian 6 ou dans ton cas ubuntu 11.10 il y a une petite manip à faire pour que le ldap prenne bien en compte le samba :

      # slaptest –f /etc/ldap/slapd.conf –F /etc/ldap/slapd.d/

      Aprés on vérifie que tout s'est bien passé :

      # ls –l /etc/ldap/slapd.d/cn=config/cn=schema

      On modifie les droits en conséquences :

      # chown openldap:openldap /etc/ldap/schema/samba.schema
      # chown openldap:openldap /etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif

      Voilà qui devrait résoudre ton soucis. Si ce n'est pas le cas, n'hésites pas à remettre un commentaires.

      Ced

  • float

    je suis en debian6 et la commande
    #slaptest –f /etc/ldap/slapd.conf –F /etc/ldap/slapd.d/

    #usage: slaptest [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o [=]] [-n databasenumber] [-u]

    je sais pas pourquoi ?

  • Black

    #slaptest –f /etc/ldap/slapd.conf –F /etc/ldap/slapd.d/
    Seulement tu remplace le – par -
    comme ca
    #slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/