Sommaire - FTP Directory Listing

Transcription

Sommaire - FTP Directory Listing
Mise en place d'un domaine Samba 2.2 avec LDAP
Ganaël LAPLANCHE - EDF R&D
V1.12, 30/04/2003 – 01-07-2003
http://www.martymac.com
Copyright (c) 2003, Ganaël LAPLANCHE - Organisation : EDF R&D
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled "GNU
Free Documentation License".
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 1/30
Sommaire
Avant-propos...............................................................................................................................................................3
I) Introduction.............................................................................................................................................................3
II) Etape 1 : Installation d'OpenLDAP...................................................................................................................4
III) Configuration de base et Test du serveur LDAP............................................................................................4
a) Configuration............................................................................................................................................................................................4
b) Premiers tests............................................................................................................................................................................................4
IV) Installation de Samba..........................................................................................................................................5
V) Préparation du système pour l'authentification via LDAP............................................................................6
a) Outils nécessaires/supplémentaires.........................................................................................................................................................6
b) Configuration avancée de LDAP............................................................................................................................................................6
c) Insertion de l'arborescence de base pour samba dans l'annuaire LDAP...............................................................................................7
d) Configuration des méthodes d'authentification du Système.................................................................................................................8
1) Configuration de Nsswitch.........................................................................................................................................................................................................................8
2) Configuration de Pam.................................................................................................................................................................................................................................8
3) Configuration générale des librairies libpam-ldap et libnss-ldap............................................................................................................................................................9
4) Configuration de smbldap-tools.................................................................................................................................................................................................................9
e) Premiers tests de connexion.....................................................................................................................................................................9
VI) Configuration de Samba...................................................................................................................................10
a) L'Impression............................................................................................................................................................................................10
b) Configurer Samba..................................................................................................................................................................................10
c) Revenons à l'impression.........................................................................................................................................................................11
d) Test : Joindre une machine au domaine................................................................................................................................................12
e) Test : Se connecter au domaine avec un utilisateur.............................................................................................................................12
f) Test : Imprimer........................................................................................................................................................................................13
VII) Etape 2 : Cas d'un serveur LDAP distant....................................................................................................14
VIII) Etape 3 : Mise en place d'un BDC...............................................................................................................15
a) Processus de montage du répertoire Home d'un utilisateur.................................................................................................................15
b) Configurons notre BDC.........................................................................................................................................................................15
c) Test : le BDC prend-il correctement le relai en cas de panne du PDC ?............................................................................................18
IX) Plus loin : La gestion des ACLs.......................................................................................................................18
a) Les ACLs au niveau du système de fichier..........................................................................................................................................19
b) Les ACLs au niveau de l'environnement..............................................................................................................................................19
c) Les ACLs au niveau de Samba..............................................................................................................................................................19
d) Tests et limites........................................................................................................................................................................................19
X) Etape 4 : Encore plus loin avec la réplication LDAP.....................................................................................20
a) Configuration côté maître......................................................................................................................................................................20
b) Configuration côté esclave....................................................................................................................................................................20
c) Quelques remarques...............................................................................................................................................................................21
d) Tolérance de panne (failover)................................................................................................................................................................21
1) La théorie..................................................................................................................................................................................................................................................21
2) La pratique................................................................................................................................................................................................................................................22
XI) Toujours plus loin : communication SSL avec notre serveur LDAP.........................................................23
a) TLS : Pourquoi ?.....................................................................................................................................................................................23
b) Les clefs et les certificats.......................................................................................................................................................................23
c) La pratique..............................................................................................................................................................................................23
1) Génération des clefs et du certificat........................................................................................................................................................................................................23
2) Mise en place côté serveur.......................................................................................................................................................................................................................24
3) Mise en place côté client..........................................................................................................................................................................................................................24
4) Testons notre connexion sécurisée..........................................................................................................................................................................................................25
5) Mise en place pour Samba.......................................................................................................................................................................................................................25
XII) Conclusion.........................................................................................................................................................26
XIII) Outils................................................................................................................................................................26
XIV) Liens / Bibliographie......................................................................................................................................26
XV) Remerciements.................................................................................................................................................26
XVI) Annexes............................................................................................................................................................27
A1) Exemple d'architecture avancée........................................................................................................................................................27
GNU Free Documentation License........................................................................................................................28
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 2/30
Avant-propos
Ce document a été réalisé durant mon stage de fins d'études à EDF R&D à Clamart. Il a pour but de présenter les différentes étapes
de l'installation de samba et OpenLDAP en émulant un domaine windows au sein d'un réseau. Il est principalement basé sur celui
d'idealx (http://samba.idealx.org/dist/samba-ldap-howto.pdf), ceux de linux mag' (numéros 40 et 46), et ma propre expérience. Il
aborde le côté "pratique", plus que théorique, et peut offrir une approche différente par rapport aux documents déjà existants pour
ceux qui sont un peu perdus. Comme tout Howto, il n'est pas exhaustif et peut contenir quelques erreurs. Il suppose également que
vous ayiez quelques connaissances de base sous Unix... Bonne lecture !
I) Introduction
Vousd le savez, Samba est un outil qui permet de gérer un domaine Windows sans machine Windows ! Il est ainsi possible de
partager des ressources Unix pour y accéder depuis une machine Windows (partage de répertoire, d'imprimante) et de gérer les
logons sur un domaine. Depuis peu, Samba permet de stocker ses utilisateurs dans un annuaire LDAP. Ceci offre un intérêt majeur :
une gestion simplifiée et centralisée des comptes Samba. Ainsi, le fichier smbpasswd, dans lequel sont habituellement stockés les
comptes utilisateurs, est complètement remplacé par des accès à l'annuaire LDAP (sauf pour le stockage du mot de passe du serveur
LDAP qui se fait toujours dans ce fichier). Les avantages d'une telle architecture sont nombreux : robustesse accrue, souplesse
d'utilisation, grande disponibilité (possibilité de remanier le pool d'utilisateurs même lorsque le PDC est en panne), etc... Nous
aurons l'occasion d'y revenir tout au long de ce document.
Nous allons voir dans un premier temps comment installer Samba 2.2 et LDAP sur la même machine, puis, par la suite, comment
décentraliser cette architecture (cf à partir de VII).
Contexte :
Nous allons passer par 4 étapes. L'étape principale est l'étape 1 et peut se suffire à elle-même. Elle sert de base aux étapes
suivantes, plus courtes, qui complètent notre étude. Voici le programme :
Etape 1 : Installation d'un PDC et d'un serveur LDAP sur la même machine
- Plateforme de test : PIII 733 Mhz, 128Mo de Ram, Debian 3.0r1, noyau 2.4.18
- Jusqu'au chapitre VII), cette machine s'appelle redpdc.martymac.com pour se nommer par la suite blueldap.martymac.com.
- Notre domaine Windows s'appelle RED
- Le nom netbios de notre machine est RED-PDC
Etape 2 : Le PDC devient machine à part et interroge notre serveur LDAP
- Plateforme LDAP : On conserve la machine de l'étape 1, cette machine s'appelle désormais blueldap.martymac.com
- Plateforme PDC : PIII 1,2 Ghz, 256Mo de Ram., Debian 3.0r1, noyau 2.4.18, cette machine s'appelle bluepdc1.martymac.com
- Notre domaine Windows s'appelle BLUE
- Le nom netbios de notre PDC est BLUE_PDC
Etape 3 : Ajout d'un BDC à notre infrastructure
- Plateforme LDAP : On conserve la machine de l'étape 1
- Plateforme PDC : On conserve la machine de l'étape 2
- Plateforme BDC : PIII 450 Ghz, 128Mo de Ram., Mandrake 9.1, noyau 2.4.21, cette machine s'appelle bluebdc1.martymac.com
- Notre domaine Windows s'appelle BLUE
- Le nom netbios de notre PDC est BLUE_BDC
Etape 4 : Ajout d'un second serveur LDAP, réplica du premier
- Ce serveur offrira une solution de secours si le premier serveur LDAP tombe en panne
Le contexte général :
- Le binddn (compte ayant le droit d'écriture) du serveur LDAP est : 'cn=Manager,dc=martymac,dc=com' et son password : 'secret'
- La base de notre arbre LDAP est 'dc=martymac,dc=com'
Nota : Nous nous intéresserons plus à la configuration des différents services qu'à leur compilation ! C'est pour ceci que, pour une
question de facilité, nous utiliserons souvent apt qui, sous GNU/Linux Debian permet d'installer rapidement les applications
voulues... Si vous utilisez les sources des programmes, il y a de fortes chances pour que les fichiers de configuration ne se trouvent
pas au même endroit ! Un “find” sera alors le bienvenu...
Essayez de lire ce document dans sa continuité, chaque étape prépare à la suivante, puisqu'on conserve certaines configurations
précédentes.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 3/30
Etape 1 : Installation d'un PDC et d'un serveur LDAP sur la même machine
II) Etape 1 : Installation d'OpenLDAP
Utilisateur
Annuaire
Ldap
+
PDC
[homes]
[profiles]
[netlogon]
Loopback
Le PDC et l'annuaire LDAP ne font qu'un
Nous allons avoir besoin de plusieurs composants :
- des librairies LDAP compilées,
- des sources de ces librairies (pour des compilations futures),
- des utilitaires d'interrogation d'annuaire
- du serveur LDAP (slapd)
L'installation de tout ceci se fait de manière très simple sous debian, via apt :
- apt-get install libldap2 libldap2-dev ldap-utils slapd
Le serveur est désormais installé, nous allons voir comment le configurer...
III) Configuration de base et Test du serveur LDAP
a) Configuration
- Editer le fichier le fichier /etc/ldap/slapd.conf pour configurer OpenLDAP :
include
include
include
include
/etc/ldap/schema/core.schema
/etc/ldap/schema/cosine.schema
/etc/ldap/schema/inetorgperson.schema
/etc/ldap/schema/nis.schema
pidfile
argsfile
/usr/local/var/slapd.pid
/usr/local/var/slapd.args
database
suffix
rootdn
rootpw
directory
ldbm
"dc=martymac,dc=com"
"cn=Manager,dc=martymac,dc=com"
secret
/var/lib/ldap
index cn
eq
Nous disposons maintenant d'une configuration suffisante pour démarrer le serveur :
- /etc/init.d/ldap start, tout devrait bien se passer...
b) Premiers tests
Nous allons essayer d'insérer quelques enregistrements dans notre base LDAP, afin de voir si tout fonctionne :
- Créer un fichier test.ldiff source :
dn: dc=martymac,dc=com
objectclass: dcObject
dc: martymac
objectclass: organization
o: martymac
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 4/30
dn: ou=personnes,dc=martymac,dc=com
objectclass: top
objectclass: organizationalUnit
ou: personnes
description: Branche personnes
Pour insérer les données du fichier :
- ldapadd -W -D 'cn=Manager,dc=martymac,dc=com' -f test.ldiff
Pour rechercher (dumper la base a partir de martymac.com) :
- ldapsearch -W -D 'cn=Manager,dc=martymac,dc=com' -b 'dc=martymac,dc=com'
- ou : ldapsearch -b 'dc=martymac,dc=com' (car dans notre cas, pas besoin d'authentification pour les recherches)
Pour effacer les données (afin de laisser une base propre pour la suite) :
- ldapdelete -W -D 'cn=Manager,dc=martymac,dc=com' 'ou=personnes,dc=martymac,dc=com'
Si tout ceci fonctionne, passons à l'installation de Samba ! Nous reviendrons plus tard à LDAP...
IV) Installation de Samba
Pour Samba, nous ne pouvons pas installer directement les packages via apt-get car nous allons avoir besoin de certaines options non
compilées par défaut. Nous allons donc recréer notre propre package Debian.
- Récupérer les sources pour debian sur samba.org
(http://de.samba.org/samba/ftp/Binary_Packages/Debian/dists/stable/main/source/samba_2.2.8a-0.1.tar.gz)
- Décompresser les sources : tar xvzf samba_2.2.8a-0.1.tar.gz
Modifier les sources Samba afin de créer un package Debian à notre convenance :
- Modifier le fichier debian/rules :
Lignes 61 et + (concernant les options du ./configure), supprimer toutes les références à pam (2), pour obtenir ceci :
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
[ -f source/Makefile ] || (cd source && ./configure \
--host=$(DEB_HOST_GNU_TYPE) \
--build=$(DEB_BUILD_GNU_TYPE) \
--with-fhs \
--prefix=/usr \
--sysconfdir=/etc \
--with-privatedir=/etc/samba \
--localstatedir=/var \
--with-netatalk \
--with-smbmount \
--with-syslog \
--with-sambabook \
--with-utmp \
--with-readline \
--with-libsmbclient \
--with-winbind \
--with-msdfs \
--with-automount \
--with-acl-support \
--with-profile \
--disable-static \
--with-ldapsam)
Lignes 130/131, commenter la référence à pam :
130
131
#install -m 0644 source/nsswitch/pam_winbind.so \
#
$(DESTDIR)/lib/security/
Ligne 141, idem :
141
#mv $(DESTDIR)/usr/bin/pam_smbpass.so $(DESTDIR)/lib/security/
Ligne 181 également :
181
#cp debian/samba.pamd $(DESTDIR)/etc/pam.d/samba
- Modifier ensuite le fichier debian/libpam-smbpass.files et supprimer la ligne concernant pam_smbpass.so (le fichier est alors vide)
- Modifier le fichier debian/samba-common.conffiles et supprimer la ligne /etc/pam.d/samba (le fichier est alors vide)
- Modifier enfin le fichier debian/winbind.files et supprimer la ligne concernant pam_winbind.so
Les sources sont prêtes pour créer les packages debian :
- Exécuter : dpkg-buildpackage dans le répertoire principal. Les packages sont compilés et copiés dans ../
- Installer les packages : dpkg -i samba-common_2.2.8a-0.1_i386.deb libsmbclient_2.2.8a-0.1_i386.deb samba_2.2.8a-0.1_i386.deb
smbclient_2.2.8a-0.1_i386.deb smbfs_2.2.8a-0.1_i386.deb swat_2.2.8a-0.1_i386.deb winbind_2.2.8a-0.1_i386.deb
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 5/30
Samba est maintenant installé, nous allons maintenant pouvoir configurer LDAP de manière plus approfondie afin de pouvoir
s'authentifier sous debian via le serveur.
V) Préparation du système pour l'authentification via LDAP
a) Outils nécessaires/supplémentaires
Il faut installer plusieurs librairies et outils pour permettre l'auhtentifiation via LDAP :
Installation de nscd : Name service cache daemon, fournit un cache pour différentes requêtes de noms, accélère les requêtes.
- apt-get install nscd
Installation de libnss-ldap : Permet d'ajouter la gestion de LDAP à nsswitch.
Nsswitch sert d'interface pour la résolution de noms de plusieurs services (les groupes utilisateurs, les noms de machines, etc...). Il
permet d'indiquer au système où chercher les informations. Il faut ici le configurer afin d'indiquer à la machine que les utilisateurs et
groupes peuvent être situés sur l'annuaire LDAP. Ceci sera utile notamment pour pouvoir effectuer des modifications de droits avec
des groupes ou utilisateurs présents dans l'annuaire LDAP (en complétant le pool d'utilisateurs et de groupes déjà présents dans les
fichiers /etc/password et /etc/group lors d'un chown, chmod, chgrp, getent...).
- apt-get install libnss-ldap
Installation de libpam-ldap : Modules LDAP pour pam
Pam sert à l'authentification des utilisateurs. Il offre aux applications une couche transparente qui permet de gérer, via des modules,
n'importe quelle méthode d'authentification (de la carte à puce, aux fichiers password, en passant par la biométrie...). Il faut lui
indiquer, dans notre cas, d'utiliser l'annuaire LDAP pour s'authentifier sur le système unix. Ceci n'est nécessaire que si l'on souhaite
pouvoir s'authentifier sur le système Unix avec les comptes LDAP. Nous allons tout de même traiter le sujet.
- apt-get install libpam-ldap
Installation de smbldap-tools : Ensemble d'outils de gestion de comptes samba sur LDAP développé par idealx
- Télécharger smbldap-tools sur idealx (http://samba.idealx.org/dist/smbldap-tools-0.7.tgz)
- Décompresser le tarball : tar xvzf smbldap-tools-0.7.tgz
- Copie des *.pl ds /usr/local/sbin
- Copie des *.pm ds /usr/share/perl/5.6.1 (à modifier suivant votre version de Perl)
Puis,
- Extraction de mkntpwd
- Editer le Makefile et ajouter au début du fichier : PREFIX=/usr/local (Pour que l'installation se fasse dans $PREFIX/sbin)
- Compilation : make && make install
Nous configurerons smbldap-tools plus tard...
b) Configuration avancée de LDAP
- Copie du fichier samba.schema (provenant du répertoire examples/ des sources de samba) dans /etc/ldap/schema/
- Edition du fichier /etc/ldap/slapd.conf et inclure ce nouveau schéma (qui apporte le support des comptes samba) pour avoir ceci :
include
include
include
include
include
/etc/ldap/schema/core.schema
/etc/ldap/schema/cosine.schema
/etc/ldap/schema/inetorgperson.schema
/etc/ldap/schema/nis.schema
/etc/ldap/schema/samba.schema
pidfile
argsfile
/usr/local/var/slapd.pid
/usr/local/var/slapd.args
database
suffix
rootdn
rootpw
directory
ldbm
"dc=martymac,dc=com"
"cn=Manager,dc=martymac,dc=com"
secret
/var/lib/ldap
index objectClass,rid,uid,uidNumber,gidNumber,memberUid
eq
index cn,mail,surname,givenname
eq,subinitial
- Edition du fichier /etc/ldap/ldap.conf, fichier servant à toutes sortes de clients utilisant LDAP, pour avoir ceci :
base dc=martymac,dc=com
host 127.0.0.1
- Redémarrage de LDAP /etc/init.d/ldap restart
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 6/30
c) Insertion de l'arborescence de base pour samba dans l'annuaire LDAP
- Création d'un fichier base.ldiff qui contient l'arborescence de base, nous ajouterons ces données à l'annuaire LDAP :
dn: dc=martymac,dc=com
objectClass: domain
dc: martymac
dn: ou=Groups,dc=martymac,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Groups
description: System Groups
dn: ou=Users,dc=martymac,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Users
description: Users of the Organization
dn: ou=Computers,dc=martymac,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Computers
description: Windows Domain Computers
dn: cn=Domain Admins,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 200
cn: Domain Admins
memberUid: administrator
description: Windows Domain Users
dn: cn=Domain Users,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 201
cn: Domain Users
description: Windows Domain Users
dn: cn=Domain Guests,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 202
cn: Domain Guests
description: Windows Domain Guests Users
dn: cn=Administrators,ou=Groups,dc=martymac,dc=com
description: Members can fully administer the computer/domain
objectClass: posixGroup
gidNumber: 220
cn: Administrators
description: Windows Domain Members can fully administer the computer/domain
dn: cn=Users,ou=Groups,dc=martymac,dc=com
description: Ordinary users
objectClass: posixGroup
gidNumber: 221
cn: Users
description: Windows Domain Ordinary users
dn: cn=Guests,ou=Groups,dc=martymac,dc=com
description: Users granted guest access to the computer/domain
objectClass: posixGroup
gidNumber: 222
cn: Guests
memberUid: nobody
description: Windows Domain Users granted guest access to the computer/domain
dn: cn=Power Users,ou=Groups,dc=martymac,dc=com
description: Members can share directories and printers
objectClass: posixGroup
gidNumber: 223
cn: Power Users
description: Windows Domain Members can share directories and printers
dn: cn=Account Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 224
cn: Account Operators
description: Windows Domain Users to manipulate users accounts
dn: cn=Server Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 225
cn: Server Operators
description: Windows Domain Server Operators
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 7/30
dn: cn=Print Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 226
cn: Print Operators
description: Windows Domain Print Operators
dn: cn=Backup Operators,ou=Groups,dc=martymac,dc=com
objectClass: posixGroup
gidNumber: 227
cn: Backup Operators
description: Windows Domain Members can bypass file security to back up files
dn: cn=Replicator,ou=Groups,dc=martymac,dc=com
description: Supports file replication in a domain
objectClass: posixGroup
gidNumber: 228
cn: Replicator
description: Windows Domain Supports file replication in a domain
- Insertion de cet arbre dans l'annuaire LDAP : ldapadd -W -D 'cn=Manager,dc=martymac,dc=com' -f base.ldiff
LDAP est maintenant prêt à recevoir nos utilisateurs, aussi bien Unix que Samba. On remarque que l'arbre comprend 3 branches
principales : Groups, Users, et Computers, destinées à stocker, respectivement : les Groupes d'utilisateurs, les Utilisateurs (reliés aux
groupes via le gid) et les Ordinateurs.
Nous allons bientôt pouvoir nous identifier via LDAP : il reste maintenant à configurer notre système pour qu'il utilise notre serveur
pour l'authentification.
d) Configuration des méthodes d'authentification du Système
1) Configuration de Nsswitch
- La configuration générale de libnss-ldap se fait via le fichier /etc/ldap/ldap.conf (cf ci-après)
Copie de /usr/share/doc/libnss-ldap/examples/nsswitch.ldap vers /etc/nsswitch.conf et modification :
passwd:
group:
shadow:
files ldap
files ldap
files ldap
hosts:
files dns
services: ldap [NOTFOUND=return] files
networks: ldap [NOTFOUND=return] files
protocols: ldap [NOTFOUND=return] files
rpc:
ldap [NOTFOUND=return] files
ethers: ldap [NOTFOUND=return] files
netmasks: files
bootparams: files
publickey: files
automount: files
aliases: files
netgroup: files nis
- Attention pour "hosts" : si vous ajoutez l'annuaire LDAP comme source de données, vous avez de grande chance de tomber sur un
problème de récursivité, où le système essaiera de résoudre le nom du serveur LDAP via le serveur LDAP... dont il n'a pas résolu le
nom !
2) Configuration de Pam
- La configuration générale de libpam-ldap se fait via le fichier /etc/ldap/ldap.conf (cf ci-après)
Modification de /etc/pam.d/system-auth (cf /usr/share/doc/libpam-ldap/examples/pam.conf)
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_ldap.so use_first_pass
auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so
account sufficient /lib/security/pam_ldap.so
password required /lib/security/pam_cracklib.so retry=3 type=
password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/pam_ldap.so use_authtok
password required /lib/security/pam_deny.so
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 8/30
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
session optional /lib/security/pam_ldap.so
- Modification de chaque fichier nécessaire (suivant les besoins) dans /etc/pam.d pour ajouter LDAP à pam (pam_ldap.so). A chaque
fichier correspond un service. Exemple avec /etc/pam.d/ssh :
auth
auth
auth
auth
sufficient
required
required
required
pam_ldap.so
pam_nologin.so
pam_unix.so
pam_env.so # [1]
account sufficient pam_ldap.so
account required pam_unix.so
session
session
session
session
session
session
sufficient
required
optional
optional
optional
required
pam_ldap.so
pam_unix.so
pam_lastlog.so # [1]
pam_motd.so # [1]
pam_mail.so standard noenv # [1]
pam_limits.so
password sufficient pam_ldap.so
password required pam_unix.so
- Installation du module pam_cracklib.so (si manquant) : apt-get install libpam-cracklib
3) Configuration générale des librairies libpam-ldap et libnss-ldap
Modification de /etc/ldap/ldap.conf (cf /usr/share/doc/libpam-ldap/examples/ldap.conf) :
BASE dc=martymac,dc=com
HOST 127.0.0.1
ldap_version 3
nss_base_passwd
nss_base_shadow
nss_base_group
dc=martymac,dc=com?sub
dc=martymac,dc=com?sub
ou=Groups,dc=martymac,dc=com?one
rootbinddn cn=Manager,dc=martymac,dc=com
pam_password md5
ssl no
- Création du fichier /etc/ldap.secret : echo "secret" > /etc/ldap.secret, contenant le mot de passe du rootbinddn pour les mises à jour
de la base.
4) Configuration de smbldap-tools
- Editer le fichier /usr/share/perl/5.6.1/smbldap_conf.pm et spécifier chaque option (n'en oubliez pas !!!)
Modification des smbldap-tools (0.7) :
Il semblerait qu'OpenLDAP, dans les versions récentes, vérifie de manière plus approfondie la hiérarchie des objets utilisés.
Lorsqu'on désire ajouter un compte machine (cf. plus loin), smbldap-tools utilise un objet posixAccount, qui n'est pas un objet
Structurel ('parent') : il s'agit d'un objet de type Auxiliaire ('fils'), ce qu'il signifie qu'il dépend d'une autre classe qui est ici account.
smbldap-tools utilise, dans ses fonctions d'ajout de comptes machines, l'objet posixAccount sans l'objet account, ce qui a pour effet le
refus de la part du serveur LDAP d'ajouter l'enregistrement à la base (cf rfc2307 - ceci ne devait pas poser problème avec les versions
antérieures de LDAP). Il faut pour ceci modifier les smbldap-tools.
- Editer /usr/share/perl/5.6.1/smbldap-tools.pm et ajouter account avant toute utilisation de posixAccount (2 fois dans le fichier)
e) Premiers tests de connexion
- Création d'un utilisateur avec smbldap-tools : smbldap-useradd.pl -m testuser1
- Modification de son mot de passe : smbldap-passwd testuser1
- On peut voir si cet utilisateur est bien connu du système : getent passwd
- Test de connexion avec cet utilisateur depuis la machine Unix : ssh -l testuser1 localhost. Normalement, tout est Ok
(Si vous êtes confronté à un problème comme : 'Authentication service cannot retrieve authentication info', cela provient
certainement de la configuration des fichiers dans /etc/pam.d. Ré-éditez ces fichiers pour ajouter le module pam_ldap.so).
- Listing du user : ldapsearch -b 'dc=martymac,dc=com'
- Suppression du user : smbldap-userdel testuser1 et effacement de son home 'bidon' sur le disque
A ce stade, nous pouvons nous authentifier sur le système via LDAP, il nous reste à installer samba et à le configurer...
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 9/30
VI) Configuration de Samba
a) L'Impression
- Installation de CUPS : Common Unix Printing System
(apt-get install cupsys cupsys-client cupsys-bsd cupsomatic-ppd cupsys-driver-gimpprint)
- Configuration de CUPS (édition de /etc/cups/printers.conf ou via http://localhost:631/admin)
Nous allons utiliser samba comme un serveur de spool uniquement, ce qui signifie qu'il ne fera aucune conversion de données, il
n'agira que comme une mémoire tampon d'impression/gestionnaire de file d'attente. En d'autres termes, il faudra que chaque client
envoie le type de données attendues par l'imprimante, et donc, dispose du driver approprié. Celui-ci sera disposé dans un partage
samba appelé print$.
- Modification de /etc/cups/mimes.types et /etc/cups/mimes.convs pour décommenter les lignes application/octet-stream en fin de
fichier. Ceci va permettre à cups de gérer l'impression 'brute' que l'on va utiliser.
- Tester cups pour voir si l'impression fonctionne.
b) Configurer Samba
- Modification du fichier /etc/samba/smb.conf :
[global]
; le nom de notre domaine
workgroup = RED
; notre nom de machine netbios
netbios name = RED-PDC
; le nom complet
server string = RED PDC Server
encrypt passwords = Yes
; Synchro pass Unix
passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u
passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
unix password sync = Yes
; Logs
log file = /var/log/samba/%m.log
log level = 2
max log size = 5000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
; Infos Domaine
; Win9x + NT PDC
domain logons = Yes
os level = 65
; Force election master browser + avantage :)
preferred master = Yes
; Master browser
domain master = Yes
; Participer aux election du local master browser
local master = Yes
dns proxy = No
; Serveur Wins actif (un seul par reseau)
wins support = Yes
security = user
; LDAP
ldap suffix = dc=martymac,dc=com
ldap admin dn = cn=Manager,dc=martymac,dc=com
ldap port = 389
ldap server = 127.0.0.1
ldap ssl = No
; Impression
load printers = yes
printing = cups
printcap name = cups
; Prise en charge du francais
character set = iso8859-1
; Ajout de machine via smbldap-tools
add user script = /usr/local/sbin/smbldap-useradd.pl -w %u
domain admin group = " @"Domain Admins" "
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 10/30
; Répertoire homes
[homes]
comment = Home Directories
valid users = %S
read only = No
create mask = 0664
directory mask = 0775
browseable = No
; Répertoire scripts
[netlogon]
comment = Network Logon Service
path = /opt/samba/netlogon
guest ok = Yes
; Répertoire de profils
[profiles]
path = /opt/samba/profiles
writeable = yes
browseable = no
create mode = 0644
directory mode = 0755
guest ok = yes
; Partage d'imprimantes
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
writable = no
guest ok = yes
public = yes
printer admin = printadmin
; Partage des drivers d'imprimantes
[print$]
comment = Printer Drivers
path = /etc/samba/drivers
browseable = yes
guest ok = no
read only = yes
write list = printadmin
; Un partage...
[tmp]
comment = Temporary file space
path = /tmp
read only = No
guest ok = Yes
; Un autre partage...
[doc]
path = /usr/share/doc
public = yes
writable = no
read only = no
create mask = 0750
guest ok = yes
- Création du répertoire /opt/samba/profiles : pour le stockage des profils
- Création du répertoire /opt/samba/netlogon : pour le stockage des scripts de connexion
- Le partage [homes] est mappé sur /home par défaut
- Changement du mot de passe de l'admin LDAP (rootdn) pour samba : smbpasswd -w secret
(création de /var/lib/samba/secrets.tdb, attention à la sécurité : fichier non chiffré !)
- Création du compte administrateur de domaine : smbldap-useradd.pl -a -m -g 200 administrator
- Mot de passe : smbldap-passwd administrator
c) Revenons à l'impression
Finissons la configuration de l'impression :
- Création du répertoire /var/spool/samba : répertoire de spool d'impression, contiendra les données en cours d'impression
- Gestion des droits sur ce répertoire : chmod 775 /var/spool/samba
- Création de /etc/samba/drivers qui contiendra nos drivers d'imprimante (partagés par print$), y copier les fichiers nécessaires
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 11/30
Créer l'utilisateur printadmin, qui sera l'administrateur du système d'impression :
- smbldap-useradd.pl -a -m -g 226 printadmin
- smbldap-passwd.pl printadmin
d) Test : Joindre une machine au domaine
- Redémarrage de samba : /etc/init.d/samba restart
- Exécution de 'testparm' pour vérifier la configuration de samba : ok
- Test du serveur samba : 'nmblookup RED-PDC' et 'smbclient -N -L RED-PDC',
Le nom netbios est normalement trouvé et les partages affichés.
Note : Pour pouvoir contacter le contrôleur de domaine, la station a trois possibilités (dans l'ordre) :
- Elle contacte le serveur Wins indiqué dans les propriétés Tcp/Ip pour obtenir des informations sur le contrôleur de domaine
- Elle recherche les informations dans le fichiers lmhosts local (C:\winnt\system32\drivers\etc\lmhosts)
- Elle broadcast sa demande
Pour effectuer la jonctions au domaine, vous avez donc le choix. Pour éviter les problèmes, je vous conseillerais plutôt d'utiliser une
station Windows sur le même réseau IP que le PDC (afin d'utiliser la méthode du broadcast), cependant, vous pouvez aussi indiquer
le serveur Wins (non testé ! - ici notre serveur Samba) en le configurant dans les propriétés Tcp/Ip du poste, ou bien encore la
méthode du fichier statique, dont voici un exemple :
#Fichier lmhosts
192.168.1.10 RED-PDC
#PRE #DOM:RED
192.168.1.10 "RED
\0x1C" #PRE
192.168.1.10 "RED
\0x1B" #PRE
Attention, le nom netbios précédant "\0x1C" ou "\0x1B" doit faire exactement 15 caractères... ("\0x1B" déclare un PDC, et "\0x1C"
un contrôleur de domaine). Pour recharger le cache netbios de notre machine Windows, il suffit ensuite d'exécuter la commande
nbtstat -R, puis pour vérifier le cache : nbtstat -c.
Pour joindre le domaine, il faut disposer d'un compte machine autorisé dans LDAP, si toutefois ceci n'était pas le cas, samba
l'ajouterait automatiquement grâce à l'option : add user script = /usr/local/sbin/smbldap-useradd.pl -w %u du fichier smb.conf.
Cependant ceci peut poser problème dans certains cas, provocant des erreurs du côté de la machine Windows. J'ai en effet été
confronté à un problème étrange : lors de la jonction au domaine, la machine est créée automatiquement, mais une erreur survient ; il
faut alors à nouveau rejoindre le domaine avec le compte machine créé pour que tout fonctionne correctement. Si l'on veut ajouter
manuellement une machine :
- smbldap-useradd.pl -w RED-CLIENT$
Si cette commande pose problème, peut-être avez-vous oublié de modifier smbldap-tools ? (cf. plus haut)
A ce stade, il n'est pas encore possible de rattacher la machine au domaine, car on ne dispose pas d'un utilisateur ayant ce droit
(uid=0, gid=0). Nous allons le créer.
- Ajout d'un utilisateur 'rootadmin' pour ajouter une machine au domaine :
- smbldap-useradd.pl -a -m -g 200 rootadmin
- smbldap-usermod.pl -u 0 -g 0 rootadmin
- smbldap-passwd.pl rootadmin
Attention à ne pas créer un utilisateur nommé 'root', pour éviter conflits avec le vrai root local !!!
La machine peut maintenant rejoindre le domaine.
e) Test : Se connecter au domaine avec un utilisateur
Si l'on ouvre une session avec 'administrator' sur le domaine, windows ne trouve pas son profil itinérant. Il s'agit d'un problème de
droits sur le répertoire /opt/samba/profiles : le groupe de l'utilisateur administrator n'a pas le droit d'écriture sur ce répertoire. Cela ne
pose pas de problème en soi, car l'administrateur de domaine ne nécessite pas de profil itinérant.
Nous allons maintenant ajouter un utilisateur au domaine :
- smbldap-useradd.pl -a -m -g 221 utilisateur
- smbldap-passwd.pl utilisateur
Cet utilisateur pourra se "logger" avec son compte sous Unix ET Windows ; si l'on veut qu'il ne puisse pas se "logger" sous Unix, il
faut préciser un home "/dev/null" et un shell "/bin/false", en le créant ainsi : smbldap-useradd.pl -d /dev/null -s /bin/false -a -m -g 221
utilisateur, ou bien tout simplement ne pas installer la gestion de LDAP pour pam sur la machine Unix.
Vérifier que son groupe ait bien le droit d'écriture sur /opt/samba/profiles :
- chown :Users /opt/samba/profiles
- chmod 775 /opt/samba/profiles (ce qui équivaut normalement à un chmod g+w /opt/samba/profiles)
Vérifier également qu'il n'ait pas trop de droits sur /opt/samba/netlogon :
- chmod 555 /opt/samba/profiles et chmod 400 sur chaque script du répertoire
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 12/30
On peut désormais se "logger" avec cet utilisateur sur le domaine :)
Note : l'utilisateur 'rootadmin' peut, lui aussi, bénéficier d'un profil car il dispose de tous les droits...
f) Test : Imprimer
- Connectez-vous sur le poste client Windows en administrateur local et ajoutez l'imprimante partagée
- Vous pouvez maintenant imprimer à partir de n'importe quel utilisateur du domaine.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 13/30
Etape 2 : Le PDC devient machine à part et interroge notre serveur LDAP
VII) Etape 2 : Cas d'un serveur LDAP distant
Utilisateur
PDC
[homes]
[profiles]
[netlogon]
Annuaire
Ldap
L'annuaire LDAP est maintenant externalisé
Nous avons vu le cas d'un serveur Samba disposant de l'annuaire LDAP localement et bouclant sur lui même. Ceci n'étant pas le but
d'un serveur LDAP (de tourner localement), oublions notre machine autonome (redpdc.martymac.com) pour la laisser en serveur
LDAP, renommons-la par la même occasion blueldap.martymac.com. Introduisons une nouvelle machine à notre réseau :
bluepdc1.martymac.com. Voici donc un résumé des étapes à suivre si l'on désire installer un PDC samba et utiliser un serveur LDAP
non plus local, mais distant. Je ne détaille pas ici les différentes étapes, elles sont identiques aux étapes décrites précédemment dans
ce document. Voici les étapes à accomplir, dans le cas d'un poste vierge, nous changeons ici le nom du domaine pour l'appeler BLUE
:
Sur la première machine (Serveur LDAP, appelé "blueldap.martymac.com") :
- Installation d'OpenLDAP (processus identique à celui déjà décrit - on peut conserver notre configuration)
Sur la deuxième machine (PDC, appelé "bluepdc1.martymac.com" - domaine : BLUE, nom netbios : BLUE_PDC) :
- Installer ldap-utils
- Installer Samba et le configurer
- Installer Smbldap-tools et les configurer
- Installer libpam-ldap (facultatif)
- Installer libnss-ldap et le configurer, ainsi que /etc/nsswitch
- Installer nscd, le démarrer
- Initialiser le password samba LDAP avec 'smbpasswd -w secret' et démarrer samba.
- Créer le user avec uid 0 et gid 0 pour l'inscription au domaine. Attention un seul utilisateur de ce type est autorisé
(à cause de l'uid ; de plus, un utilisateur ayant le gid à 0 ne peut pas joindre un domaine).
- Régler les droits sur les répertoires profiles, home et netlogon. En cas de problème lors chown/chgrp/chmod, vérifier que le système
a bien accès aux comptes LDAP. Parfois, un simple redémarrage de nscd suffit ; penser à revoir également la configuration de
nsswitch et de libnss-ldap.
Les configurations diffèrent évidemment à chaque étape au niveau des informations concernant le serveur LDAP, puisqu'il est
maintenant distant... Il est possible d'interroger l'intégralité de notre arbre LDAP (donc de tester l'accès à notre serveur) avec la
commande : ldapsearch -b 'dc=martymac,dc=com' -xh blueldap.martymac.com. Si vous avez conservé la machine de l'étape 1,
pensez à stopper Samba, afin de ne pas avoir deux PDC sur le même réseau !
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 14/30
Etape 3 : Ajout d'un BDC à notre infrastructure
VIII) Etape 3 : Mise en place d'un BDC
La mise en place d'un BDC dans notre réseau va permettre de séparer la fonction d'authentification de celle du partage de fichiers,
jusqu'alors assurée par le même poste.
Nous allons donc avoir trois serveurs distincts :
- Le serveur LDAP, qui fournira des informations sur les comptes utilisateurs,
- Le PDC, qui permettra l'authentification des utilisateurs (via des requêtes auprès du serveur LDAP) et le partage des scripts
netlogon,
- Le BDC, qui assurera deux tâches : le partage de fichiers principaux (homes, profiles) et l'authentification des utilisateurs si le PDC
tombe en panne.
Cette décentralisation permet de supprimer les points sensibles sur notre réseau, de limiter les goulets d'étranglement, et d'éviter la
synchronisation des fichiers smbpasswd entre le PDC et le BDC. Il serait même ici vivement conseillé de mettre en place un second
serveur LDAP - synchronisé avec le premier - qui prendrait le relai du premier en cas de défaillance ; mais rassurez-vous, chaque
chose en son temps, nous aborderons ce point plus loin ! Nous allons pour l'instant laisser notre serveur LDAP seul, affronter sa
destinée. Autre détail : comme vous avez pu le constater, le partage netlogon est inséparable du PDC (il est impossible de passer un
chemin UNC au niveau du fichier smb.conf ou de l'annuaire LDAP)... nous le laisserons donc sur celui-ci, ce qui ne pose pas de
problème majeur : seuls les scripts ne seront pas accessibles en cas de panne du PDC. Pour remédier à cela, plusieurs solutions
pourraient être envisagées (que l'on ne va pas mettre en oeuvre car leur intérêt n'est pas primordial) : avoir deux partages netlogon :
sur le BDC et le PDC, et monter, via NFS par exemple, les scripts du BDC sur le PDC ; seconde solution : avoir deux partages
netlogon : sur le BDC et le PDC, et synchroniser les scripts via rsync ou rcp entre le PDC et le BDC...
Voici un schéma récapitulatif de tout ceci ; laissons le partage netlogon au PDC.
a) Processus de montage du répertoire Home d'un utilisateur
2 bis
BDC
[homes]
[profiles]
3 bis
PDC
[netlogon]
4
1
2
3
Annuaire
Ldap
6
5
Utilisateur
Le BDC assure le partage des fichiers de l'utilisateur
1 : L'utilisateur demande l'authentification sur le domaine auprès du PDC
2 : Le PDC se connecte au serveur LDAP pour vérifier la validité du compte utilisateur
[2 bis] : Le BDC (si le PDC est en panne) se connecte au serveur LDAP pour vérifier la validité du compte utilisateur
3 : L'annuaire LDAP répond au PDC
[3 bis] : L'annuaire LDAP répond au BDC (si le PDC est en panne)
4 : Il autorise (ou non) l'utilisateur à accéder aux ressources du domaine
5 : Si l'utilisateur est autentifié, il peut accéder au BDC, et demander l'accès à une ressource (son Home)
6 : Le BDC lui fournit cet accès
b) Configurons notre BDC
La configuration du BDC se fait à peu près de la même manière que le PDC, à la différence des options d'élections présentes dans le
fichier smb.conf qu'il faut modifier. Le BDC doit, lui aussi, disposer d'un nsswitch modifié, ainsi que de la librairie libnss-ldap. La
base ldap-client (ldapsearch, ldapadd, etc...) peut être un plus, tout comme les smbldap-tools. Enfin, puisque l'un des buts du BDC
est de fournir les partages réseaux, on va pouvoir supprimer quasiment tous les partages au niveau du PDC pour ne laisser que la
section [global] et [netlogon]. En ce qui concerne l'authentification, nous n'aurons pas besoin de répliquer les comptes utilisateurs
puisqu'ils sont centralisés sur notre annuaire LDAP (qui contient les entrées normalement stockées dans le fichier smbpasswd).
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 15/30
Notre PDC a pour nom netbios BLUE_PDC, voici sa configuration samba (/etc/samba/smb.conf) :
[global]
workgroup = BLUE
netbios name = BLUE_PDC
server string = BLUE PDC Server
encrypt passwords = Yes
; Synchro pass Unix
passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u
passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
unix password sync = Yes
; Logs
log file = /var/log/samba/%m.log
log level = 2
max log size = 5000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
; Domaine
; Win9x + NT PDC
domain logons = Yes
os level = 65
; Force election master browser + avantage :)
preferred master = Yes
; Master browser
domain master = Yes
; Participer aux election du local master browser
local master = Yes
; Serveur Wins active (un seul par reseau)
wins support = Yes
security = user
; SAMBA-LDAP declarations
ldap suffix = dc=martymac,dc=com
ldap admin dn = cn=Manager,dc=martymac,dc=com
ldap port = 389
ldap server = blueldap.martymac.com
ldap ssl = No
; Deactivate opportunistic locks (wised)
; opLocks = False
; encoding to french
character set = iso8859-1
; using smbldap-tools to add machines
add user script = /usr/local/sbin/smbldap-useradd.pl -w %u
domain admin group = " @"Domain Admins" "
; Partages netlogon obligatoires en local
[netlogon]
path = /export/samba-test/netlogon
comment = Network Logon Service
guest ok = Yes
Voici la configuration de notre BDC, BLUE_BDC :
[global]
workgroup = BLUE
netbios name = BLUE_BDC
server string = BLUE BDC Server
encrypt passwords = Yes
; Synchro pass Unix
passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u
passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
unix password sync = Yes
; Logs
log file = /var/log/samba/%m.log
log level = 2
max log size = 5000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
; Domaine
; Win9x + NT PDC
domain logons = Yes
os level = 48
; Force election master browser + avantage :)
preferred master = No
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 16/30
; Master browser
domain master = No
; Participer aux election du local master browser
local master = No
; Serveur Wins active (un seul par reseau)
wins support = No
security = user
; SAMBA-LDAP declarations
ldap suffix = dc=martymac,dc=com
ldap admin dn = cn=Manager,dc=martymac,dc=com
ldap port = 389
ldap server = blueldap.martymac.com
ldap ssl = No
; Deactivate opportunistic locks (wised)
; opLocks = False
; encoding to french
character set = iso8859-1
; using smbldap-tools to add machines
add user script = /usr/local/sbin/smbldap-useradd.pl -w %u
domain admin group = " @"Domain Admins" "
; Répertoires homes, à mapper via \\SERVEUR\utilisateur
[homes]
path=/export/samba-test/home/%u
comment = Home Directories
valid users = %S
read only = No
create mask = 0664
directory mask = 0775
browseable = No
; Répertoires profiles, à mapper via \\SERVEUR\profiles\utilisateur
[profiles]
path = /export/samba-test/profiles
writeable = yes
browseable = no
create mode = 0644
directory mode = 0755
guest ok = yes
[tmp]
comment = Temporary file space
path = /tmp
read only = No
guest ok = Yes
[doc]
path = /usr/share/doc
public = yes
writable = no
read only = no
create mask = 0750
guest ok = yes
Le BDC offre désormais les partages auparavant assurés par le PDC. Il va donc falloir y créer les répertoires partagés génériques, (ici
/export/samba-test/home et /export/samba-test/profiles), ainsi que le répertoire home de chaque utilisateur :
Exemple pour l'utilisateur blueuser :
- mkdir /export/samba-test/home/blueuser
- chown blueuser:Users /export/samba-test/home/blueuser
- chmod 755 /export/samba-test/home/blueuser
Il faut aussi régler les droits du répertoire profiles de la même manière que pour le PDC :
- chown :Users /export/samba-test/profiles
- chmod 775 /export/samba-test/profiles
Ne pas oublier d'initialiser le password samba LDAP :
- smbpasswd -w secret
Enfin, il ne faut pas oublier de synchroniser le SID du BDC avec celui du PDC. Le SID sera stocké dans le fichier secrets.tdb, le
même qui stocke le mot de passe LDAP. Sur le BDC (le PDC doit être joignable) :
- smbpasswd -S -r BLUE_PDC
Voilà, si on démarre le PDC et le BDC, la station s'authentifiera sur le PDC et montera les partages du BDC. Si le PDC tombe en
panne, la station devrait s'authentifier sur le BDC. Effectuons quelques tests pour confirmer ceci...
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 17/30
c) Test : le BDC prend-il correctement le relai en cas de panne du PDC ?
Nous allons effectuer ces tests avec un client WinXP, appelé BLUEWKS (Blue Workstation).
Le problème majeur pour tester la validité de notre configuration est que notre machine Windows peut authentifier elle-même un
utilisateur s'il s'est déjà connecté sur le domaine à partir de celle-ci. Pour être plus clair, voici un exemple : on crée un utilisateur sous
LDAP, le PDC et le BDC sont en marche. Si on se "log" à partir de notre station Windows, tout fonctionne normalement. Coupons
maintenant le PDC et le BDC. Normalement, nous n'avons plus de DC pour nous authentifier sur le domaine... Erreur : notre station
va quand même le faire : elle a gardé l'utilisateur en cache.
Ceci offre un avantage : si le PDC et le BDC tombent en panne en même temps sur un réseau (peu probable), nous avons quand
même la possibilité d'utiliser la station. L'inconvénient est que des problèmes de sécurité peuvent se poser... Quels sont-ils ? Tout
simplement la non-concordance des bases d'utilisateurs. Imaginons qu'un utilisateur soit supprimé de la base LDAP après que le
PDC et le BDC soient tombés en panne, l'utilisateur peut toujours se connecter à la station tandis qu'il a normalement été rayé de la
liste des utilisateurs valides !
Maintenant que nous savons à quoi nous en tenir, testons un peu notre configuration...
- PDC et BDC démarrés
- Création d'un utilisateur sous LDAP
- On peut se connecter avec l'utilisateur, on dispose des scripts netlogon (ceci est normal, ils sont sur le PDC)
- Extinction du PDC
- On peut se connecter avec l'utilisateur, on ne dispose plus des scripts netlogon (ceci est normal, il n'y en a pas sur le BDC)
Problème : a-t-on bien été identifiés pas le BDC ? Ne serait-ce pas la machine Windows qui l'aurait fait (car si on éteint le BDC, on
observe ici le même résultat : je vous assure que c'est bluffant) ? Voyons ceci, continuons...
- Supprimons l'utilisateur sous LDAP
- On ne peut plus se connecter avec l'utilisateur... C'est bien le BDC qui nous a authentifié
Si cela n'est pas le cas, c'est que c'est votre machine Windows qui vous a authentifié, on en revient au problème cité ci-dessus : elle
n'est pas synchronisée avec LDAP et ne sait donc pas que l'utilisateur a été supprimé. Par contre, le BDC, lui, interroge constamment
l'annuaire, donc si votre machine passe par lui pour l'authentification, vous êtes refusé, ce qui se passe ici.
La suppression d'un utilisateur permet de manière flagrante de savoir si la machine Windows fait appel ou non à un contrôleur de
domaine pour s'authentifier. Dès qu'un contôleur de domaine est en marche, tous les problèmes d'incohérence concernant les
utilisateurs disparaissent. Si on les éteint puis que l'on supprime ou que l'on ajoute des utilisateurs, la machine reste en "solo" et
conserve ses anciennes données pour l'authentification. D'où une impossibilité de se connecter alors qu'un utilisateur existe et
inversement.
Le BDC a bien pris le relai du PDC tombé en panne... Mais lors de la reprise de celui-ci, que se passe-t-il ? Continuons notre test...
- Le PDC est toujours éteint et le BDC allumé
- Création d'un utilisateur sous LDAP
- On peut se connecter avec l'utilisateur, mais pas de scripts netlogon (ce qui correspond bien à notre BDC)
- Démarrage du PDC
- On peut se connecter avec l'utilisateur, avec scripts netlogon, le PDC a bien pris le dessus sur notre BDC
La présence ou non de scripts netlogon nous permet de savoir ici quel est le DC qui nous a authentifié. Ceci est valable dans notre
cas car seul le PDC possède le partage netlogon...
En cas de panique, si rien ne fonctionne, n'oubliez pas que les logs sont une source d'information très importante (généralement dans
/var/log/samba), n'hésitez pas à les consulter ! Les tests que je vous présente ici permettent de se faire rapidement une idée de ce qui
se passe mais ne remplacent pas les informations détaillées contenues dans ces précieux fichiers !!! Pensez également à vous assurer
que les SID de domaines sont bien synchronisés entre le PDC et le BDC avec la commande smbpasswd -S -r BLUE_PDC (à
exécuter sur le BDC), si ce n'est pas le cas, vous risquez de vous arracher les cheveux, le BDC refusant de prendre le relai du PDC,
mais recevant quand même la demande de la machine Windows... attendez vous à des heures de recherche (je suis passé par là...) !
IX) Plus loin : La gestion des ACLs
Cette partie est assez généraliste et peut concerner indifféremment le PDC, le BDC ou les deux... ! A vous de voir, selon vos
besoins... Dans mon cas, les deux serveurs en bénéficient !
Les ACLs offrent une grande souplesse dans la gestion des droits des utilisateurs. Alors que les droits POSIX définissent une liste de
3 acteurs : User/Group/Others (utilisateur/groupe/tous les autres) intéragissant avec le système de fichier, les ACLs permettent d'en
ajouter à son gré parmi la liste des utilisateurs/groupes existants. On ne va pas revenir sur le débat "ACLs vs POSIX", mais sachez
qu'il est vrai que l'on peut gérer des droits très fins en ayant pour sa disposition les droits POSIX (en jouant avec la création de
groupes), comme il est vrai que cela peut être au prix d'une perte certaine de vos attributs capillaires !
Intégrer les ACLs se fait à trois niveaux : au niveau du système de fichier, tout d'abord, ensuite à celui de l'environnement, enfin au
niveau de Samba. Nous allons procéder par étapes...
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 18/30
a) Les ACLs au niveau du système de fichier
Il convient tout d'abord de bien choisir son système de fichier. Il faut qu'il supporte les ACLs, évidemment. Parmi les systèmes de
fichiers, nous avons à notre disposition XFS, EXT2 (patch kernel), EXT3 (patch kernel)... Pour ma part, j'ai choisi d'utiliser XFS, car
c'est le seul à supporter les ACLs en natif, et il offre de bonnes performances. Il faut généralement recompiler le noyau de la
ditribution GNU/Linux pour bénéficier des ACLs, je vous passe les détails de cette opération, ceci étant une autre histoire...
Note : Les ACLs pour XFS ont été oubliées pour le noyau de la Mandrake 9.1,
cf. : http://qa.mandrakesoft.com/show_bug.cgi?id=3615
b) Les ACLs au niveau de l'environnement
Il faut aussi que les binaires utilisés quotidiennement supportent les ACLs et que notre machine soit prête à compiler des applications
supportant les acls, il faut donc encore installer quelques packages... libacl1, libacl1-dev, acl, libattr1, libattr1-dev, attr, libxfs1,
xfslibs-dev, xfsdump et xfsprogs. En utilisant apt, cela se fait très rapidement.
Une fois tout ceci effectué (noyau/modules, packages...), nous allons tester si le FS supporte les acls :
- touch document.txt
- setfacl -m u:utilisateur:rw document.txt
(il faut évidemment que l'utilisateur 'utilisateur' existe :))
- getfacl document.txt
Si vous n'avez pas eu de message d'erreur comme 'Operation not supported' lors du setfacl et si vous retrouvez bien votre ACL lors
du getfacl, c'est que vous avez bien tout installé et que ça marche, passons maintenant à la partie Samba...
c) Les ACLs au niveau de Samba
Votre FS supporte les ACLs, votre système aussi... Il reste à demander à Samba de les gérer... Si vous avez compilé Samba avec les
options décrites dans le IV) de ce document, vous avez intégré les ACLs. Sinon, il faut recommencer... L'option intéressante ici est '-with-acl-support'.
La deuxième (et dernière chose) à effectuer pour le support des ACLs sous Samba est de mettre 'nt acl support' à 'Yes' dans la section
[global] ou celle du partage dans le fichier smb.conf. Notez que cette option est par défaut à Yes, mais par souci de propreté, mieux
vaut la spécifier...
d) Tests et limites
Je ne vais pas détailler toutes les procédures de tests, elles sont relativement simples. Vous pouvez, pour vous faire rapidement une
idée du bon fonctionnement de votre configuration, créer deux utilisateurs et vous amuser à changer leurs droits.
J'ai effectué pour ma part quelques tests plus approfondis et ai remarqué quelques détails :
- Les ACLs se limitent aux droits POSIX seulement (rwx)
- Seul le propriétaire peut modifier les droits du fichier
- Les refus explicites ne sont pas gérés
- Si un utilisateur n'a pas le droit d'écriture sur un fichier, il peut tout de même en changer le nom ou le supprimer (!!!)
- Comme d'habitude, les droits de l'utilisateur prévalent sur les droits du groupe
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 19/30
Etape 4 : Ajout d'un second serveur LDAP, réplica du premier
X) Etape 4 : Encore plus loin avec la réplication LDAP
Prise de relai si Pdc
en panne
PDC
[netlogon]
BDC
[homes]
[profiles]
Gestion
Failover
Utilisateur
Annuaire
Ldap
Maître
Réplication
Annuaire
Ldap
Esclave
Un second annuaire LDAP prend le relai si le premier tombé en panne
On remarque une chose importante dans notre architecture : la gestion du failover se fait au niveau des PDC/BDC : si le PDC tombe
en panne, le BDC prend correctement le relai. Cependant, que se passe-t-il si c'est le serveur LDAP qui tombe en panne ? Là se situe
un gros problème : nous n'avons plus accès à notre base d'utilisateurs, personne ne peut plus s'authentifier... Nous allons voir
comment mettre en place un système de réplication qui permettrait la redondance d'information en cas de panne du serveur LDAP.
La mise en place d'un tel système est très simple : le serveur maître va se mettre à l'écoute de chaque modification apportée à la base
et les renvoyer au serveur LDAP esclave qui mettra la sienne à jour, afin de la garder "up-to-date". Ceci se fait grâce au démon
slurpd, côté maître : c'est lui qui se connectera au démon slapd de l'escalve pour mettre la base de ce dernier à jour. Je passe
l'installation d'OpenLDAP côté esclave, vous devez commencer à connaître... Passons directement à la configuration !
a) Configuration côté maître
Il suffit de déclarer le réplica, un nouveau poste que nous appellerons blueldap_backup.martymac.com et le fichier "replog" dans
lequel les changements à la base seront répertoriés. Ce fichier sera lu par slurpd qui se connectera au serveur LDAP esclave pour
modifier sa base. Modification du fichier slapd.conf :
replogfile /var/lib/ldap/replog
replica host=blueldap_backup.martymac.com:389
binddn="cn=Manager,dc=martymac,dc=com"
bindmethod=simple
credentials="secret"
b) Configuration côté esclave
Déclaration du DN autorisé à répliquer sa base et du serveur maître auquel se reporter en cas de demande de modification des
données. Ceci se fait via le fichier slapd.conf du serveur esclave blueldap_backup.martymac.com :
updatedn "cn=Manager,dc=martymac,dc=com"
updateref "ldap://blueldap.martymac.com"
C'est tout ce qu'il y a à faire concernant la configuration de nos serveurs LDAP. Il reste à lancer le démon slurpd sur le serveur maître
(en plus du démon slapd, évidemment...). Il faudra ajouter à ceci un mécanisme de failover (ou de partage de charges, ou les deux,
suivant les besoins) ! Un mécanisme d'IP virtuelle pourrait facilement s'en charger, approfondissons un peu le sujet après quelques
remarques...
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 20/30
c) Quelques remarques
Les explications ci-dessus sont valables pour une base vierge, car slurpd n'envoie au serveur LDAP esclave que les modifications
apportées à la base. Si votre base contient déjà des informations, suivez cette manipulation, sur le serveur maître :
- Dumpez la base dans un fichier : ldapsearch -b 'dc=martymac,dc=com' -xh blueldap.martymac.com > dump.ldiff
- Supprimez dans ce fichier les quelques lignes de fin contenant les informations globales sur la recherche
- Eteignez slapd et slurpd
- "Backupez" vos fichiers de base situeés dans /var/lib/ldap : tar cvzf /tmp/ldap.back.tgz /var/lib/ldap
- Supprimez les fichiers de la base : rm -rf /var/lib/ldap/*
- Démarrez les démons slapd et slurpd
- Enfin, insérez le contenu du fichier de dump : ldapadd -W -D 'cn=Manager,dc=martymac,dc=com' -f dump.ldiff
- Vous devriez retrouver votre base initiale sur le serveur maître ET sur le serveur esclave qui aura reçu les mises à jour.
Notes :
- Il est possible d'ajouter/supprimer un enregistrement dans une base esclave, cependant, cet événement ne sera pas toujours reporté
dans la base maître. Ceci dépend de la directive updateref qui redirige les requêtes de modification vers le serveur LDAP maître.
Attention, donc, aux incohérences dans le cas d'une mauvaise configuration...
- Nous avons ici dumpé la base avec ldap-search, mais il est également possible d'utiliser slapcat, ou de simplement copier les
fichiers de données situés dans /var/lib/ldap !
d) Tolérance de panne (failover)
1) La théorie
Nous avons vu comment implémenter des serveurs LDAP redondants, mais comment faire pour interroger l'un ou l'autre en fonction
de leur état ? Avoir des serveurs disposant des même informations mais ne pas pouvoir interroger le serveur B si le serveur A tombe
en panne ne serait d'aucune utilité : il faut mettre en place un système de tolérance de panne.
La méthode que nous allons étudier est très simple : elle consiste à passer par une addresse IP virtuelle. Chaque serveur LDAP
possède sa propre adresse IP, mais en possède aussi une seconde qui sera commune à tous les serveurs redondants (un "alias"). Les
serveurs demeurent acessibles via leur "vraie" adresse IP, mais le sont désormais aussi par leur nouvelle adresse. Côté client
(Samba), nous interrogerons la base LDAP via l'adresse IP virtuelle commune (et non la "vraie" adresse). Le passage d'un serveur à
l'autre se fera par une modification de la table de routage du poste client, ceci de manière totalement transparente pour l'application :
si le premier serveur tombe en panne, les données sont immédiatement redirigées vers le second.
Nous abordons là la partie la plus difficile du sujet : la détection de la panne et la remontée d'information. Ceci peut se faire via un
protocole de routage mais nous nous contenterons ici d'un script qui testera en permanence l'état des serveurs et qui modifiera la
table de routage, méthode simple à mettre en place et facilement contrôlable.
Il existe bien d'autres méthodes de tolérance de panne, notamment le NAT (Network Address Translation) ou le routage dynamique
(via l'utilisation d'un protocole de routage), mais elles impliquent souvent un matériel intermédiaire (routeur ou ordinateur). Le
principe général reste cependant le même que celui que nous allons appliquer ici : rendre la panne transparente au client par un
mécanisme de sélection du chemin. La solution que nous avons choisie est peu onéreuse : aucun matériel supplémentaire n'est
nécessaire ; elle n'est cependant pas conseillée dans un environnement de production !
Quelques concepts à respecter :
- Il faut forcer le client à consulter sa table de routage pour sélectionner le chemin que les packets doivent prendre. En d'autres
termes, l'adresse IP virtuelle ne doit pas être sur le même sous-réseau IP que le client. En effet, si le serveur distant est sur le même
sous-réseau que le client, les packets pourront être acheminés sans passer par une machine tierce (routeur), ce qui, dans notre cas, ne
nous intéresse pas. Pour sélectionner notre chemin, nous allons donc indiquer au client que l'adresse IP virtuelle (non joignale) peut
être contactée en utilisant une passerelle qui n'est autre que la "vraie" adresse IP du serveur LDAP à contacter. Celui-ci se chargera
de la transmission des packets à son interface virtuelle. Voilà comment nous allons sélectionner nous même le "bon" serveur LDAP.
- L'utilisation de nos serveurs LDAP comme gateways implique aussi que leurs interfaces soit dans le même sous-réseau IP que le
client.
En résumé :
Sur le PDC samba :
- Configuration de Samba et des services clients LDAP pour interroger le serveur LDAP via son adresse IP virtuelle
- Sa table de routage lui indiquera par où passer pour atteindre l'adresse IP virtuelle du serveur LDAP.
- Modification dynamique de sa table de routage, via un script, en fonction de l'état des serveurs
Sur les serveurs LDAP :
- Adresse IP dans le même sous-réseau que le client (pour servir de gateway)
- Ajout d'une interface virtuelle ayant une adresse IP commune à tous les serveurs redondants, mais appartenant à un sous-réseau
différent (pour forcer le routage)
- Réplication des données de l'annuaire
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 21/30
2) La pratique
Script shell
Scrute l'état des serveurs
Modifie
Serveurs Ok ?
LDAP 1
(maître)
IP : 192.168.1.10/24
VIP : 192.168.2.1/24
PDC
Samba
IP : 192.168.1.5/24
Table de routage du PDC Samba :
"Pour atteindre 192.168.2.1/24,
passe par 192.168.1.10/24"
Réplication
Connexion
vers LDAP1
ou LDAP2
LDAP 2
(esclave)
IP : 192.168.1.15/24
VIP : 192.168.2.1/24
Schéma d'une connexion à l'aide d'une méthode de tolérance de panne (V.IP.)
Configuration des serveurs LDAP :
- On considère que les problèmes de réplication sont déjà réglés (cf. précédemment dans ce document).
- Ajouter une adresse IP virtuelle à chacun des répliquas : ifconfig eth0:1 192.168.2.1 netmask 255.255.255.0
Configuration du client Samba (PDC, BDC) :
- Configurer Samba et les clients LDAP (libnss, libpam, ...) pour qu'ils interrogent le serveur LDAP via l'adresse IP virtuelle.
Si vous passez par un nom de machine, ceci revient juste à changer l'adresse IP associée au nom d'hôte (au niveau du serveur DNS
ou du fichier hosts), sinon, changez l'adresse IP directement.
- Créer et exécuter le script de scrutage des serveurs qui modifiera la table de routage : voici un exemple de script :
#!/bin/sh
# Script scrutant IP1 et IP2, et modifiant la table de routage
# en fonction de l'état des machines. Necessite nmap.
# Ganaël LAPLANCHE
# IP virtuelle du groupe de serveurs
VIP="192.168.2.1"
# Interface de sortie de notre client
IFACE="eth0"
# Premier serveur
IP1="192.168.1.10"
METRIC1="0"
# Deuxième serveur
IP2=" 192.168.1.15"
METRIC2="5"
# Tests a effectuer
# Port distant
TESTPORT="389"
# Nom du service
TESTSERV="ldap"
# Protocole
TESTPROTO="tcp"
# Attente entre chaque boucle
WAIT="5"
while true; do
echo "[Test de ${IP1}]"
nmap -sT ${IP1} -p ${TESTPORT} | grep "${TESTPORT}/${TESTPROTO}[ ]*open[ ]*${TESTSERV}"> /dev/null
if [ $? -eq 0 ]; then
route add -host ${VIP} metric ${METRIC1} gw ${IP1} dev ${IFACE} > /dev/null
echo "${IP1} -- Ok : routage pour ${VIP}, metrique ${METRIC1}"
else
route del -host ${VIP} metric ${METRIC1} gw ${IP1} dev ${IFACE} > /dev/null
echo "${IP1} !Ok : stop routage"
fi
echo "[Test de ${IP2}]"
nmap -sT ${IP2} -p ${TESTPORT} | grep "${TESTPORT}/${TESTPROTO}[ ]*open[ ]*${TESTSERV}"> /dev/null
if [ $? -eq 0 ]; then
route add -host ${VIP} metric ${METRIC2} gw ${IP2} dev ${IFACE} > /dev/null
echo "${IP2} -- Ok : routage pour ${VIP}, metrique ${METRIC2}"
else
route del -host ${VIP} metric ${METRIC2} gw ${IP2} dev ${IFACE} > /dev/null
echo "${IP2} !Ok : stop routage"
fi
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 22/30
sleep ${WAIT}
echo "-------------------------"
done
exit 0
Ce script très simple utilise nmap pour tester si le port 389 (LDAP) des serveurs est bien à l'écoute. Si c'est le cas, il inscrit les deux
routes, mais avec des métriques différentes ; celle qui a la plus petite métrique est alors utilisée. Si l'un ou l'autre des serveurs vient à
tomber en panne (réseau ou serveur LDAP), la route est supprimée, ce qui a pour effet de rendre l'autre route active : l'autre serveur
prend le relais.
XI) Toujours plus loin : communication SSL avec notre serveur LDAP
a) TLS : Pourquoi ?
Vous le savez peut-être, mais par défaut, les communications avec notre serveur LDAP se font en clair. Il suffit de "sniffer" le réseau
(non switché) pour s'en rendre compte. Une personne mal intentionnée pourrait donc intercepter toutes les informations qu'il désire, y
compris les mots de passe de nos utilisateurs (même chiffrés, ceux-ci sont précieux... On trouve de nombreux outils pour les
"casser"...) ! Une manière simple de sécuriser nos transactions est de passer par TLS (Transport Layer Security, anciennement
SSLv3.0, renommé et normalisé par l'IETF, cf. RFC2246), qui assurera le chiffrement des données.
Je ne vais pas rentrer dans les détails d'une communication via TLS, ceci dépasserait le cadre du sujet. Sachez simplement que TLS
repose sur la couche 4 (Transport) du modèle OSI, ce qui lui permet de sécuriser les communications réseau de manière transparente
pour les applications. Il repose sur l'utilisation de clefs symétriques et asymétriques, et introduit la notion de certificat délivré par un
tiers, qui assure alors l'authenticité des clefs. Je vous vois soupirer, allez, encore une dernière explication avant la pratique...
b) Les clefs et les certificats
Vous le savez sans doute, une paire de clefs est composée d'une clef privée et d'une clef publique. Elles ont la particularité d'être
inséparables, car ce que chiffre l'une, l'autre peut la déchiffrer. Voilà pourquoi on parle de clefs asymétriques. La clef privée est
destinée à être gardée précieusement par son propriétaire, alors que la clef publique pourra être diffusée. Le principe général consiste
alors à chiffrer les données avec la clef publique du destinataire afin qu'il puisse la déchiffrer avec sa clef privée et être ainsi le seul à
pouvoir comprendre le message.
Le certificat vient juste introduire la notion d'authenticité des clefs. Comment être sûr qu'une clef publique est bien celle de la
personne à qui l'on veut envoyer des données ? Le certificat nous offre une réponse : une société tierce (de confiance, une autorité de
certification : CA) va certifier que la clef publique appartient bien à cette personne. Ainsi, plus de doute, la clef est la bonne... nous
évitons ainsi de nous faire piéger par une personne qui voudrait intercepter nos données (le fameux "homme du milieu")...
c) La pratique
Nous allons implémenter TLS sur notre serveur LDAP maître. Ne vous inquiétez pas, l'implémentation de TLS ajoute juste une
commande de type STARTTLS qui permet, si on le désire, de démarrer une transaction sécurisée sur le port standard LDAP. Il
restera toujours possible de communiquer "en clair" avec notre serveur. OpenLDAP doit être compilé avec l'option --with-tls et
OpenSSL doit être installé.
Dans la pratique, la mise en place de TLS se traduit par trois étapes :
- La génération des clefs/certificats côté serveur
- La mise en place de TLS côté serveur
- La mise en place de TLS côté client
1) Génération des clefs et du certificat
Nous allons dans cette étape préparer notre serveur à l'utilisation de TLS. Il va falloir générer notre paire de clefs et faire signer notre
clef publique par une Autorité de Certification. Vous devez disposer d'OpenSSL.
Dans le répertoire /etc/ldap, créer un répertoire 'cert' qui contiendra les clefs et le certificat :
mkdir /etc/ldap/cert
Dans ce répertoire, générez la clef privée du serveur :
openssl genrsa -out serverkey.pem 1024
Puis la clef publique et la demande de certificat (dans cert.req) :
openssl req -new -key serverkey.pem -out servercert.req
Complétez correctement les informations qui vous sont demandées. Pensez à bien renseigner le CN (Common Name) par le FQDN
(nom dns) de votre serveur, celui qui sera utilisé lors de l'interrogation de la base LDAP par les clients.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 23/30
Pour l'étape suivante, vous avez le choix, soit vous envoyez la demande de certificat à une CA reconnue qui vous enverra le
certificat, soit vous certifiez vous-même votre clef en vous faisant passer pour une CA. Nous allons voir comment faire...
Mettons nous dans le peau d'une CA. Générez la clef privée de la CA :
openssl genrsa -out cakey.pem 1024
Puis son certificat propre (qui est alors autocertifié : on ne fait pas appel à une autre CA) :
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365
La encore, complétez correctement les champs demandés. N'oubliez pas que vous êtes la CA...
Enfin, signature par la CA de la clef publique de notre serveur :
openssl x509 -req -in servercert.req -out servercert.pem -CA cacert.pem -CAkey cakey.pem -days 365 -CAcreateserial
Suppression des fichiers temporaires :
rm *.req
rm *.srl
Suppression de la clef privée de la CA :
rm cakey.pem
Réglage des droits :
La clef privée ne doit pouvoir être lue que par root :
chown root:root serverkey.pem ; chmod 400 serverkey.pem
Voilà, vous disposez désormais des fichiers nécessaires pour mettre en place TLS sur le serveur. Nous allons voir les modifications à
apporter dans le fichier slapd.conf...
2) Mise en place côté serveur
Modifier /etc/ldap/slapd.conf et ajouter les chemins vers les différentes clefs et le certificat :
# TLS
# Chemin vers le certificat du serveur LDAP
TLSCertificateFile
/etc/ldap/cert/servercert.pem
# Chemin vers la clef privée du serveur LDAP
TLSCertificateKeyFile /etc/ldap/cert/serverkey.pem
# Chemin vers le certificat de la CA
TLSCACertificateFile /etc/ldap/cert/cacert.pem
Attention de bien ajouter ceci dans la section globale.
Si vous redémarrez votre serveur LDAP, il devrait désormais être de capable de communiquer avec TLS. Cette communication se
fera sur le port 389 (standard, port LDAP) via la commande starttls qui activera la transaction sécurisée. Attention, ceci est différent
d'une communication "purement" SSL, qui pourrait être mise en place sur le port LDAPS (636) via un tunnel SSL.
3) Mise en place côté client
Nous allons mettre en place TLS au niveau du PDC. Inspirez-vous de cet exemple pour le BDC, il s'agit de la même démarche...
La configuration des outils LDAP, de libnss-ldap et de libpam-ldap se fait, comme d'habitude, via le fichier ldap.conf. N'hésitez pas,
pour libnss-ldap et libpam-ldap, à consulter le fichier exemple fourni dans les tarball disponibles sur le site http://www.padl.com.
Pour autoriser les communications TLS, il faut modifier le fichier ldap.conf. Deux types de directives existent : les directives
OpenLDAP pures et les directives ajoutées par libpam_ldap et libnss_ldap. Elles sont supplémentaires, l'oubli de l'une ou l'autre fera
que l'application qui l'utilise ne fonctionnera pas. Ceci peut conduire à des erreurs difficiles à diagnostiquer ! Ajoutez ceci au fichier
ldap.conf du PDC :
#Directive SSL OpenSSL (pour ldapsearch notamment)
TLS_CACERT /etc/ldap/cert/cacert.pem
#Directives SSL libnss et libpam
# Activation SSL brute (port 636)
# ssl yes
# Acivation SSL via commande starttls (port standard 389)
ssl start_tls
#Verifie certificat serveur
tls_checkpeer yes
# Emplacement certificat CA
tls_cacertfile /etc/ldap/cert/cacert.pem
Le fichier 'cacert' doit être présent sur notre disque. Il s'agit du certificat de la CA. Il convient de le copier au bon endroit (ici
/etc/ldap/cert/) depuis notre serveur LDAP.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 24/30
4) Testons notre connexion sécurisée
Testons d'abord si les outils clients OpenLDAP fonctionnent :
ldapsearch -b 'dc=martymac,dc=com' -ZZ -xh blueldap.martymac.com
L'ajout de -ZZ force la communication en TLS. Vous devriez voir apparaître l'arborescence que nous avions déjà auparavant. Si vous
avez une erreur, vérifiez bien que le nom du serveur utilisé pour la requête est bien le nom passé dans le CN lors de la demande de
certificat du serveur !
Testons ensuite la bonne configuration de libnss-ldap : exécutons 'getent passwd' et voir si nos utilisateurs LDAP sont bien listés...
Si tout cela fonctionne, c'est déjà un bon point, cependant, est-ce bien chiffré ? Pour s'en assurer, nous allons sniffer (écouter) le
réseau avec tcpdump :
Sur le serveur LDAP, on écoute les connexions provenant de notre PDC :
tcpdump -s0 -xX ip host bluepdc1.martymac.com and host blueldap.martymac.com
Sur le BDC, on rapatrie les entrées utilisateurs avec :
getent passwd ou ldapsearch -b 'dc=martymac,dc=com' -ZZ -xh blueldap.martymac.com
Le PDC va contacter le serveur LDAP pour y lire les informations nécessaires. On voit alors plusieurs segments TCP affichés avec
tcpdump, mais rien n'est compréhensible... Si l'on réitère l'opération en commentant les lignes concernant la configurationn SSL, on
pourra distinguer les informations rapatriées par notre PDC, la preuve que le flux de données est bien chiffré !
5) Mise en place pour Samba
Le but de tout ceci étant de pouvoir intégrer TLS aux communications entre Samba et notre serveur LDAP, terminons ce chapitre en
voyant comment modifier le fichier smb.conf du PDC :
; SAMBA-LDAP declarations
ldap suffix = dc=martymac,dc=com
ldap admin dn = cn=Manager,dc=martymac,dc=com
; Attention ! Comme d'habitude, il faut utiliser le nom de serveur donné en tant que CN pour le certificat
ldap server = blueldap.martymac.com
; ldap ssl = No
ldap ssl = start_tls
ldap port = 389
Il suffit de rajouter une ligne à notre configuration précédente : 'ldap ssl = start_tls'. N'oubliez également pas de préciser le port sur
lequel samba devra se connecter. Ici, le port est le port 389, puisque l'on utilisera la commande 'starttls' sur une connexion LDAP
standard. Notez qu'il s'agit du port par défaut pour une connexion de type 'starttls', mais autant le spécifier pour en être sûr. Vérifiez
enfin que le nom de serveur passé pour la directive 'ldap server' correspond bien au CN utilisé lors de la génération du certificat du
serveur LDAP ! Si vous oubliez ce petit détail, samba ne pourra pas établir la connexion TLS et votre fichier de "log" vous indiquera
: "TLS: can't connect", message qui n'est pas très explicite, vous êtes prévenus...
Pour vérifier que ceci fonctionne, "loggez" vous à partir de votre machine cliente Windows et, au choix : sniffez les connexions entre
le serveur LDAP et le PDC (cf. ci-avant), ou bien examinez le fichier de log concernant la machine cliente généré par Samba, vous
pourrez lire, si tout se passe bien : "StartTLS issued: using a TLS connection" !
N'hésitez pas à configurer tous vos clients/serveurs pour passer par TLS... Cela permet de manière simple de sécuriser (un peu) vos
communications.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 25/30
XII) Conclusion
Ce document touche à sa fin. J'espère qu'il vous a éclairé sur les différentes étapes à suivre pour installer et configurer Samba 2.2 +
LDAP.
Il n'a pas la vocation (ni la prétention !) d'etre exhaustif... donc si vous avez des questions, des commentaires, des informations
supplémentaires ou si vous avez remarqué des erreurs, n'hésitez pas à me contacter à [email protected] !
Merci d'avoir parcouru ce Howto et Bonne chance !
XIII) Outils
Voici une petite liste d'outils très utiles :
Outils pour administrer LDAP :
- directory-administrator, basé sur qt
- gq, basé sur gtk
Outils pour administrer samba/ldap :
- smbldap-tools d'idealx, scripts Perl permettant d'administrer en ligne de commande des comptes Samba stockés sur LDAP
- idxldapaccounts d'idealx, module permettant d'administrer, via webmin, des comptes Samba stockés sur LDAP
XIV) Liens / Bibliographie
Softs :
http://www.openldap.org
http://www.samba.org
http://www.padl.com
Utilitaires :
http://samba.idealx.org
http://webmin.idealx.org
Howtos :
http://samba.idealx.org/dist/samba-ldap-howto.pdf
http://de.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
http://us3.samba.org/samba/ftp/docs/htmldocs/Samba-LDAP-HOWTO.html
http://us3.samba.org/samba/ftp/docs/htmldocs/Samba-BDC-HOWTO.html
http://www.unav.es/cti/ldap-smb/ldap-smb-2_2-howto.html
http://www.linuxmafia.com/~rick/lecture-notes/ldap
Tldp :
http://www.tldp.org/HOWTO/LDAP-Implementation-HOWTO/
Livres :
Linux mag' numéro 40 (p.37) et 46 (p.32)
Liste de diffusion Samba-fr :
http://listes.ujf-grenoble.fr/wws/info/samba-fr
XV) Remerciements
Ce document a été régidé au sein d'EDF R&D à Clamart. Merci à toute l'équipe et tout particulièrement à Vincent Gayrard, David
Lacoste, et Xavier Lemesle pour leur soutien et l'aide qu'ils ont su m'apporter !
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 26/30
XVI) Annexes
A1) Exemple d'architecture avancée
Voici un exemple d'architecture intégrant les différentes technologies que nous avons étudiées :
Ldap
Maître
Ldap
Esclave
1
Réplication
+ Tls
Wan
Pdc 3
[netlogon]
Réplication
+ Tls
Gestion
Failover
(V.IP)
Pdc 1
[netlogon]
Pdc 2
[netlogon]
Bdc 1
[homes]
[profiles]
Bdc 2
[homes]
[profiles]
Domaine 1
Ldap
Esclave
2
Réplication
+ Tls
Loopback ou distant
+ Tls
Ldap
Esclave
3
Ldap
Esclave
4
Loopback ou distant
+ Tls
Bdc 3
[homes]
[profiles]
suivant
utilisateur
Domaine 2
Site physique 1
Loopback ou distant
+ Tls
Bdc 4
[homes]
[netlogon]
suivant
utilisateur
Domaine 3
Site physique 2
Machines utilisées dans le cas des tests efectués :
PDC 1 : PIII 1.2 Ghz, 256 Mo Ram, GNU/Linux Debian 3.0r1, noyau 2.4.18
BDC 1 : PIII 450 Mhz, 128 Mo Ram, GNU/Linux Mandrake 9.1, noyau 2.4.21
PDC 2 : PIII 733 Mhz, 128 Mo Ram, SCO Linux Server 4.0, noyau 2.4.19
BDC 2 : PIII 733 Mhz, 128 Mo Ram, SCO Linux Server 4.0, noyau 2.4.19
LDAP maître : PIII 733 Mhz, 128 Mo Ram, GNU/Linux Debian 3.0r1, noyau 2.4.18
LDAP esclave 1 : Machine similaire
LDAP esclave 2 : PIII 733 Mhz, 128 Mo Ram, GNU/Linux Mandrake 9.0
PDC 3 : Même machine physique (loopback)
LDAP esclave 3 : PIII 733 Mhz, 128 Mo Ram, GNU/Linux Mandrake 9.0
BDC 3 : Même machine physique (loopback)
LDAP esclave 4 : PIII 733 Mhz, 128 Mo Ram, GNU/Linux Mandrake 9.0
BDC 4 : Même machine physique (loopback)
Notes :
- On distingue 3 domaines principaux. Ces domaines sont des (sous-)réseaux IP différents.
- On distingue 2 sites, reliés par une liaison WAN.
- Seul le serveur LDAP maître autorise la modification de ses données par une personne physique (binddn).
- Les autres doivent limiter l'écriture par des Acls LDAP pour n'autoriser les mises à jour que par réplication (slurpd).
- Dans le 3è domaine, les serveurs LDAP sont présents sur la même machine physique que le serveur Samba
(interrogation par loopback), mais il est tout à fait possible d'introduire une machine tierce dans chaque cas.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 27/30
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective
freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and
publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General
Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with
manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of
subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of
this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work
in a way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into
another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the
Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or
with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is
released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain
zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under
this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for
revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an
otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not
Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF
and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in
the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates
XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".)
To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered
to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license
notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not
use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for
copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice
requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover
Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words
of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the
title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 28/30
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the
rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each
Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using publicstandard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year
after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you
with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under
precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever
possesses a copy of it. In addition, you must do these things in the Modified Version:
* A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any,
be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
* B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least
five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
* C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
* D. Preserve all the copyright notices of the Document.
* E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
* F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the
form shown in the Addendum below.
* G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
* H. Include an unaltered copy of this License.
* I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as
given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given
on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
* J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in
the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published
at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
* K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of
the contributor acknowledgements and/or dedications given therein.
* L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the
section titles.
* M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
* N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
* O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you
may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of
peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the
Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the
Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not
add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any
Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you
include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple
Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the
original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license
notice of the combined work.
In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any
sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various
documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all
other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted
document, and follow this License in all other respects regarding verbatim copying of that document.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 29/30
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is
called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works
permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the
Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the
Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic
form. Otherwise they must appear on printed covers that bracket the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with
translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original
versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided
that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the
translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically
require changing the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or
distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit
to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version"
applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by
the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free
Software Foundation.
How to use this License for your documents
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title
page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as
the GNU General Public License, to permit their use in free software.
Mise en place d'un domaine Samba 2.2 avec LDAP - Ganaël Laplanche - EDF R&D - http://www.martymac.com
Page 30/30

Documents pareils