Installation d’un contrôleur de domaine SAMBA, OpenLDAP sur Ubuntu 9.10

Il m’a pris l’envi de tester la création d’un contrôleur de domaine Samba + OpenLDAP sur Ubuntu 9.10, afin d’intégrer des clients Windows.


[toc title= »Table des matières » hint= »hover hint »
class= »extra CSS class » style= »width: 50% »]

Prérequis

L’installation est faite sur une Ubuntu 9.10 Server fraichement installée pour l’occasion.
Je préfère travailler en root, personnellement, et je suis un peu allergique au sudo, je ne m’en sers  donc qu’une fois. Un petit sudo –i, et nous voilà prêts à installer et configurer.
Il est toujours vivement conseillé d’adresser un Serveur en IP fixe, surtout un contrôleur de domaine, sans quoi les postes clients seront dans l’incapacité de se connecter si l’adresse change. Une réservation DHCP est toujours envisageable, mais je préfère de loin l’adressage fixe.

Mettre une adresse IP fixe sur le serveur:

Editez le fichier /etc/network/interface , section [eth0]

auto eth0
iface eth0 inet static
address 192.168.254.10
netmask 255.255.255.0
network 192.168.254.0
broadcast 192.168.254.255
gateway 192.168.254.2

On redémarre le service réseau afin d’appliquer les changements

/etc/init.d/networking restart

LDAP

Installation LDAP

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

Configuration LDAP (slapd)

Une chose importante est à éclaircir avant de poursuivre. La dernière version de slapd permet d’effectuer des modifications dynamiques sur la structure des répertoires, sans redémarrer le service slapd. C’est une bonne chose, à l’exception que la méthode de configuration diffère totalement des versions précédentes, et le terme « usine à gaz » est un doux euphémisme pour qualifier cela. De plus, il faut deux fois plus de temps et efforts pour effectuer les modifications. A moins d’un grosse révision sur ce point, je préfère utiliser l’ancienne méthode : l’édition du fichier de configuration slapd.conf (qui n’est plus présent dans le répertoire de configuration de slapd).

1.  La première étape consiste à supprimer le répertoire slapd.d

rm -r /etc/ldap/slapd.d

2. Editez ensuite le fichier principal de slapd :

vi /etc/default/slapd

Sur la 6ème ligne, effectuez la modification suivante :
SLAPD_CONF=/etc/ldap/slapd.conf

3. Ajouter le schéma samba pour LDAP

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

4. Il faut ensuite décider d’un mot de passe pour l’administrateur LDAP, et le générer avec le hash SSHA:

slappasswd –s le-mot-de-passe

La commande devrait retourner quelques chose comme ceci :

{SSHA}NIhEHAEnA6/jerFqqvUaGTQDPt7ZlbFt

Copier le hash quelque part, il sera nécessaire pour la suite.

5. Créer un fichier init.lidf, qui sera utilisé pour peupler le serveur LDAP. Entrez la commande :

vi /etc/ldap/init.ldif

Collez les lignes suivantes dans le fichier init.ldif, et remplacez chaque dc=example,dc=local par les informations propres à votre domaine.

Pour faire un chercher/remplacer dans vi, vous pouvez tapez la commande (dans vi, en mode commande)

:%s/dc=example,dc=local/dc=domaine,dc=com

Cela va remplacer les occurrences dc=example,dc=local par dc=domaine,dc=com

dn: dc=example,dc=local
objectClass: dcObject
objectClass: organizationalUnit
dc: example
ou: My Example File
 
dn: cn=admin, dc=example,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {SSHA}collez-ici-le-résultat-de-slappasswd
 
dn: ou=Users, dc=example,dc=local
objectClass: organizationalUnit
ou: Users 
 
dn: ou=Groups, dc=example,dc=local
objectClass: organizationalUnit
ou: Groups 
 
dn: ou=Computers, dc=example,dc=local
objectClass: organizationalUnit
ou: Computers 
 
dn: ou=Idmap, dc=example,dc=local
objectClass: organizationalUnit
ou: Idmap

6. Créer le fichier slapd.conf, utilisé pour la configuration de slapd dans les anciennes versions. Ce fichier n’éxistant pas, il faudra le remplir.

vi /etc/ldap/slapd.conf

Collez les lignes suivantes dans le fichier créé :

# Remember to replace suffix "dc=example,dc=local" with your domain name
# Change the rootpw entry with the results from slappaswd (Must match the same you pasted on init.ldif) 
 
# /etc/ldap/slapd.conf
# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.
 
########################################################################
#Global Directives: 
 
# Features to permit
#allow bind_v2
 
# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/samba.schema
include         /etc/ldap/schema/misc.schema
 
# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile                      /var/run/slapd/slapd.pid
 
# List of arguments that were passed to the server
argsfile                   /var/run/slapd/slapd.args
 
# Read slapd.conf(5) for possible valuesloglevel        0
# Where the dynamically loaded modules are stored
modulepath               /usr/lib/ldap
moduleload          back_bdb
 
# The maximum number of entries that is returned for a search operation
sizelimit 500 
 
# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1 
 
#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend                   bdb
#checkpoint 512 30 
 
#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend                 
 
#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database              bdb 
 
# The base of your directory in database #1
suffix                       "dc=example,dc=local" 
 
# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
rootdn                       "cn=admin,dc=example,dc=local"
rootpw                      {SSHA}iPFTqrtwr3yT3XGQot2wxCuuljKA9vMU # REMEMBER!  REPLACE THIS WITH THE RESULTS FROM SLAPPASSWD 
 
# Where the database file are physically stored for database #1
directory       "/var/lib/ldap" 
 
# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0 
 
# Sven Hartge reported that he had to set this value incredibly high
# to get slapd running at all. See http://bugs.debian.org/303057
# for more information. 
 
# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500 
 
# Indexing options for database #1
#index                  objectClass eq, pres
index ou,cn,sn,mail,givenname                            eq,pres,sub
index uidNumber,gidNumber,memberUid        eq,pres
index loginShell                                       eq,pres
index uniqueMember                                                    eq,pres
index uid                                               pres,sub,eq
index displayName                                   pres,sub,eq
index sambaSID                                      eq
index sambaPrimaryGroupSID                                  eq
index sambaDomainName                                            eq
index default                                                                    sub
#index   uid                                 pres,eq,sub 
 
# Save the time that the entry gets modified, for database #1
lastmod         on 
 
# Where to store the replica logs for database #1
# replogfile    /var/lib/ldap/replog 
 
# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword
    by dn="cn=admin,dc=example,dc=local"  write
    by anonymous auth
    by self write
    by * none 
 
# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
access to dn.base="" by * read 
 
# The admin dn has full write access, everyone else
# can read everything.
access to *
       by dn="cn=admin,dc=example,dc=local" write
    by * read 
 
# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
#                          by dn="cn=admin,dc=example,dc=ch" write
#                   by dnattr=owner write 
 
######################################################################
# Specific Directives for database #2, of type 'other' (can be bdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database         
 
# The base of your directory for database #2
#suffix         "dc=debian,dc=org"

7. Initialiser la base de données LDAP

En premier lieu, arrêter le service slapd

/etc/init.d/slapd stop

S’assurer que le répertoire LDAP est « propre »

rm -fr /var/lib/ldap/*

Ajouter le fichier .ldif précedemment créé (init.ldif)

slapadd -v -l /etc/ldap/init.ldif

Si tout à été correctement configuré, vous devriez voir la ligne suivante à la fin du traitement:

#################### 100.00% eta none elapsed none fast!

Si ce n’est pas le cas, regardez les messages d’erreurs, et vérifiez la configuration des différents fichiers.

Il faut s’assurer que l’utilisateur openldap dispose des privilèges nécessaires pour accéder à son répertoire.

chown -R openldap:openldap /var/lib/ldap

Démarrer le service slapd

/etc/init.d/slapd start

Si tout est correctement configuré, il doit afficher le message:

starting OpenLDAP: slapd

Si ce n’est pas le cas, regardez les messages d’erreurs, et vérifiez la configuration des différents fichiers.

8. Vérifier que la configuration est fonctionnelle:

ldapsearch -xLLL -b "dc=example,dc=local"

Si cela fonctionne, la sortie doit afficher la liste des entrées que nous avons créé dans le fichier init.ldif.

Samba

Installer Samba

apt-get -y install samba libpam-smbpass smbldap-tools

Configurer Samba pour l’utilisation avec LDAP

1. Créer les répertoires Samba qui n’ont pas été automatiquement créés

mkdir -v /var/lib/samba/profiles
chmod 777 /var/lib/samba/profiles
mkdir -v -p /var/lib/samba/netlogon

2. Editez le fichier smb.conf

Afin de simplifier la configuration, il vaut mieux partir d’un fichier de configuration vierge. Nous allons donc déplacer le fichier original smb.conf, qui servira de fichier de sauvegarde en cas de problème (une habitude à prendre.

mv /etc/samba/smb.conf /etc/samba/smb.conf.ori

Vous pouvez maintenant recréer le fichier:

vi /etc/samba/smb.conf

Collez y les informations suivantes:

[global]
    # Nom de Domaine
    workgroup = VENDETTA
    # Server name - est vu par les client Windows
    netbios name = DCSRVTST
    # Définir comme controleur de domaine pricipal
    domain logons = Yes
    domain master = Yes
    # Définir comme serveur WINS
    wins support = true
    obey pam restrictions = Yes
    dns proxy = No
    os level = 35
    log file = /var/log/samba/log.%m
    max log size = 1000
    syslog = 0
    panic action = /usr/share/samba/panic-action %d
    pam password change = Yes
 
    # Autoriser les clients Windows XP à modifier leurs mots de passe par Ctrl-Alt-Suppr
    unix password sync = no
    ldap passwd sync = yes
 
    #Printing from PCs will go via CUPS ..
    load printers = yes
    printing = cups
    printcap name = cups
 
    #Utiliser LDAP pour les groupes et les comptes SAMBA ..
    passdb backend = ldapsam:ldap://localhost
    # Ceci doit correspondre à init.ldif ..
    ldap suffix = dc=example,dc=local
    # Le mot de passe pour cn=admin doit être stocké dans /etc/samba/secrets.tdb
    # This is done by running 'sudo smbpasswd -w'.
    ldap admin dn = cn=admin,dc=example,dc=local
    # 4 OUs that Samba uses when creating user accounts, computer accounts, etc.
    # (Because we are using smbldap-tools, call them 'Users', 'Computers', etc.)
    ldap machine suffix = ou=Computers
    ldap user suffix = ou=Users
    ldap group suffix = ou=Groups
    ldap idmap suffix = ou=Idmap
    # Samba and LDAP server are on the same server in this example.
    ldap ssl = no
 
    # Scripts for Samba to use if it creates users, groups, etc.
    add user script = /usr/sbin/smbldap-useradd -m '%u'
    delete user script = /usr/sbin/smbldap-userdel %u
    add group script = /usr/sbin/smbldap-groupadd -p '%g'
    delete group script = /usr/sbin/smbldap-groupdel '%g'
    add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
    delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
    set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
    # Script that Samba users when a PC joins the domain ..
    # (when changing 'Computer Properties' on the PC)
    add machine script = /usr/sbin/smbldap-useradd -w '%u'
 
    # Valeurs utilisées quand un nouvel utilisateur est créé..
    # (Note: '%L' ne fonctionne pas correctement avec smbldap-tools 0.9.4-1)
    logon drive =
    logon home =
    logon path =
    logon script =
 
    # Les lignes sivantes sont requises pour les clients Windows XP ..
    server signing = auto
    server schannel = Auto
 
[homes]
    comment = Home Directories
    valid users = %S
    read only = No
    browseable = No
 
[netlogon]
    comment = Network Logon Service
    path = /var/lib/samba/netlogon
    admin users = root
    guest ok = Yes
    browseable = No
 
[Profiles]
    comment = Roaming Profile Share
    # would probably change this to elsewhere in a production system ..
    path = /var/lib/samba/profiles
    read only = No        profile
    acls = Yes
    browsable = No
 
[printers]
    comment = All Printers
    path = /var/spool/samba
    use client driver = Yes
    create mask = 0600
    guest ok = Yes
    printable = Yes
    browseable = No
    public = yes
    writable = yes
    admin users = root
    write list = root
 
[print$]
    comment = Printer Drivers
    Share path = /var/lib/samba/printers
    write list = root
    create mask = 0664
    directory mask = 0775
    admin users = root

3. Enregistrer le mot de passe admin LDAP pour SAMBA

smbpasswd -W

Il doit motrer les lignes suivantes:

Setting stored password for    "cn=admin,dc=example,dc=com" in secrets.tdb
   New SMB password:
   Retype new SMB password:

Assurez vous de taper le même mot de passe que celui que vous avez tapé pour la commande slappasswd -s.

4. Redémarrez Samba

/etc/init.d/samba restart

Configurer les smbldap-tools

1. Rendez vous dans le répertoire des smbldap-tools

cd /usr/share/doc/smbldap-tools/examples/

puis exécutez les commandes suivantes:

cp smbldap_bind.conf /etc/smbldap-tools/
cp smbldap.conf.gz /etc/smbldap-tools/
gzip -d /etc/smbldap-tools/smbldap.conf.gz

Allez dans le répertoire smbldap-tools

cd /etc/smbldap-tools/

2. Obtenir le SID de votre domaine

net getlocalsid

Il doit retourner quelque chose comme ceci:

SID for domain SERVERNAME is: S-1-5-21-813862335-3720842347-4103793266

Copiez ce numéro quelque part, il sera utile pour la suite.

3. Editez le fichier smbldap.conf

vi /etc/smbldap-tools/smbldap.conf

Il faut effectuer les modifications suivante au fichier:

SID="S-1-5-21-813862335-3720842347-4103793266" ## cette ligne doit avoir le même SID que celui retourné par la cmd "net getlocalsid"
sambaDomain="EXAMPLE"
ldapTLS="0"
suffix="dc=example,dc=local"
sambaUnixIdPooldn="sambaDomainName=EXAMPLE,${suffix}"
userHome="/home/%U"
userSmbHome=
userProfile=
userHomeDrive=
userScript=
mailDomain="example.local"

4. Ouvrez le fichier smbldap_bind.conf afin de l’éditer:

vi /etc/smbldap-tools/smbldap_bind.conf

Editez les paramètres suivants, en accordant les valeurs à votre configuration:

slaveDN="cn=admin,dc=example,dc=local"
slavePw="12345"
masterDN="cn=admin,dc=example,dc=local"
masterPw="12345"

5. Appliquez les bonnes permissions aux deux fichiers de configurations:

chmod 0644 /etc/smbldap-tools/smbldap.conf
chmod 0600 /etc/smbldap-tools/smbldap_bind.conf

6. Peuplez la base de données LDAP avec les entrées essentielles à SAMBA. Cela inclus la création des groupes standards, tels que « Administrators » et « Domain Users« .

smbldap-populate

La sortie de cette commande doit ressembler à ceci:

Populating   LDAP directory for  domain EXAMPLE(S-1-5-21-
813862335-3720842347-4103793266)

Pour terminer, vous devrez entrer un mot de passe pour SAMBA. Entrez le même mot de passe que celui entré pour la commande slappasswd -s.

7. Stopez le serveur LDAP, éxecuter slapindex, et redémarrez le serveur LDAP:

/etc/init.d/slapd stop
slapindex
chown -R openldap:openldap /var/lib/ldap
/etc/init.d/slapd start

Slapd doit redémarrer sans problème. Si ce n’est pas le cas,  vérifier la configuration des différents fichiers. Vérifier le fichier smbldap_bind.conf, et assurez vous d’avoir entré le bon mot de passe. Vérifier également le fichier smbldap.conf, et assurez vous d’avoir effectué les modifications adéquates.

Vous ne devriez pas avoir à vérifier les autres fichiers de configurations, car le service slapd à déjà été redémarré après les précédentes modifications.

OpenLDAP

Ajouter un utilisateur

Le répertoire home va accueillir les répertoires des utilisateurs. Mais pour le moment, le répertoire ne doit contenir que le premier utilisateur créé lors de l’installation de l’OS (dans l’hypothèse d’une installation « fraiche » de serveur). Mais aucun compte n’ai présent dans la base de données LDAP. Je vais prendre l’exemple de Wade Wilson pour la création d’un compte.

1. Ajoutez un utilisateur

smbldap-useradd –a –m –M wwilson –c “ Wade Wilson” wwilson

-a : définit le compte SAMBA (et UNIX)
-m : créer le répertoire utilisateur (si il n’existe pas déjà)
-M : définit le nom comme partie de l’adresse email
-c : créer le nom complet
wwilson et le login utilisé pour la connexion

Pour que la création du compte soit complète, il faut créer un mot de passe.

smbldap-passwd wwilson

Entrer le mot de passe au prompt.

2. Donnez les privilèges Administrateurs

/usr/sbin/smbldap-groupmod –m 'wwilson’ ‘Administrators’
/usr/sbin/smbldap-groupmod –m ‘root’ ‘Administrators’

Configurer l’authentification

1. Ajouter l’authentification LDAP sur le serveur

apt-get –yes install ldap-auth-client

Vous devrez répondre à une série de question:

LDAP server Uniform Resource Identifier:ldap://127.0.0.1
Distinguished name of the search base:dc=example,dc=local
LDAP version to use: 3
Make local root Database admin:Yes
Does the LDAP database require login?No
LDAP account for root:cn=admin,dc=example,dc=local
LDAP root account password:< enter the LDAP admin password>>

2. Editez le fichier ldap.conf

vi /etc/ldap.conf

Trouvez les lignes suivantes, et effectuez les modifications indiquées (Vérifiez que les lignes sont bien décommentées).

host 127.0.0.1
base dc=example,dc=local
luri ldap://127.0.0.1/
rootbinddn cn=admin,dc=example,dc=local
bind policy soft

3. Copiez ldap.conf dans le bon repertoire

cp /etc/ldap.conf /etc/ldap/ldap.conf

4. Configurez l’authentification

vi /etc/auth-client-config/profile.d/open_ldap

Coller les lignes suivantes dans le nouveau fichier

[open_ldap]
nss_passwd=passwd: compat ldap
nss_group=group: compat ldap
nss_shadow=shadow: compat ldap
nss_netgroup=netgroup: nis
pam_auth=auth          required                   pam_env.so
        auth                sufficient               pam_unix.so likeauth nullok
        auth                sufficient               pam_ldap.so use_first_pass
        auth                required                    pam_deny.so
pam_account=account      sufficient            pam_unix.so
       account                sufficient               pam_ldap.so
       account                 required                   pam_deny.so
pam_password=password           sufficient          pam_unix.so nullok md5 shadow use_authtok
        password                     sufficient            pam_ldap.so use_first_pass
        password                          required                   pam_deny.so
pam_session=session      required                     pam_limits.so
        session                   required                  pam_mkhomedir.so skel=/etc/skel/ umask=0077
        session                  required               pam_unix.so
        session                  optional                pam_ldap.so

5. Activez le nouveau profil

auth-client-config -a -p open_ldap

Il est possible de recevoir différentes erreurs.

Si vous recevez l’erreur suivante

Error in updating the file: 'nss_netgroup' not found

Ouvrez le fichier open_ldap et supprimez la ligne :

nss_netgroup=netgroup: nis

remplacez la par :

nss_netgroup=netgroup: compat ldap

Enfin, redémarrez :

auth-client-config -a -p open_ldap

6. Redémarrez le serveur :

reboot

Vous n’avez plus qu’à entrer les ordinateurs clients Microsoft Windows dans le domaine, en utilisant le compte root, ou le compte créé (wwilson dans l’exemple). Cette manipulation ne posera pas de problèmes sous Windows XP, mais des modifications sont nécessaires sur les clients Vista et Windows 7. Une procédure décrivant ces modifications est disponible en suivant le lien ci après:

Entrer des ordinateurs Windows 7 dans un domaine Linux

Quelques astuces en plus

1. Authoriser SAMBA dans le parefeu

Pour cela, il faut autoriser les ports TCP 137,139 et 445.

2. Activer la journalisation OpenLDAP

La journalisation sera contrôlée par le service syslog , et comprendra les évènements de connexion/déconnexion des utilisateurs.

Editez le fichier /etc/openldap/slapd.conf, et ajouter :

loglevel        256

Editez le fichier /etc/syslog.conf, et ajouter la ligne :

local4.*                        /var/log/openldap.log

Les logs se trouveront dans le fichier /var/log/openldap.log

Redémarrez le service slapd et syslog afin qu’ils prennent en compte les modifications :

/etc/init.d/slapd restart
/etc/init.d/syslog restart