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 :

  1. Adresse ip du serveur ldap utilisé: IP_MonServeur
  2. Nom distinctif de la base de recherche du LDAP utilisé. ( Par exemple, pour nous c’était « o=gouv,c=fr » sans espaces )
  3. Ldap version to use: validez 3 avec « entrée »
  4. apt nous dit ensuite que pour libnss-ldap, nsswitch.conf n’est pas géré automatiquement.
  5. Faut-il créer une base de données locale pour l’administrateur?: non
  6. 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_pass

É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.

[Mise à jour du 03 avril 2008] : Cédric, un lecteur du blog, a trouvé une solution pour éviter de se retrouver avec un message de confirmation lors de la création des dossiers.
Dans /etc/pam.d/common-session :

sudo gedit /etc/pam.d/common-session
session required pam_unix.so
session optional pam_foreground.so
session required pam_mkhomedir.so skel=/etc/skel umask=0066 silent

La présence de silent permet d’éviter le message de confirmation. Merci à Cédric pour cette trouvaille !

  30 commentaires

Authentification LDAP avec une station DELL GX110

Laurent, prof de Mathématiques et PRI (Personne Ressource Informatique), essaye de permettre au poste client Ubuntu de la salle des profs de s’authentifier auprès d’un serveur LDAP et de monter les partages et le home distant de l’utilisateur.

Sur le poste utilisé en salle des profs, j’ai rencontré de gros problèmes de configuration qui m’ont conduit à adapter les installations précédentes. Voici les détails matériels du poste :

  • Chipset de la carte mère Intel Whitney i810E
  • Carte vidéo intégrée Intel(R) 82810E (Type du contrôleur graphique Intel i752 )
  • Carte son intégrée AC’97 Audio Controller (Type du contrôleur audio Intel 82801AA ICH )
  • Carte réseau intégrée 3Com 3C920 Integrated Fast Ethernet Controller

Les deux problèmes majeurs sont :

  • Une lenteur extrême à la connexion avec les réglages précédents de PAM (curieusement avec un seul
    volume à monter, ça passe sans problème mais dès 2 volumes à monter, il faut au moins 15 minutes
    pour arriver au bout de la procédure de connexion).
  • Impossible de passer en mode console avec CTRL-ALT-F1, l’écran clignote sans fin dans tous les
    sens. Pourtant, si je lance Ubuntu en mode safe recovery, ma console est tout ce qui a de plus
    normale. Cela m’a orienté vers un problème de pilote utilisé par Gnome mais les nombreuses
    informations glanées dans les forums ne sont pas venues à bout du problème. (Pour info, ça ne le fait
    que pour EDGY et pas pour DAPPER alors que dans les 2 cas, le pilote i810 est utilisé, idem avec le
    pilote intel.) Sur le forum, j’ai trouvé une discussion à ce sujet mais la solution n’a pas encore été trouvée.

Afin de pouvoir utiliser ce poste quand même avec le réseau du collège, j’ai pris le parti de ne mettre
qu’un seul volume à monter automatiquement par PAM, le home personnel de l’utilisateur sur le
serveur.

Etant donné que cette machine est utilisé par un seul type d’utilisateurs (les profs), avec mon compte
modèle, j’ai utilisé « Raccourcis, Se connecter à un serveur » pour les trois partages utilisés par les
professeurs :

  • Type de service: Partage Windows
  • Serveur: MonServeur
  • Partage: NomPartage

Par le skel, ces trois « raccourcis » sont présents sur tous les bureaux des utilisateurs.
En double cliquant dessus, leur login est déjà renseigné et il leur suffit de renseigner le mot de passe
pour se connecter à ces partages, c’est un moindre mal pour contourner mon problème et permettre
aux utilisateur d’accéder aux mêmes ressources que les stations Windows voisines…

  1 commentaire

Mathenpoche sous Ubuntu

Lorsque je vais en salle informatique avec mes élèves, c’est souvent pour qu’ils utilisent Mathenpoche, un ensemble d’activités interactives couvrant la totalité des programmes de mathématiques du collège.

Mathenpoche est diffusé sous licence libre (GPL) et peut s’utiliser en ligne à l’adresse suivante : http://mathenpoche.sesamath.net/

Pour utiliser Mathenpoche, il faut au préalable avoir installé le player Flash (disponible dans le dépôt backports) ainsi que le paquet msttcorefonts (disponible dans le dépôt multiverse) pour l’affichage des textes avec ces polices dans les animations Flash.

Mathenpoche est alors utilisable sous Ubuntu, mais il subsiste des problèmes d’affichage. Certaines consignes ne s’affichent pas correctement. En effet, Mathenpoche utilise aussi la police Tahoma.

Il faut donc récupérer la police tahoma.ttf puis l’installer par exemple avec les polices msttcorefonts avec la commande suivante (si la police se trouve sur le bureau) :

sudo mv ~/Desktop/tahoma.ttf /usr/share/fonts/truetype/msttcorefonts/tahoma.ttf

Reconstruire les fichiers de cache d’information de polices :

sudo fc-cache -f -v

Après cette manip, mes élèves pourront utiliser pleinement Mathenpoche sous Ubuntu.

  6 commentaires