Installation du serveur
LDAP
Installation
pacman -S openldap
Configuration
La première chose à faire est de générer un hash pour le mot de passe à utiliser pour gérer le serveur LDAP. Pour cela, on utilise la commande :
slappasswd -h {SSHA}
Ce hash servira dans plusieurs fichiers de configuration, mieux vaut le mettre de côté pendant la mise en place de LDAP. |
On va ensuite créer un certificat et une clé de cryptage auto-signés pour sécuriser les communications. On commence par générer ces deux fichiers à l’aide de cette commande :
openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 3650
S’il n’est pas nécessaire de répondre aux questions posées par le programme, il est en revanche requis de donner comme ‘Common name’ le nom DNS complet du serveur LDAP. |
On créé le dossier /etc/openldap/ssl et on y déplace les deux fichiers générés.
La clé doit être lisible par root seulement, mais le certificat doit l'être pour tous. Il convient donc d’appliquer les droits 400 sur slapdkey.pem et 444 sur slapdcert.pem. |
On modifie ensuite le fichier /etc/openldap/slapd.conf. Commentaires retirés, il ressemble à ça :
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema #include /etc/openldap/schema/samba.schema pidfile /var/run/slapd.pid argsfile /var/run/slapd.args # À décommenter lors de l'installation de samba #access to attrs=userPassword,sambaLMPassword,sambaNTPassword,sambaPwdMustChange,sambaPwdLastSet,shadowLastChange,shadowMax # by self write # by * auth access to * by * read database bdb suffix "dc=arda" # Le nom de l'administrateur sera 'root'. rootdn "cn=root,dc=arda" # À remplacer avec le hash de votre mot de passe. rootpw {SSHA}Gb4Ka3wc2BsHmXOxq+LJnkfXw89Brjf1 directory /var/lib/openldap/openldap-data index objectClass eq TLSCipherSuite HIGH:MEDIUM:+SSLv2 TLSCertificateFile /etc/openldap/ssl/slapdcert.pem TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem
On a ausi besoin d’un fichier de config pour la base. On part du fichier d’exemple :
cp /var/lib/openldap/openldap-data/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG
Il n’est pas nécessaire de le modifier.
On va maintenant configurer le serveur pour qu’il écoute sur le port sécurisé et n’autorise les connexions non-cryptées que localement. Pour cela on édite le ficher /etc/conf.d/slapd et on modifie la ligne SLAPD_SERVICES de cette façon :
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:///"
On a en général besoin de modifier le /etc/hosts.allow pour autoriser les connexions au démon LDAP, en ajoutant cette ligne :
slapd: ALL
On peut maintenant lancer le serveur.
/etc/rc.d/slapd start
Tant qu'à faire, autant en profiter pour l’ajouter aux démons dans le /etc/rc.conf.
Insertion des données de base
On créé un fichier temporaire avec ces données :
# Domaine arda dn: dc=arda objectClass: dcObject objectClass: organization o: arda dc: arda # Administrateur dn: cn=root,dc=arda cn: root description: LDAP administrator roleOccupant: dc=arda objectClass: organizationalRole objectClass: top
Il faut bien laisser une ligne vide entre chaque objet à ajouter. |
On l’ajoute à l’arbre:
ldapadd -x -H ldap://127.0.0.1 -D 'cn=root,dc=arda' -W -f base.ldif
Samba
Installation
pacman -S samba
On compile aussi le paquet smbldap-tools depuis le AUR.
yaourt est très pratique pour installer des paquets depuis AUR. Voir http://archlinux.fr/yaourt |
Intégration à LDAP
On ajoute le schéma Samba à openLDAP :
cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema/
Et on l’active dans la config en décomentant cette ligne au fichier /etc/openldap/slapd.conf :
include /etc/openldap/schema/samba.schema
On décommente également les trois lignes d’ACL plus bas, afin de protéger les mots de passe des comptes.
On redémarre maintenant le serveur LDAP :
/etc/rc.d/slapd restart
Samba utilisera LDAP pour gérer les informations des utilisateurs. Il utilisera en revanche des appels système pour vérifier que l’utilisateur existe. Il est donc nécessaire de configurer LDAP dans NSS et PAM. Pour cela, suivre les instructions de l'installation du client Arch jusqu'à la section Configuration de NFS exclue.
Configuration
Samba
On place ceci dans le fichier /etc/samba/smb.conf :
[global] log level = 1 workgroup = arda netbios name = iluvatar server string = iluvatar domain master = Yes local master = Yes domain logons = Yes os level = 40 preferred master = Yes lock directory = /var/cache/samba passwd program = /usr/bin/smbldap-passwd ?u %u ldap passwd sync = Yes passdb backend = ldapsam:ldap://127.0.0.1/ security = user ldap admin dn = cn=root,dc=arda ldap suffix = dc=arda ldap group suffix = ou=group ldap user suffix = ou=people ldap machine suffix = ou=machines add user script = /usr/bin/smbldap-useradd -a -m "%u" ldap delete dn = Yes delete user script = /usr/bin/smbldap-userdel "%u" add machine script = /usr/bin/smbldap-useradd -W "%u" add group script = /usr/bin/smbldap-groupadd -p "%g" delete group script = /usr/bin/smbldap-groupdel "%g" add user to group script = /usr/bin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/bin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/bin/smbldap-usermod -g "%g" "%u" socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 case sensitive = No default case = lower preserve case = yes short preserve case = Yes dns proxy = No wins support = Yes hosts allow = 172.16.0.0/12 127.0.0.0/8 192.168.100.0/24 winbind use default domain = Yes nt acl support = Yes msdfs root = Yes hide files = /desktop.ini/ntuser.ini/NTUSER.*/ ldap ssl = no admin users = root log file = /var/log/samba/%m logon script = logon.bat load printers = No [homes] comment = Home Directories browseable = no writable = yes [netlogon] path = /usr/lib/samba/netlogon writable = no browseable = no [public] comment = Public Stuff path = /export/share public = yes writable = yes printable = no [documents] path = /export/documents writable = no hide dot files = yes veto files = /./../ guest ok = no browseable = yes printable = no [devoirs] path = /export/devoirs writable = yes guest ok = no hide dot files = yes veto files = /./../ browseable = yes printable = no
Puis on créé le dossier /usr/lib/samba/netlogon et on y place un fichier logon.bat avec ce contenu :
net use Z: \\iluvatar\homes net use Y: \\iluvatar\documents net use X: \\iluvatar\devoirs net use W: \\iluvatar\public
Smbldap
On modifie le fichier /etc/smbldap-tools/smbldap_bind.conf pour simplement mettre les bons DN et le mot de passe du root LDAP, en clair.
Changer les droits de ce fichier pour 600. Il contient un mot de passe administrateur LDAP en clair et ne doit donc être lisible par personne d’autre que root. |
On met ensuite ceci dans /etc/smbldap-tools/smbldap.conf :
#SID="" masterLDAP="127.0.0.1" masterPort="389" ldapTLS="0" verify="require" suffix="dc=arda" usersdn="ou=people,${suffix}" computersdn="ou=machines,${suffix}" groupsdn="ou=group,${suffix}" sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}" scope="sub" hash_encrypt="SSHA" crypt_salt_format="%s" userLoginShell="/bin/bash" userHome="/export/home/%U" userHomeDirectoryMode="700" userGecos="User" defaultUserGid="600" defaultComputerGid="500" skeletonDir="/etc/skel" defaultMaxPasswordAge="36500" with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" with_slappasswd="0" slappasswd="/usr/sbin/slappasswd"
On donne ensuite à Samba le mot de passe root de LDAP. Pour cela on arrête le serveur et on tape :
smbpasswd -w secret
Fermer le terminal et supprimer le fichier ~/.bash_history pour ne pas laisser le mot de passe en clair dans l’historique des commandes. |
Avant de poursuivre, il vaut mieux créer les différents dossiers pour les partages, comme le /export, /export/home, /export/documents etc… |
On démarre ensuite Samba avec la commande
/etc/rc.d/samba start
Et tant qu'à faire, on l’ajoute dans la liste des démons à démarrer du rc.conf.
samba doit être placé après network, lui-même au premier plan, pour qu’il puisse se configurer correctement et accepter les clients Windows. |
On demande à Samba de nous donner le SID du domaine :
net getlocalsid
Si cette commande retourne une erreur ou un warning, il vaut mieux ne pas aller plus loin et chercher l’origine de l’erreur. |
Puis on place ce SID à la ligne SID="" du fichier /etc/smbldap-tools/smbldap.conf.
Installation des tables Samba
On utilise la commande suivante pour créer les tables Samba dans l’annuaire LDAP :
smbldap-populate
Avant d’essayer d’ajouter des machines ou des utilisateurs au domaine, il faut créer quelques groupes de base. Voir la section Gestion des comptes. |
NFS
Installation
Les paquets à installer sont nfs-utils et rpcbind.
Configuration
On indique les partages dans le fichier /etc/exports. Par exemple :
/export *.arda(rw,sync) *(rw,sync) ambarona.arda(ro,sync,no_root_squash)
Ensuite on modifie le /etc/hosts.allow pour autoriser rpcbind, puis on démarre (et on active au démarrage) les démons rpcbind et nfs-server.
D’après le Wiki, il faut autoriser les connexions à nfsd et mountd dans le /etc/hosts.allow. Mais dans mon cas de test ça n’a pas été nécessaire… |
Si on souhaite utiliser NFS en version 3, il n’y a rien d’autre à faire. Pour NFSv4 en revanche, il faut activer le démon idmap pour permettre la correspondance des UID/GID.
Le premier fichier à modifier est /etc/conf.d/nfs-common.conf. Deux modifications sont à faire :
-
Mettre NEED_STATD à no
-
Mettre NEED_IDMAPD à yes
Le second fichier à éditer est le /etc/idmapd.conf. On indiquera arda comme Domain et nsswitch comme Method (cas par défaut). Enfin, on ajoute le service nfs-common à la liste des démons du /etc/rc.conf, avant nfs-server ou netfs et après rpcbind.
Installation des clients
Archlinux
Installation
pacman -S openldap nss_ldap pam_ldap rpcbind nfs-utils
Configuration
Configuration de LDAP
On commence par copier le certificat SSL créé sur le serveur. On le place au même endroit (/etc/openldap/ssl/slapdcert.pem). On ne copie pas la clé.
Puis on modifie le fichier /etc/openldap/ldap.conf pour y ajouter cette ligne :
BASE dc=arda URI ldaps://iluvatar.arda:636/ TLS_CACERT /etc/openldap/ssl/slapdcert.pem TLS_REQCERT allow
Configuration de NSS
On commence par modifier le /etc/nss_ldap.conf. Il contiendra :
host iluvatar.arda base dc=arda rootbinddn cn=root,dc=arda port 636 pam_login_attribute uid pam_template_login_attribute uid nss_base_passwd ou=people,dc=arda?one nss_base_shadow ou=people,dc=arda?one nss_base_group ou=group,dc=arda?one ssl start_tls ssl on tls_checkpeer no # Pour éviter un délai de 5 minutes lors d'une connexion console quand le serveur LDAP est indisponible bind_policy soft
On modifie ensuite le /etc/nsswitch.conf :
passwd: files ldap group: files ldap shadow: files ldap
Configuration de PAM
On modifie /etc/pam_ldap.conf, en y mettant en fait la même chose que dans le nss_ldap.conf ci-dessus.
On modifie maintenant plusieurs fichiers du dossier /etc/pam.d.
Ces fichiers du dossier /etc/pam.d définissent pour plusieurs entités (login, shadow, su…) les modules à utiliser (pam_ldap.so, pam_unix.so…) pour différentes authentifications (auth, account, …). |
Chaque ligne doit être ajoutée en haut de la liste de l’authentification qu’elle concerne, sauf pour le fichier login. Voir des exemples plus bas. |
On ajoute ces lignes aux fichiers shadow, su, sshd, et other :
auth sufficient pam_ldap.so account sufficient pam_ldap.so
Cette ligne aux fichiers passwd, shadow, sshd, et other :
password sufficient pam_ldap.so
Et cette ligne aux fichiers shadow et su :
session sufficient pam_ldap.so
#%PAM-1.0 auth sufficient pam_ldap.so # <-- Placé avant le module unix auth required pam_unix.so account sufficient pam_ldap.so # <-- et ainsi de suite account required pam_unix.so password sufficient pam_ldap.so password required pam_unix.so session required pam_unix.so
Tel que présent sur un système Archlinux en date du 5er juillet 2011, avec les modifications concernant LDAP.
#%PAM-1.0 auth required pam_securetty.so auth requisite pam_nologin.so auth sufficient pam_ldap.so auth sufficient pam_unix.so nullok use_first_pass auth required pam_deny.so (...) account sufficient pam_ldap.so account required pam_access.so account required pam_time.so account required pam_unix.so (...) session required pam_unix.so session required pam_env.so session required pam_motd.so (...)
On ne configure ici que le système de base. Des gestionnaires de connexion comme gdm ou slim créeront leur fichier également. Il faudra y appliquer des modifications similaires à celles du fichier login ci-dessus. |
À titre d’exemple, je mets à disposition les fichiers configurés pour Archlinux en date du 8 juin 2011.
Configuration de NFS
On créé d’abord le dossier /export. Ensuite on peut ajouter cette ligne au /etc/fstab :
iluvatar.arda:/export /export nfs rw,vers=4,hard,intr,nodev,nosuid,proto=tcp,retrans=2 0 0
Il faut que le démon netfs soit activé dans le rc.conf, après network qui doit donc se lancer au premier plan (sans le @). |
Quand on utilise NFS en version 4, il faut également activer le démon idmap pour permettre la correspondance des UID/GID sur les clients. Pour celà voir les instructions de mise en place plus haut.
Si NFS est utilisé en version 3, il faut modifier l’option vers de l’exemple ci-dessus. |
Windows XP
Un serveur DNS fonctionnel résolvant le nom du serveur est requis. De plus, si le client n’est pas sur le même réseau que le serveur Samba, il faut lui indiquer l’adresse IP du serveur comme serveur WINS. Cela peut se faire de façon statique ou sur un serveur DHCP comme ceci : |
option netbios-name-servers 172.16.1.30;
Modification du registre
Il faut modifier une valeur dans le registre pour que la jonction au domaine Samba puisse se faire. On ouvre donc regedit et on modifie la valeur suivante :
-
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netlogon\parameters
-
Mettre la valeur dword "RequireSignOrSeal" à 0.
-
Il ne reste plus qu'à rejoindre le domaine.
Windows 7
La procédure générale est identique à celle de Windows XP, mais les valeurs de registre à modifier sont différentes.
Modification du registre
Voir ce fichier.
Gestion des comptes
Ajout d’un groupe
Avant d’ajouter le premier utilisateur, il faut créer un groupe pour l’accueillir. On utilise la commande :
# Groupe au gid 610 nommé students10 smbldap-groupadd -a -g 610 students10
Avant qu’une machine puisse rejoindre le domaine Samba, il faut également créer le groupe par défaut des machines, indiqué par la valeur defaultComputerGid du /etc/smbldap-tools/smbldap.conf.
# Groupe 500 dans notre exemple smbldap-groupadd -a -g 500 machines
Ajout d’un utilisateur
smbldap-useradd -a -c "Regis Brouard" -P -g 610 -d /export/home/an10/regis \ -C "\\\\iluvatar.arda\homes\an10\regis" -m regis
On met bien quatre barres obliques inversées. Les accents dans les noms semblent poser problème avec ces scripts. |
Migration depuis Samba/NIS
Les Migration Tools permettent de faciliter la migration d’un environnement NIS vers LDAP. Malheureusement, il ne prennent pas en charge Samba. Nous proposons donc un script utilisant les smbldaptools pour effectuer la migration. Son fonctionnement est décrit dans le fichier README de l’archive.
La méthode de migration proposée ne conserve pas les anciens SID Samba. Pour éviter des erreurs de connexion, il faut soit que les machines Windows soient ‘neuves’, soit qu’un ménage y soit fait en effacant les dossiers contenus dans C:\Utilisateurs et en effacant les clés contenues dans la clé de registre HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Dans tous les cas, il faudra effacer le fichier NTUSER.DAT du dossier profile.V2 de chaque utilisateur. Ceux-ci devront ouvrir leur session deux fois avant de récupérer leurs documents. |
Maintenance
Il arrive qu’une des fréquentes mises à jour d’Arch Linux casse un des composants de ce système. Chaque problème a sa solution et c’est dans cette section qu’elles seront décrites.
Berkley DB
OpenLDAP utilise une base de données BDB. Lorsque le paquet db est mis à jour, il se peut que le serveur OpenLDAP cesse de fonctionner car sa base doit être mise à jour. On trouve dans les journaux des messages de ce type :
Program version 5.2 doesn't match environment version 5.1
Je ne connais pas BDB. La solution donnée ici est celle que j’ai utilisé lorsque j’ai rencontré ce problème, il se peut qu’elle soit incomplète. |
Pour effectuer la migration, il faut d’abord réinstaller la version précédente de db (ou faire la migration avant la mise à jour). Il est probable que le paquet de la précédente version soit encore dans /var/cache/pacman/pkg. Dans notre exemple, on le réinstalle comme ceci :
pacman -fd -U /var/cache/pacman/pkg/db-5.1.25-1-x86_64.pkg.tar.xz
On se rend ensuite dans le dossier de la base d’OpenLDAP, soit /var/lib/openldap/openldap-data/, puis on exécute les commandes suivantes (le serveur LDAP étant arrêté) :
db_checkpoint -1
db_recover
Il ne reste plus qu'à réinstaller de la même manière la dernière version de db et relancer le serveur LDAP.
Il pourrait également être nécessaire d’exécuter db_recover -e après avoir mis à jour db. Je n’ai pas d’informations précises sur ce détail. |