Intégration de clients Ubuntu dans un réseau avec LDAP
Ce billet décrit la procédure utilisée dans mon collège, par Laurent, prof de math et personne ressource en informatique, pour l'authentification LDAP des postes clients Ubuntu ainsi que le montage avec Samba des volumes réseau partagés.
Étape 1 : installation des paquets
Sur un poste connecté au réseau du LDAP et Internet, se connecter avec un compte administrateur. Pour le montage des répertoires par nfs et samba :
sudo apt-get install portmap smbfs smbclient
Pour le montage des partages samba :
sudo apt-get install libpam-mount
Pour l'authentification :
sudo apt-get install ldap-utils libpam-ldap libnss-ldap
Ici, apt vous pose quelques questions :
- Adresse ip du serveur ldap utilisé: IP_MonServeur
- Nom distinctif: « o=nom1,c=nom2 » sans espaces
- Ldap version to use: validez 3 avec « entrée »
- apt nous dit ensuite que pour libnss-ldap, nsswitch.conf n'est pas géré automatiquement.
- Faut-il créer une base de données locale pour l'administrateur?: non
- La base de données requiert-elle une connexion authentifiée?: non
Étape 2 : modification des fichiers de configuration pour accéder à LDAP
Vérifier le fichier /etc/pam_ldap.conf qui doit contenir en particulier les lignes suivantes, les autres étant commentées par un #
sudo gedit /etc/pam_ldap.conf
# Your LDAP server. Must be resolvable without using LDAP.
# Multiple hosts may be specified, each separated by a
# space. How long nss_ldap takes to failover depends on
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).
host IP_MonServeur
# The distinguished name of the search base.
base o=nom1,c=nom2
# The LDAP version to use (defaults to 3
# if supported by client library)
ldap_version 3
# The distinguished name to bind to the server with
# if the effective user ID is root. Password is
# stored in /etc/pam_ldap.secret (mode 600)
#rootbinddn cn=manager,dc=padl,dc=com
# The port.
# Optional: default is 389.
port 389
# Reconnect policy: hard (default) will retry connecting to
# the software with exponential backoff, soft will fail
# immediately.
bind_policy soft
et surtout /etc/libnss-ldap.conf
pour
lequel il faut modifier manuellement (en effet, sans
ces paramètres, la connexion échoue et l'installation
du paquet ne renseigne pas ce fichier
automatiquement) les lignes suivantes :
sudo gedit /etc/libnss-ldap.conf
# Your LDAP server. Must be resolvable without using LDAP.
# Multiple hosts may be specified, each separated by a
# space. How long nss_ldap takes to failover depends on
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).
host IP_MonServeur
# The distinguished name of the search base.
base o=nom1,c=nom2
# The LDAP version to use (defaults to 3
# if supported by client library)
ldap_version 3
# The distinguished name to bind to the server with
# if the effective user ID is root. Password is
# stored in /etc/libnss-ldap.secret (mode 600)
# Use 'echo -n "mypassword" > /etc/libnss-ldap.secret' instead
# of an editor to create the file.
#rootbinddn cn=manager,dc=padl,dc=com
# The port.
# Optional: default is 389.
port 389
# Reconnect policy:
# hard_open: reconnect to DSA with exponential backoff if
# opening connection failed
# hard_init: reconnect to DSA with exponential backoff if
# initializing connection failed
# hard: alias for hard_open
# soft: return immediately on server failure
bind_policy soft
Pour que l'annuaire LDAP soit consulté lors de l'authentification, modifier les 3 premières lignes du fichier /etc/nsswitch.conf comme ci-dessous :
sudo gedit /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap
J'ai remarqué qu'il valait mieux faire ce fichier en dernier et surtout après libnss-ldap.conf sinon le poste est considérablement ralenti en particulier gedit met un temps fou à ouvrir des fichiers dans un terminal.
Une fois ces modifications effectuées, les commandes ci-dessous doivent parcourir LDAP :
sudo id un_utilisateur_ldap
sudo getent passwd un_utilisateur_ldap
sudo getent group un_group_ldap
NFS n'est pas activé sur ALPES, on ne peut pas monter le répertoire home de l'utilisateur par cette méthode.
Etape 3 : modification des fichiers de PAM
Dans /etc/pam.d
, on édite les
fichiers comme suit :
Édition de /etc/pam.d/common-pammount
(pas de changement):
sudo gedit /etc/pam.d/common-pammount
auth optional pam_mount.so use_first_pass
session optional pam_mount.so use_first_pass
Édition de
/etc/pam.d/common-account :
sudo gedit /etc/pam.d/common-account
account sufficient pam_unix.so
account required pam_ldap.so use_first_pass
account required pam_mount.so use_first_pass
Édition de
/etc/pam.d/common-auth :
sudo gedit /etc/pam.d/common-auth
auth sufficient pam_unix.so
auth required pam_group.so use_first_pass
auth required pam_mount.so use_first_pass
auth required pam_ldap.so use_first_pas
Édition de
/etc/pam.d/common-password :
sudo gedit /etc/pam.d/common-password
password sufficient pam_unix.so nullok obscure min=4 max=8 md5
password required pam_mount.so use_first_pass
password required pam_ldap.so use_first_pass
Édition de
/etc/pam.d/common-session :
sudo gedit /etc/pam.d/common-session
session sufficient pam_unix.so
session optional pam_mkhomedir.so skel=/etc/skel/
session optional pam_mount.so use_first_pass
Pour que gdm lise pammount en premier et monte les
partages samba dans /media
avec le même
mot de passe, éditer /etc/pam.d/gdm
et
/etc/pam.d/gdm-autologin
sudo gedit /etc/pam.d/gdm
sudo gedit /etc/pam.d/gdm-autologin
remplacez le contenu par ceci :
#%PAM-1.0
auth required pam_mount.so
auth required pam_group.so use_first_pass
auth sufficient pam_ldap.so use_first_pass
auth required pam_unix.so use_first_pass
auth required pam_env.so
account sufficient pam_ldap.so
account sufficient pam_unix.so
password required pam_unix.so nullok obscure min=4 max=8 md5
session required pam_unix.so
session optional pam_mkhomedir.so skel=/etc/skel/
session optional pam_mount.so
Étape 4 : configurer le montage des partages samba
sudo gedit /etc/security/pam_mount.conf
Au milieu du fichier, à la fin de la section qui
commence par Volumes that will be mounted when
user triggers the pam_mount module…
,
ajoutez les lignes suivantes :
volume * smbfs IP_MonServeur & /media/&' sur nom_du_serveur' uid=&,gid=&,dmask=777,fmask=777 - -
volume * smbfs IP_MonServeur profscommun /media/profscommun' sur MonServeur' uid=&,gid=&,dmask=777,fmask=777 - -
volume * smbfs IP_MonServeur classes /media/classes' sur MonServeur' uid=&,gid=&,dmask=777,fmask=777 - -
volume * smbfs IP_MonServeur public /media/public' sur sur MonServeur' uid=&,gid=&,dmask=777,fmask=777 - -
volume * smbfs IP_MonServeur install /media/install' sur sur MonServeur' uid=&,gid=&,dmask=777,fmask=777 - -
Ce script dit à pam que pour tout utilisateur
qui s'authentifie, le partage samba «public» qui est
sur la machine IP_MonServeur doit être monté dans le
répertoire /media/public
, en utilisant
l'identité et le groupe de cet utilisateur et en
donnant les droits 777 sur ce répertoire. Ensuite,
c'est le serveur qui gère les droits; ainsi un élève
ne verra pas le partage professeurs sur son bureau.
Le & représente le login de connexion.
Dans ces lignes, j'ai rajouté une chaine de
caractères ' sur MonServeur' qui sera
ajoutée au nom du montage. Cela permet entre autre de
distinguer les 2 homes de l'utilisateur: celui local
dans /home/nom_utilisateur
et celui
monté depuis le serveur dans
/media/nom_utilisateur
sur
Mon_Serveur.
Pour permettre d'exécuter un script de suivi des connexions (voir étape 7), ajouter la ligne :
volume * smbfs IP_MonServeur config /tmp/.config uid=&,gid=&,dmask=777,fmask=777 - -
.config
avec un point au début pour
en faire un fichier caché et monté ailleurs que dans
/media
car sinon il apparaît dans le
menu « Raccourcis ».
Étape 5 : problèmes liés à l'authentification distante
La langue par défaut : quand
l'authentification se fait via un serveur distant,
l'utilisateur n'accède aux groupes ou aux paramètres
locaux. Ainsi, il arrive que la langue par défaut de
l'environnement graphique bascule vers l'américain.
Pour y remédier, il faut ajouter les lignes suivantes
à la fin du fichier /etc/profile
après la ligne umask 022
:
sudo gedit /etc/profile
export LC_ALL=fr_FR.UTF-8
export LANG=fr_FR.UTF-8
export LANGUAGE=fr_FR.UTF-8
Pour activer le réglage immédiatement, se déplacer
sur /etc
cd /etc
puis :
. profile
avec un espace entre le point et profile.
Le son, les lecteurs amovibles et les
périphériques usb : pour accéder
à la carte son et aux périphériques, les
utilisateurs locaux appartiennent aux groupes
secondaires audio, plugdev, etc. Les groupes sont
définis dans /etc/group
. Leurs membres
sont nécessairement des utilisateurs locaux. Nous
allons demander à pamgroup d'intégrer tout
utilisateur distant qui s'authentifie par ldap aux
groupes locaux audio, video, cdrom, plugdev, floppy
et scanner.
Pour cela, nous avons déjà ajouté pamgroup à
/etc/pam.d/common-auth
et gdm. Il nous
reste à ajouter la ligne suivante à
/etc/security/group.conf
sudo gedit /etc/security/group.conf
*;*;*;Al00002400;floppy,audio,cdrom,video,plugdev,scanner
juste avant
#
# End of group.conf file
#
Dans Al00002400
, c'est bien la lettre
l qui suit le A. Cette plage définit l'heure à
laquelle le service est actif.
On pourrait par exemple permettre au prof dupont de jouer et d'avoir le son après les heures de travail en l'intégrant aux groupes games et audio. On ajoute la ligne :
*;*;dupont;!Wk08001700;games,audio
Le pavé numérique activé dès la fenêtre de connexion : assurez-vous que le dépôt "universe" est activé. Installez le paquet numlockx avec avec la commande :
sudo apt-get install numlockx
Effectuez une copie de sauvegarde de votre fichier
/etc/X11/gdm/Init/Default
existant.
sudo cp /etc/X11/gdm/Init/Default /etc/X11/gdm/Init/Default_backup
sudo gedit/etc/X11/gdm/Init/Default
Ajoutez les lignes suivantes au-dessus de la ligne "exit 0" (ce devrait être la dernière ligne du fichier).
if [ -x /usr/bin/numlockx ]; then
/usr/bin/numlockx on
fi
Les changements prendront effet lors de votre
prochaine connexion à GNOME. Si vous voulez le tester
dès maintenant, désactivez la touche Num Lock (Verr
num) et redémarrez GNOME avec
Ctrl+Alt+Backspace
Droits à rectifier :
certains tutoriels indiquent une modification des
droits sur /usr/bin/smbmnt
alors dans le
doute :
sudo chmod +s /usr/bin/smbmnt
Créer le répertoire qui contiendra les home des
utilisateurs LDAP dans
/home/disque1/users
sudo mkdir /home/disque1 && mkdir /home/disque1/users
Redémarrer la machine.
Étape 6 : réglages par défaut d'un nouvel utilisateur LDAP
Créer un compte modèle « CompteModele »
pour lequel on réalise toutes les installations et
réglages des logiciels (proxy système, préférences
Firefox, paquet de polices, etc) puis dans
/home/disque1/users
, supprimer tous les
répertoires des utilisateurs LDAP déjà
existants :
sudo rm -r /home/disque1/users/ && mkdir /home/disque1/users/
puis exécuter la commande ci-dessous pour copier
les réglages dans /etc/skel
sudo cp -r /home/CompteModele/.[!.]* /etc/skel/
À la première connexion d'un utilisateur, son home
local va être créé dans
/home/disque1/users
et contiendra
automatiquement les réglages par défaut copié par
PAM.
Il faut penser à refaire cette manipulation à chaque ajout de programme ou de modification des réglages de l'utilisateur.
Open Office renvoie un message d'erreur à la
première connexion (après création du home local et
copie du skel) « Une autre instance de OOo a accès à
vos paramètres personnels ou les bloque ». Ce message
provient du fait que dans
/home/CompteModele/.openoffice.org2
, il
y a un fichier .lock qui contient le nom du login du
CompteModele ainsi que le nom du poste (host). Pour
éviter le message d'erreur, il suffit de supprimer ce
fichier avant copie du home dans le skel.
Bien que la barre personnelle de Firefox contienne
déjà des marque-pages vers les liens communs les plus
fréquents, certains utilisateurs ont émis le souhait
d'avoir sur le bureau un raccourci vers certains
sites. Lors de la copie du home dans le skel, Desktop
n'y est pas copié, chacun gardant son propre bureau.
Afin que ce raccourci apparaisse chez tous les
utilisateurs, créer un répertoire Desktop dans
/etc/skel
et copier le raccourci voulu à
l'intérieur. Après la connexion, ce répertoire, copié
dans le home des utilisateurs, rend le raccourci
disponible sur le bureau.
Lors de la première connexion par gdm, la copie des fichiers du skel renvoie un message de création des fichiers qu'il faut valider. La fenêtre est surdimensionnée et on ne voit plus le bouton valider ... Comment éviter ce message ?
Étape 7 : écriture dans un fichier journal
Un script shell à la connexion permet de renseigner, dans un fichier journal, le nom du poste, la date, l'heure, le login et le système d'exploitation. Les informations sont inscrites dans le fichier de log pclog.txt sur le serveur pédagogique.
Créer un fichier « suivilog.sh », le rendre exécutable (bouton droit, onglet permissions) et le copier dans le partage config sur MonServeur.
#! /bin/sh
OsduPC=`echo Ubuntu`
ladate=`date`
lheure=`time`
NomduPoste=`hostname`
NomUtilisateur=`printenv LOGNAME`
echo $OsduPC $ladate $lheure $NomduPoste $NomUtilisateur >>/tmp/.config/pclog.txt
Dans système/préférences/sessions
,
onglet "programmes au démarrage", ajouter dans
"commande de démarrage"
/tmp/.config/suivilog.sh
Résultat dans le fichier de log :
Ubuntu mercredi 9 mai 2007, 13:38:00
(UTC+0200) S102-P13 Login_Utilisateur
Astuce
Si la connexion est rejetée après un mauvais réglage d'un common PAM ou de GDM, passer en mode console avec CTRL+ALT+F1, taper le login et le mot de passe d'un utilisateur administrateur, et une fois logué, éditer le fichier à modifier avec vi :
sudo vi /etc/pam.d/gdm
Commandes vi : « i » insérer, « w: » enregistrer, « q: » quitter
Repasser en mode graphique avec CTRL+ALT+F7 et retenter une connexion.
Annexe : réglages pour un ordinateur portable
Pour permettre la connexion au poste sans être connecté au réseau hébergeant le serveur LDAP, installer les paquets supplémentaires :
sudo apt-get install nss-updatedb libnss-db libpam-ccreds
Réaliser les réglages suivants en étant connecté au réseau du LDAP :
sudo nss_updatedb ldap
Ceci a pour effet de mettre en cache local les
password et les group du LDAP, en renseignant les
fichiers « passwd.db » et « group.db » dans
/var/lib/misc
avec les données du LDAP,
et donc de permettre à un utilisateur LDAP de se
connecter à la station sans réseau.
Modifier les 2 premières lignes du fichier
/etc/nsswitch.conf
comme
ci-dessous :
sudo gedit /etc/nsswitch.conf
passwd: files ldap [NOTFOUND=return] db
group: files ldap [NOTFOUND=return] db
Modifier le fichier suivant
/etc/pam.d/common-auth
:
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass
auth required pam_group.so use_first_pass
auth required pam_mount.so use_first_pass
auth [authinfo_unavail=ignore success=1 default=die] pam_ldap.so use_first_pass
auth [default=done] pam_ccreds.so action=validate use_first_pass
auth [default=done] pam_ccreds.so action=store use_first_pass
auth [default=done] pam_ccreds.so action=update use_first_pass
Editer /etc/pam.d/gdm
et
/etc/pam.d/gdm-autologin
et remplacez
leur contenu par ceci :
sudo gedit /etc/pam.d/gdm
sudo gedit /etc/pam.d/gdm-autologin
#%PAM-1.0
auth required pam_mount.so
auth required pam_group.so use_first_pass
auth sufficient pam_unix.so use_first_pass
auth sufficient pam_ldap.so use_first_pass
auth required pam_env.so
account sufficient pam_ldap.so
account sufficient pam_unix.so
password required pam_unix.so nullok obscure min=4 max=8 md5
session required pam_unix.so
session optional pam_mkhomedir.so skel=/etc/skel/
session optional pam_mount.so
Les autres fichiers common de pam.d
/etc/pam.d/common-xxxx
ne sont pas
modifiés.
Le réseau du collège en en DHCP mais derrière un proxy IP_MonServeur:port. Ce proxy est « transmis » aux utilisateurs LDAP par le skel. Lorsque l'utilisateur LDAP se connecte sur la station mais en la branchant sur un autre réseau, il ne pourra se connecter à internet qu'en changeant les paramètres du proxy dans le système et dans le navigateur. Comment automatiser le changement de paramètres ?
Ne pas démarrer le poste avec le câble réseau connecté à un autre réseau sinon le poste ne démarre pas correctement et la connexion de l'utilisateur est très longue. Brancher le câble après la connexion totale de l'utilisateur pour bénéficier d'internet.
Conclusion
La procédure décrite ici est spécifique à notre environnement mais l'essentiel devrait être réutilisable sans faire de grandes modifications. Elle regroupe différentes informations récoltées au gré de nos recherches et de nos « rencontres » sur le Net. Tous nos remerciements à Mhedi, Ramsès, Lionel et à tous ceux qui ont partagé leurs expériences.
Cette procédure a été testée et fonctionne avec les 17 postes Ubuntu de la salle informatique et également avec un ordinateur portable. L'ordinateur de la salle des profs a eu droit à une installation particulière décrite dans un autre billet.
Maintenant que les postes clients Ubuntu bénéficient de l'authentification avec LDAP, ce sont une cinquantaine de profs et plus de 500 élèves qui peuvent se connecter au réseau du collège avec leur identifiant personnel.