• Aucun résultat trouvé

Annuaire LDAP + Samba

N/A
N/A
Protected

Academic year: 2022

Partager "Annuaire LDAP + Samba"

Copied!
20
0
0

Texte intégral

(1)

Ce document est de donner les bases nécessaires pour la création d'un annuaire LDAP qui sera utilisé pour l'authentification de comptes UNIX et Samba sur un serveur distant.

L'objectif est de peupler l'annuaire LDAP avec les comptes du serveur de courriers électroniques du laboratoire pour une authentification unique pour chaque service.

Ce document,rédigé au fil des test, décrit étape par étape les problèmes rencontrés et ne constitue qu'un point de départ pour l'utilisation complète de LDAP avec Samba, car il ne traite que de l'authentification des utilisateurs, pas de la gestion de groupes.

Installation du serveur LDAP avec gestion des comptes Samba serveur:~# apt-get install slapd ldap-utils phpldapadmin

Lecture des listes de paquets... Fait

Construction de l'arbre des dépendances... Fait

Les paquets supplémentaires suivants seront installés : libiodbc2 libldap-2.3-0 libslp1 php5-ldap

Paquets suggérés : slpd openslp-doc

Les NOUVEAUX paquets suivants seront installés :

ldap-utils libiodbc2 libldap-2.3-0 libslp1 php5-ldap phpldapadmin slapd 0 mis à jour, 7 nouvellement installés, 0 à enlever et 0 non mis à jour.

Il est nécessaire de prendre 2588ko dans les archives.

Après dépaquetage, 8901ko d'espace disque supplémentaires seront utilisés.

Souhaitez-vous continuer [O/n] ?

Remarque : le mot de passe pour l'administration de la base est demandé deux fois.

Pour la configuration automatique, le logiciel utilise les paramètres renvoyés par la commande hostname -f

Dans notre cas:

serveur.cem2.univ-montp2.fr

Le fichier de configuration du serveur LDAP est /etc/ldap/slapd.conf.

# The base of your directory in database #1 suffix "dc=cem2,dc=univ-montp2,dc=fr"

# rootdn directive for specifying a superuser on the database. This is needed

# for syncrepl.

# rootdn "cn=admin,dc=cem2,dc=univ-montp2,dc=fr"

# Where the database file are physically stored for database #1 directory "/var/lib/ldap"

Annuaire LDAP + Samba

(2)

Le nom du domaine est cem2.univ-montp2.fr

La base de l'annuaire est dc=cem2,dc=univ-montp2,dc=fr L'administrateur de la base est admin.

Configuration de LDAP pour l'utilisation de Samba

L'utilisation de Samba nécessite l'utilisation de classes d'objets supplémentaires.

apt-get install samba-doc

cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/

gunzip /etc/ldap/schema/samba.schema.gz

Avec ces commandes, les fichiers décrivant les classes d'objets sont récupérés puis installés dans le répertoire /etc/ldap/schema qui contient tous les schémas pour la description des attributs et des classes d'objets.

Ajouter dans le fichier /etc/ldap/slapd.conf la ligne suivante : include /etc/ldap/schema/samba.schema

/etc/init.d/slapd restart pour prendre en compte les modifications.

Les nouvelles classes d'objets relatives à Samba ont été installées et déclarées dans le fichier de configuration de LDAP.

Le serveur LDAP est prêt à être utilisé. Pour visualiser le contenu actuel de la base il suffit de taper :

slapcat | less

Pour tester le fichier de configuration, taper : slaptest -f /etc/ldap/slapd.conf

config file testing succeeded Remarque :

Lors de l'installation sur un nouveau serveur avec recopie d'une ancienne base, vérifier que les bases LDAP (répertoire /var/lib/ldap) appartiennent bien à l'utilisateur

openldap. Dans le cas contraire, le serveur ldap se lance sans aucun message d'erreur mais le port 389 n'est pas ouvert en écoute, donc impossible de gérer ou de

s'authentifier sur la base.

Remarque :

Si un serveur « web » est installé, il est possible d'administrer l'annuaire avec

phpldapadmin (apt-get install phpldapadmin). Il suffit d'ajouter phpldapadmin au nom du serveur : le nom de connexion est le nom complet de l'administrateur.

http://nom_serveur/phpldapadmin/

cn=admin,dc=cem2,dc=univ-montp2,dc=fr

# 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

(3)

Peupler l'annuaire

Il existe différentes manières d'administrer le serveur LDAP : Les commandes slap utilisables directement sur le serveur

Les commandes slap accèdent directement à la base. Il est donc nécessaire d'arrêter le serveur LDAP avant de les utiliser pour éviter qu'un accès concurrent ne corrompe la base.

Slapcat, très utile, permet de faire un « dump » de la base et donc de faire une sauvegarde régulière. Elle affiche le contenu de la base au format LDIF.

slapcat > sauvegarde.ldif

Slapadd permet de peupler l'annuaire, typiquement utilisé pour restaurer une sauvegarde effectuée par slapcat.

slapadd < entree.ldif

Dans l'état actuel, slapcat nous renvoie : dn: dc=cem2,dc=univ-montp2,dc=fr objectClass: top

objectClass: dcObject objectClass: organization o: cem2.univ-montp2.fr dc: cem2

structuralObjectClass: organization

entryUUID: 0c10d87a-c29b-102d-8f39-dda6c2d14388 creatorsName:

modifiersName:

createTimestamp: 20090421083500Z modifyTimestamp: 20090421083500Z

entryCSN: 20090421083500Z#000000#00#000000 dn: cn=admin,dc=cem2,dc=univ-montp2,dc=fr objectClass: simpleSecurityObject

objectClass: organizationalRole cn: admin

description: LDAP administrator

userPassword:: e2NyeXB0fXdodDBXam1Idjh0T1k=

structuralObjectClass: organizationalRole

entryUUID: 0d5ff6ca-c29b-102d-8f3a-dda6c2d14388 creatorsName:

modifiersName:

createTimestamp: 20090421083502Z modifyTimestamp: 20090421083502Z

entryCSN: 20090421083502Z#000000#00#000000

La base contient les objets de dn (Distinguished Name) dn: dc=cem2,dc=univ- montp2,dc=fr et dn: cn=admin,dc=cem2,dc=univ-montp2,dc=fr

Remarque : pour la suite, tous les comptes appartiendront à une classe d'objet iesusers.

(4)

La gestion de la base par ces outils est très limitée, effacement, modification sont impossibles. De plus, lors d'un ajout il n'y a pas de vérification de cohérence des données.

Les commandes ldap utilisables depuis un client ou un serveur

Le paramétrage du fichier /etc/ldap/ldap.conf est effectué à l'installation des paquets pour éviter de fournir à chaque entrée d'une commande les paramètres (options)

comme le nom de la base de données, le nom du serveur. Ces outils sont contenus dans le paquet ldap-utils.

apt-get install ldap-utils installe les commandes ldap de gestion de l'annuaire.

Quelques commandes ldap ldapadd

Lien vers ldapmodify, permet d'ajouter un nouvel objet dans la base.

ldapcompare

Comparaison avec un autre serveur ldap.

ldapdelete

Supprime un objet.

ldapdelete -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe

"uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

ldapmodify

Permet de modifier un objet, elle est aussi utilisée pour créer un objet avec l'option -a.

Voici un exemple de l'utilisation de la commande ldapmodify, les attributs à modifier sont séparés par une ligne « - » dans le fichier ldif. L'exemple suivant modifie tous les mots de passe de l'utilisateur. La commande suivante associée au fichier tempo.ldif permet de modifier les mots de passe utilisateurs pour Samba :

ldapmodify -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f tempo.ldif

ldapmodrdn

Permet de renommer une entrée. Modification du RDN.

Tout ce qui suit peut être fait indifféremment d'un serveur ou d'un client LDAP !!!!

dn: uid=tempo6,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr changetype: modify

replace: userPassword

userPassword: {crypt}dUknctPdxaKGQ -

replace: sambaLMPassword

sambaLMPassword: BBCB4942DD9DA506C482C03F54CDB5D9 -

replace: SambaNTPassword

SambaNTPassword: 1B35029A05581E17F66382EB8A6BC026 -

(5)

ldappasswd

Permet de définir les mots de passe des utilisateurs LDAP. Cela ne concerne pas les attributs sambaLMPassword et sambaNTPassword.

ldapsearch

Recherche dans l'annuaire.

Configuration du fichier /etc/ldap/ldap.conf

Le premier test de remplissage de l'annuaire peut être fait avec la commande ldapadd.

Le but est de créer l'objet iesusers qui sera la racine de tous les comptes. Je rappelle qu'avec les commandes ldap, ce remplissage peut se faire indifféremment du serveur ou d'un client sur lesquels le paquet ldap-utils a été installé.

Dans ma configuration, le paquet ldap-utils a été installé sur le client et le serveur, je peuple l'annuaire par le biais du serveur avec la commande ldapadd et je verifie sur mon client que la commande ldapsearch est aussi opérationnelle, donc que mon annuaire est accessible.

ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f iesusers.ldif

Brièvement pour les options :

-x utilise l'authentification simple à la place de SASL.

-D binddn pour se lier à l'annuaire.

-W pour avoir une invite pour entrer le mot de passe.

-w pour spécifier le mot de passe à la suite.

-f pour spécifier le fichier au format LDIF.

Création de l'entrée iesusers

ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f iesusers.ldif

adding new entry "ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

Le fichier iesusers.ldif contient:

# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $

#

# LDAP Defaults

#

# See ldap.conf(5) for details

# This file should be world readable but not world writable.

#BASE dc=example, dc=com

#URI ldap://ldap.example.com ldap://ldap-master.example.com:666 BASE dc=cem2, dc=univ-montp2.fr, dc=fr

URI ldap://162.38.134.18:389

#SIZELIMIT 12

#TIMELIMIT 15

#DEREF never

(6)

Entrée des utilisateurs existants dans l'annuaire LDAP :

Pour entrer un utilisateur dans l'annuaire, j'utilise un script shell recup qui récupère les données « obligatoires » de la classe posixAccount. Ce script balaye les fichiers

/etc/passwd pour récupérer les paramètres concernant l'utilisateur, et /etc/shadow pour le mot de passe crypté. Le script est lancé via la commande /travail/ldap/recup arnal.

Le fichier récupéré à la sortie du script :

Attention : sur ce fichier exemple il manque la ligne concernant le shell utilisé : loginShell: /bin/bash

Cet oubli n'était pas volontaire, l'erreur est laissée ici mais sera corrigée par la suite avec la commande ldapmodify.

ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f arnal.ldif

adding new entry "uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

L'utilisateur arnal vient d'être rentré.

Il est possible de le vérifier par:

serveur:~# ldapsearch -x -b "dc=cem2,dc=univ-montp2,dc=fr" "(uid=arn*)"

# extended LDIF

#

# LDAPv3

# base <dc=cem2,dc=univ-montp2,dc=fr> with scope subtree

# filter: (uid=arn*)

# requesting: ALL

#

# arnal, iesusers, cem2.univ-montp2.fr

dn: uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr objectClass: top

objectClass: account

dn: ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr ObjectClass: top

objectClass: organizationalUnit ou: iesusers

dn: uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr objectClass: top

objectClass: account objectClass: posixAccount cn: Stephane ARNAL uid: arnal

uidNumber: 40198 gidNumber: 40200

homeDirectory: /home/arnal

userPassword: {crypt}$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1

(7)

objectClass: posixAccount cn: Stephane ARNAL uid: arnal

uidNumber: 40198 gidNumber: 40200

homeDirectory: /home/arnal

# search result search: 2

result: 0 Success

# numResponses: 2

# numEntries: 1

Commande ldapmodify

Arrivé à cette étape, il peut être nécessaire de modifier les données entrées dans l'annuaire. La commande ldapmodify est utilisée à cet effet.

Elle est un peu plus compliquée que ldapadd. Elle utilise aussi le format ldif avec l'ajout d'un attribut changetype. C'est une commande très complète.

Pour modifier une entrée, l'attribut de changetype est modify.

Il faut ajouter ensuite dans le fichier ldif la ligne add : nom_attribut.

Dans le cas présent, je veux ajouter l'attribut loginShell: /bin/bash pour l'utilisateur arnal.

Le fichier arnal_modif.ldif a la forme suivante:

ldapmodify -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f arnal_modif.ldif

La commande ldapsearch -x -b "dc=cem2,dc=univ-montp2,dc=fr" "(uid=arn*)"

nous indique bien que l'attribut a été rajouté.

Remarque : Pour supprimer cette entrée il est possible d'utiliser la commande ldapdelete:

ldapdelete -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe

"uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

Configuration d'un client pour authentification

Les premiers utilisateurs sont créés .Dans un premier temps, il est nécessaire de vérifier que notre annuaire peut être utilisé afin d'authentifier des utilisateurs sur une machine cliente. Pour l'authentification, il est nécessaire d'installer des paquets supplémentaires pour pam.

apt-get install libpam-ldap libnss-ldap

dn: uid=arnal,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr changetype: modify

add: loginShell loginShell: /bin/bash

(8)

Voici les paramètres fournis lors de l'installation des paquets, pour les options les choix par défaut sont laissés :

ldap://162.38.134.12:389

dc=cem2,dc=univ-montp2,dc=fr Version de LDAP à utiliser 3

Compte LDAP superutilisateur : cn=admin,dc=cem2,dc=univ-montp2,dc=fr Mot de passe de l'administrateur : mot_de_passe

Configuration de NSS pour LDAP

Le fichier de configuration de libnss-ldap est /etc/libnss-ldap.conf, il a été rempli lors de l'installation des paquets. Si ce n'est pas le cas il est possible de le faire avec la commande dpkg-reconfigure libnss-ldap. Il faut maintenant indiquer à NSS d'utiliser LDAP pour obtenir des informations.

Le fichier /etc/nsswitch.conf n'a pas été modifié, modifier les lignes suivantes pour l'authentification :

Cela signifie que pour ces trois entrées c'est le serveur LDAP qui sera interrogé en

dernier par NSS pour valider un utilisateur, en cas d 'échec c'est ldap qui se chargera de l'authentification.

En tapant maintenant getent passwd utilisateur (utilisateur contenu dans l'annuaire LDAP précédemment créé), nous devrions avoir les informations sur celui-ci.

getent passwd donne la liste des comptes utilisateurs dans laquelle apparaissent les comptes créés dans l'annuaire.

Si je tape getent passwd arnal j'obtiens :

arnal:$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1:40198:40200:Stephane ARNAL:/home/arnal:

Configuration de PAM pour LDAP

PAM va permettre d'authentifier les utilisateurs via LDAP.

Comme pour libnss-ldap les questions posées à l'installation ont permis de remplir le fichier /etc/pam_ldap.conf.

Les fichiers de configuration d'authentification de PAM se trouvent dans /etc/pam.d. Il y a un fichier par service. Heureusement ces services incluent dans leur fichier de

configuration des fichiers « communs » qui sont /etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-session et

/etc/pam.d/common-passwd.

L'ordre d'apparition des lignes est important, required indique que si le résultat est passwd: files ldap

group: files ldap shadow: files ldap

ATTENTION

Une erreur dans la modification des fichiers de configuration de PAM peut entraîner l’impossibilité de se connecter, même avec root. Avant de modifier la configuration, il est fortement recommandé de se connecter sous une autre console en root pour pouvoir corriger le problème.

(9)

positif les autres modules seront quand mêmes analysés avant de prendre une décision, sufficient indique qu'un résultat positif est suffisant pour valider la vérification.

Configuration de common-session

La ligne contenant pam_mkhomedir.so indique que lors de l'ouverture de la session le répertoire de l'utilisateur sera créé s'il n'existe pas.

Pour cela il est nécessaire d'installer le paquet libpam-mkhomedir si celui-ci n'a pas été installé.

apt-get install libpam-mkhomedir

Remarque : le répertoire /etc/skel (répertoire modèle pour la création des répertoires) contient les fichiers de configuration tels que .bashrc, .bash-profile, et .bash-logout. Ce sont des copies des fichiers contenus dans le répertoire « courant » de l'utilisateur.

Configuration de common-password

Il suffit de rajouter la ligne suivante au « début du fichier » password sufficient pam_ldap.so

#

# /etc/pam.d/common-session - session-related modules common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of modules that define tasks to be performed

# at the start and end of sessions of *any* kind (both interactive and

# non-interactive). The default is pam_unix.

#

#session required pam_unix.so session required pam_limits.so session optional pam_ldap.so

session required pam_mkhomedir.so skel=/etc/skel

## /etc/pam.d/common-password - password-related modules common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of modules that define the services to be

#used to change user passwords. The default is pam_unix

#

# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in

# login.defs. Also the "min" and "max" options enforce the length of the

# new password.

password sufficient pam_ldap.so

password required pam_unix.so nullok obscure min=4 max=8 md5

(10)

Configuration de common-account

Presque la même opération, ajouter la ligne suivante au « début du fichier »:

account sufficient pam_ldap.so

Configuration de common-auth

Ajouter la ligne suivante au « début de fichier ».

auth sufficient pam_ldap.so

Il est maintenant possible de se connecter via ssh ou en local sur le client avec le compte arnal qui a été ajouté dans l'annuaire ldap.

On constate que la création du répertoire personnel est faite automatiquement sur le client lors de la première connexion.

Préparation des comptes Samba

La partie configuration Samba avec LDAP est relativement simple et assez rapide. La difficulté est de générer les mots de passe pour chaque utilisateur. J'ai opté pour un script perl (perl doit être installé sur le serveur avec la librairie libcrypt-smbhash- perl , Sup perl).

Dans le cas présent, les mots de passe UNIX et Samba pour les comptes déjà existants seront différents puisque je n'ai aucun moyen de récupérer cette information. Mais par la suite, le même script Perl sera utilisé pour générer les nouveaux mots de passe ou pour modifier ceux existants.

Les deux chaînes $nt et $lm sont récupérées pour obtenir les valeurs de

#

# /etc/pam.d/common-account - authorization settings common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of the authorization modules that define

# the central access policy for use on the system. The default is to

# only deny service to users whose accounts are expired in /etc/shadow.

#

account sufficient pam_ldap.so account required pam_unix.so

#

# /etc/pam.d/common-auth - authentication settings common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of the authentication modules that define

# the central authentication scheme for use on the system

# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the

# traditional Unix authentication mechanisms.

#

auth sufficient pam_ldap.so

auth required pam_unix.so nullok_secure

(11)

sambaLMPassword et sambaNTPassword (voir plus loin).

Exemple de création des mots de passe samba avec Perl, script mots.pl

Lancement du scipt:

perl -w mots.pl

qui donne pour notre mot de passe:

476944521C17CE5836077A718CCDF409 : 9B7C14D2110FD451980963B585BB267A Récupération d'un SID

Remarque : Samba doit être opérationnel.

Un SID de domaine est nécessaire pour Samba. Dans ce cas, le serveur que je dois remplacer existe déjà et je récupère son SID avec :

net getlocalsid

1. SID for domain BACKUP2 is: S-1-5-21-1835574758-856875503-2789082536 Pour le calcul du dernier numéro du SID d'un utilisateur il est possible d'utiliser la formule: (2 x uidNumber) + 1000.

Dans un premier temps, et pour les tests, seuls les paramètres obligatoires ont été utilisés, pour les connaître il est nécessaire de visualiser le contenu du fichier de description de la classe sambaSamAccount /etc/ldap/schema/samba.schema.

objectclass ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY DESC 'Samba 3.0 Auxilary SAM Account'

MUST ( uid $ sambaSID )

MAY ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $ sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $

sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $

displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $ sambaProfilePath $ description $ sambaUserWorkstations $

sambaPrimaryGroupSID $ sambaDomainName $ sambaMungedDial $ sambaBadPasswordCount $ sambaBadPasswordTime $

sambaPasswordHistory $ sambaLogonHours))

#!/usr/bin/perl -w use strict;

use Crypt::SmbHash;

my $lm;

my $nt;

my $mot="mot_de_passe";

#ntlmgen $mot, $lm, $nt;

( $lm, $nt ) = ntlmgen $mot;

# $nt = nthash(mot);

# $lm = lmhash(mot);

print "${lm} : ${nt}\n";

(12)

Configuration du serveur Samba qui va s'authentifier sur l'annuaire Le fichier /etc/pam.d/samba contient les lignes suivantes. Il n'y a donc rien à configurer de ce coté là, ces fichiers ont déjà été modifiés précédemment.

Après l'installation de samba, il est nécessaire d'effectuer quelques modifications dans le fichier /etc/samba/smb.conf, comme transformer la ligne passdb backend = tdbsam en passdb backend = ldapsam:ldap://162.38.134.18/ et rajouter les lignes suivantes pour indiquer à Samba que l'authentification se fait par LDAP.

Modifier le fichier /etc/samba/smb.conf comme suit:

Ne pas oublier de rendre les répertoires accessibles en écriture:

Il est nécessaire de rentrer ensuite le mot de passe de l'administrateur de la base LDAP pour Samba dans /var/lib/samba/secrets.db, puis de redémarrer samba:

smbpasswd -w mot_de_passe /etc/init.d/samba restart

Inconvénient, le répertoire n'est pas directement créé par samba, il suffit de créer un script qui s'exécutera à la connexion de chaque utilisateur.

Création automatique des répertoires

Dans la section [homes] de /etc/samba/smb.conf on ajoute:

# passdb backend = tdbsam

passdb backend = ldapsam:ldap://162.38.134.18/

ldap admin dn = cn=admin,dc=cem2,dc=univ-montp2,dc=fr ldap suffix = dc=cem2,dc=univ-montp2,dc=fr

#ldap group suffix = ou=Groups ldap user suffix = ou=iesusers

#ldap machine suffix = ou=Machines

[homes]

comment = Home Directories

# browseable = no browseable = yes

# By default, the home directories are exported read-only.

Change next

# parameter to 'yes' if you want to be able to write to them.

# writable = no writable = yes

@include common-auth

@include common-account

@include common-session

(13)

root preexec = /travail/samba/creation.sh %U

Ensuite on créé le fichier /travail/samba/creation.sh

On donne ensuite les droits:

chmod +x /travail/samba/creation.sh

Création des comptes finaux sur le serveur

Pour tester le fonctionnement, il suffit de créer un utilisateur complètement « virtuel » dans l'annuaire et d'essayer de se connecter à partir d'une machine sous Windows sur le serveur.

Création de l'utilisateur avec le fichier test.ldif sur le serveur qui reprend l'ancien utilisateur arnal et les mots de passe générés par le script mots.pl.

test.ldif

dn: uid=sambatest,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr objectClass: top

objectClass: account objectClass: posixAccount objectClass: sambaSamAccount cn: Stephane ARNAL

uid: sambatest uidNumber: 2000 gidNumber: 2000

homeDirectory: /home/sambatest

userPassword: {crypt}$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1 loginShell: /bin/bash

sambaSID: S-1-5-21-1835574758-856875503-2789082536-5000 sambaLMPassword: S-1-5-21-1835574758-856875503-2789082536 sambaNTPassword: 9B7C14D2110FD451980963B585BB267A

[homes]

comment = Home Directories path = /home/%U

root preexec = /travail/samba/creation.sh %U browseable = yes

writeable= yes

#!/bin/bash

#!/bin/bash

if [ ! -e /home/$1 ]; then mkdir /home/$1

chown $1 /home/$1 chmod 700 /home/$1 fi

exit 0

(14)

La commande suivante créé l'utilisateur:

ldapadd -x -D "cn=admin,dc=cem2,dc=univ-montp2,dc=fr" -w mot_de_passe -f test.ldif

adding new entry "uid=sambatest,ou=iesusers,dc=cem2,dc=univ-montp2,dc=fr"

Finalisation sur le serveur

Génération des mots de passe cryptés pour samba pour un utilisateur à l'aide d'un script perl dont la sortie est récupérée par un script shell.

La variable $ARGV[0] contient le nom de l'utilisateur et $ARGV[1] son mot de passe en clair. La sortie se fait sur l'écran, le programme sera appelé par un script shell qui redirigera la sortie vers un fichier pour traitement et création du fichier LDIF.

./crypte.pl arnal mot_de_passe

Remarque : Perl doit être installé sur le serveur avec la librairie libcrypt-smbhash-perl (Sup perl).

Les bases pour l'utilisation de LDAP avec Samba sont maintenant posées et le

mécanisme principalement décortiqué. Il est possible d'étendre l'utilisation aux groupes et aux « machines » ce qui n'était pas l'objectif premier.

Ci-dessous, la procédure qui permet d'installer un autre serveur Samba utilisant l'annuaire mis en place.

Installation d'un autre client Installation de Samba

apt-get install samba

Vérifier que le serveur est opérationnel avec les comptes locaux.

Installation authentification LDAP

apt-get install libpam-ldap libnss-ldap

Voici les paramètres fournis lors de l'installation des paquets, pour les options les choix

#!/usr/bin/perl -w use strict;

use Crypt::SmbHash;

my $lm;

my $nt;

( $lm, $nt ) = ntlmgen $ARGV[1];

print "$ARGV[0]:${lm}:${nt}\n";

(15)

par défaut sont laissés : ldap://162.38.134.12:389

dc=cem2,dc=univ-montp2,dc=fr Version de LDAP à utiliser 3

Compte LDAP superutilisateur: cn=admin,dc=cem2,dc=univ-montp2,dc=fr Mot de passe de l'administrateur : mot_de_passe

Configuration de NSS pour LDAP

Le fichier de configuration de libnss-ldap est /etc/libnss-ldap.conf, il a été rempli lors de l'installation des paquets ou avec la commande dpkg-reconfigure libnss-ldap. Il faut maintenant indiquer à NSS d'utiliser LDAP pour obtenir des informations.

Le fichier /etc/nsswitch.conf n'a pas été modifié, changer les lignes suivantes pour l'authentification:

/etc/init.d/nscd start si l'installation ne l'a pas lancé, sans cela il ne sera pas possible par la suite à un utilisateur contenu dans l'annuaire de s'identifier..

En tapant maintenant getent passwd utilisateur (utilisateur contenu dans l'annuaire LDAP précédemment créé), nous devrions avoir les informations sur celui-ci.

getent passwd donne la liste des comptes utilisateurs dans laquelle apparaissent les comptes créés dans l'annuaire.

Si je tape getent passwd arnal j'obtiens:

arnal:$1$Z2uny1Nt$ftxSbxUUBJ1Em6qpufXqx1:40198:40200:Stephane ARNAL:/home/arnal:

Configuration de PAM pour LDAP

PAM va permettre d'authentifier les utilisateurs via LDAP.

Comme pour libnss-ldap, les questions posées à l'installation ont permis de remplir le fichier /etc/pam_ldap.conf.

Les fichiers de configuration d'authentification de PAM se trouvent dans /etc/pam.d. Il y a un fichier par service. Heureusement ces services incluent dans leur fichier de

configuration des fichiers « communs » qui sont /etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-session et

/etc/pam.d/common-passwd.

L'ordre d'apparition des lignes est important, required indique que si le résultat est positif les autres modules seront quand mêmes analysés avant de prendre une décision, sufficient indique qu'un résultat positif est suffisant pour valider la vérification.

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

ATTENTION

Une erreur dans la modification des fichiers de configuration de PAM peut entraîner l’impossibilité de se connecter, même sous root. Avant de modifier la configuration, il est fortement recommandé de se connecter sous une autre console en root pour pouvoir corriger le problème.

(16)

Configuration de common-session

La ligne contenant pam_mkhomedir.so indique que lors de l'ouverture de la session le répertoire de l'utilisateur sera créé s'il n'existe pas.

Pour cela il est nécessaire d'installer le paquet libpam-mkhomedir, si celui-ci n'a pas été installé.

apt-get install libpam-mkhomedir

Remarque : le répertoire /etc/skel (répertoire modèle pour la création des répertoires) contient les fichiers de configuration tels que .bashrc, .bash-profile, et .bash-logout. Ce sont des copies des fichiers contenus dans le répertoire « courant » de l'utilisateur.

Configuration de common-password

Il suffit de rajouter la ligne suivante au « début du fichier » password sufficient pam_ldap.so

Configuration de common-account

Presque la même opération, ajouter la ligne suivante au « début du fichier »:

#

# /etc/pam.d/common-session - session-related modules common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of modules that define tasks to be performed

# at the start and end of sessions of *any* kind (both interactive and

# non-interactive). The default is pam_unix.

#

#session required pam_unix.so session required pam_limits.so session optional pam_ldap.so

session required pam_mkhomedir.so skel=/etc/skel

#

# /etc/pam.d/common-password - password-related modules common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of modules that define the services to be

#used to change user passwords. The default is pam_unix

# The "nullok" option allows users to change an empty password, else

# empty passwords are treated as locked accounts.

#

# (Add `md5' after the module name to enable MD5 passwords)

#

# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in

# login.defs. Also the "min" and "max" options enforce the length of the

# new password.

password sufficient pam_ldap.so

password required pam_unix.so nullok obscure min=4 max=8 md5

(17)

account sufficient pam_ldap.so

Configuration de common-auth

Ajouter la ligne suivante au « début de fichier ».

auth sufficient pam_ldap.so

Il est maintenant possible de se connecter via ssh ou en local sur le client avec le compte arnal qui a été ajouté dans l'annuaire ldap avec le même mot de passe que celui utilisé sur le serveur.

On constate aussi que la création du répertoire personnel est faite automatiquement sur le client lors de la première connexion (avec ssh, et non Samba !).

Configuration de Samba

Le fichier /etc/pam.d/samba contient les lignes suivantes. Il n'y a donc rien à configurer de ce coté là, ces fichiers ont déjà été modifiés précédemment.

Après l'installation de samba il est nécessaire d'effectuer quelques modifications dans le fichier /etc/samba/smb.conf, comme transformer la ligne passdb backend = tdbsam en passdb backend = ldapsam:ldap://162.38.134.18/ et rajouter les lignes suivantes pour indiquer à Samba d'accéder à la base LDAP.

Modifier le fichier /etc/samba/smb.conf comme suit:

#

# /etc/pam.d/common-account - authorization settings common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of the authorization modules that define

# the central access policy for use on the system. The default is to

# only deny service to users whose accounts are expired in /etc/shadow.

#

account sufficient pam_ldap.so account required pam_unix.so

#

# /etc/pam.d/common-auth - authentication settings common to all services

#

# This file is included from other service-specific PAM config files,

# and should contain a list of the authentication modules that define

# the central authentication scheme for use on the system

# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the

# traditional Unix authentication mechanisms.

#

auth sufficient pam_ldap.so

auth required pam_unix.so nullok_secure

@include common-auth

@include common-account

@include common-session

(18)

Ne pas oublier de rendre les répertoires accessibles en écriture:

Il est nécessaire de rentrer ensuite le mot de passe de l'administrateur de la base LDAP pour Samba dans /var/lib/samba/secrets.db, puis de redémarrer samba:

smbpasswd -w mot_de_passe /etc/init.d/samba restart

Inconvénient, le répertoire n'est pas directement créé par samba, il suffit donc de créer un script qui s'exécutera à la connexion de chaque utilisateur.

Création automatique des répertoires

Dans la section [homes] de /etc/samba/smb.conf, ajouter : root preexec = /travail/samba/creation.sh %U

Ensuite créer le fichier /travail/samba/creation.sh [homes]

comment = Home Directories

# browseable = no browseable = yes

# By default, the home directories are exported read-only.

Change next

# parameter to 'yes' if you want to be able to write to them.

# writable = no writable = yes

[homes]

comment = Home Directories path = /home/%U

root preexec = /travail/samba/creation.sh %U browseable = yes

writeable= yes

#!/bin/bash

#!/bin/bash

if [ ! -e /home/$1 ]; then mkdir /home/$1

chown $1 /home/$1 chmod 700 /home/$1 fi

exit 0

# passdb backend = tdbsam

passdb backend = ldapsam:ldap://162.38.134.18/

ldap admin dn = cn=admin,dc=cem2,dc=univ-montp2,dc=fr ldap suffix = dc=cem2,dc=univ-montp2,dc=fr

#ldap group suffix = ou=Groups ldap user suffix = ou=iesusers

#ldap machine suffix = ou=Machines

(19)

Donner ensuite les droits d'exécution chmod +x /travail/samba/creation.sh

Il ne reste plus qu'à essayer de copier des fichiers sur le serveur samba dont les comptes sont entièrement gérés par des scripts remplissant l'annuaire ldap.

Restauration du serveur LDAP avec gestion des comptes Samba Les répertoires indispensables au fonctionnement d'openldap sont : /etc/ldap et /var/lib/ldap.

Mais la solution idéale est de faire une sauvegarde régulière du fichier

/etc/ldap/slapd.conf et de l'annuaire par la commande slapcat, pour une procédure plus simple en cas de restauration.

Faire une sauvegarde de l'annuaire : slapcat > sauvegarde.ldif

Installer les différents paquets si ce n'est déjà fait : apt-get install slapd ldap-utils samba-doc

cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/

gunzip /etc/ldap/schema/samba.schema.gz

Avec ces commandes, les fichiers décrivant les classes d'objets sont récupérés puis installés dans le répertoire /etc/ldap/schema qui contient tous les schémas pour la description des attributs et des classes d'objets.

Ajouter dans le fichier /etc/ldap/slapd.conf la ligne suivante : include /etc/ldap/schema/samba.schema

Il est possible de copier tel quel le fichier si les versions d'openldap sont les mêmes. En cas de problèmes utiliser la commande dpkg-reconfigure slapd en faisant attention au type de base : hdb ou bdb.

/etc/init.d/slapd stop pour arrêter le service.

Editer le fichier sauvegarde.ldif pour supprimer toutes les premières entrées

principales liées à la configuration de l'annuaire. Garder toutes les informations relatives aux branches que vous avez créées.

Restaurer votre annuaire avec la commande slapadd < sauvegarde.ldif

# 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

(20)

/etc/init.d/slapd restart pour prendre en compte les modifications.

La commande slapcat permet de vérifier que la base de l'annuaire est valide et bien remplie avec les anciennes valeurs.

Remarque :

Une copie brute du répertoire entier /var/lib/ldap peut entraîner un mauvais

fonctionnement de LDAP et générer de nombreuses erreurs qui apparaissent dans le fichier /var/log/syslog.

La commande slapcat permet de vérifier que la base de l'annuaire est valide et remplie avec les anciennes valeurs.

Test de l'installation

La gestion de l'annuaire peut se faire par phpldapadmin si un serveur « web » est installé.

apt-get install phpldapadmin

Dans un navigateur taper http://adresse_ip_serveur/phpldapadmin

Entrer le nom complet de l'administrateur, ici cn=admin,dc=cem2,dc=univ- montp2,dc=fr

Puis entrer le mot de passe.

Si la connexion réussit et l'annuaire apparaît, l'installation est complète et fonctionnelle.

Vérifier malgré tout, cela dans le fichier /var/log/syslog après redémarrage de slapd.

Remarques importantes

* Dans le fichier /etc/smb.conf ne pas oublier dans la partie domains l'option domain logons = yes

Dans le cas contraire des problèmes de SID se poseront.

* Attention : Les nouvelles versions de Samba contôlent maintenant le champ

sambaAcctFlags qui indiquent le comportement du compte. Il est donc nécessaire de rajouter ce champ dans notre base annuaire pour ces versions là ! SambaAcctFlags:

[UX] (X indique que le mot de passe n'expire jamais).

Stephane.Arnal@ies.univ-montp2.fr

Références

Documents relatifs

Nous pouvons créer un fichier test qui comprend les infos de php...

Les Services de Soins Infirmiers A Domicile (SSIAD) assurent, sur prescription médicale, les soins infirmiers et d’hygiène générale et l’aide dans les actes essentiels de

Ces Structures qui prennent en charge Enfants et Adolescents se répartissent selon la nécessité ou non d’une orientation par la Commission des Droits et de l’Autonomie des

Après avoir ajouté dans l'annuaire, créer son mot de passe avec Samba : [root@pc root]# /usr/local/samba/bin/smbpasswd -a jointdomain New SMB password:. Retype new

❑ Le modèle d’information définit le type de données pouvant être stockées dans l’annuaire.. L’entrée (Entry) = élement de base

- sur le deuxième serveur de fichiers de voir si le premier est mort et dans ce cas de démarrer ses daemons Samba pour le remplacer et envoyer un mail d'alerte (sous entend que

Entry for principal host/clinux.ifsic.univ-rennes1.fr with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for

Je vous ai présenté samba, mais une machine équipée d'une distribution GNU/Linux peut aussi être serveur de messagerie (avec Postfix par exemple, sur un réseau de