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