Mémo Autofs ( + LDAP)

Autofs ou automount (http://www.autofs.org/) est un système de « montage » automatique de partition ou de système de fichier « à l’accès ». En d’autres termes, autofs permet de ne monter un périphérique ou un système de fichier qu’au moment ou l’utilisateur tente d’y accéder et éventuellement de le démonter proprement après un délais choisi lorsqu’il n’est plus accédé. Ces partitions ou systèmes de fichiers peuvent être :

  • un périphérique de bloc du type lecteur CD, clé USB, partition de disque, partitions réseau (NBD ou iSCSI),
  • un montage NFS,
  • un montage Samba/CIFS.

Dans le cadre de montage réseaux, le système n’effectue le montage qu’en cas de besoins ce qui limite le trafic et affranchi les machines de connexions persistantes ou encore de problèmes de « re-montage ».

Autofs se configure via le fichier « autofs » (placé dans « /etc/conf.d » sous Gentoo, dans « /etc/sysconfig/ » sous CentOS ou encore dans « /etc/default » sous Debian) et par le fichier « auto.master » placé dans « /etc », ou « /etc/autofs » en fonction des distributions. La version 5 d’autofs introduit le fichier « autofs_ldap_auth.conf » pour l’utilisation d’LDAP.

Installation

Autofs est disponible sur la plupart des distributions Linux. Vous l’installerez sous debian par aptitude ou apt-get :

debian:~# aptitude install autofs
...
Note: selecting "autofs5" instead of the
      virtual package "autofs"
The following NEW packages will be installed:
  autofs5 libevent-1.4-2{a} libgssglue1{a} libnfsidmap2{a} librpcsecgss3{a}
  nfs-common{a} portmap{a}
...
Creating config file /etc/auto.master with new version
 
Creating config file /etc/auto.net with new version
 
Creating config file /etc/auto.misc with new version
 
Creating config file /etc/auto.smb with new version
 
Creating config file /etc/default/autofs with new version
...

Sur Gentoo via emerge :

17:04 srv ~ # emerge -av autofs
 
Calculating dependencies... done!
[ebuild   N   ] net-fs/autofs-4.1.3-r9  USE="ldap" 144 kB
...
Would you like to merge these packages? [Yes/No]

Note : Sous Gentoo, pensez à activer l’autofs dans le kernel :

File systems  --->
...
  < * > Kernel automounter support
  < * > Kernel automounter version 4 support (also supports v3)
...

Avec les versions supérieures ou égales à 4.X, vous pourrez rencontrer ce message d’erreur :

srv ~ # /etc/init.d/autofs start
 * Starting automounter ...
/usr/sbin/automount: kernel protocol version 5.00 or above required.      [ !! ]

Afin de le faire disparaître, n’activez QUE « Kernel automounter version 4 support (also supports v3) » :

File systems  --->
...
  <   > Kernel automounter support
  < M > Kernel automounter version 4 support (also supports v3)
...

et sous CentOS avec yum :

[root@centos ~]# yum install autofs
Setting up Install Process
...
Installed: autofs.x86_64 1:4.1.3-238
Complete!

Configuration simple (locale)

Dans ce premier exemple, nous configurerons « autofs » afin de :

  • monter automatiquement le CDRom d’une machine lors de l’accès au répertoire « /mnt/cdrom » ;
  • monter les « home directory » des utilisateurs dans « /users/login_utilisateur » par NFS ;
  • monter la partition locale « /dev/md1 » lors de l’accès au répertoire « /export/local »
  • monter le répertoire distant samba par accès à « /export/echange ».

Fichier autofs simple

Cette configuration étant relativement simple, elle n’utilise que peu le fichier de configuration « autofs ». Nous y définirons cependant les valeurs par défaut de

  • TIMEOUT qui définit le délais au delà duquel un périphérique qui n’est plus accédé doit être démonté ;
  • MASTER_MAP_NAME qui précise le fichier à consulter pour localiser le fichier définissant les points de montages à utiliser.
srv ~ # cat /etc/conf.d/autofs
#
# Define default options for autofs.
#
# MASTER_MAP_NAME - default map name for the master map.
#
MASTER_MAP_NAME="/etc/autofs/auto.master"
#
# TIMEOUT - set the default mount timeout (default 600).
#
TIMEOUT=300
...

Fichier auto.master simple

Est définit ensuite le fichier de configuration principale, « auto.master ». Sa syntaxe est du type :

[répertoire des points de montage]      [fichier des données]      [options]

  • [répertoire des points de montage] est le répertoire parent des point de montage ;
  • [fichier des données] est un fichier définissant le nom du point de montage et le périphérique associé ;
  • [options] sont les options d’autofs pour ce montage.

Dans l’exemple proposé, nous obtenons :

/mnt            /etc/autofs/auto.media       --ghost
/users          /etc/autofs/auto.home        -t60
/export         /etc/autofs/auto.export      -t60 --ghost

L’option « -t » définit le temps à attendre avant que les montages définit dans le fichier « /etc/autofs/auto.xxxx » ne soit démonté(s). Pour « /mnt » ou aucun « timeout » n’est définit, la valeur « TIMEOUT » définie dans le fichier de configuration « autofs » s’applique (ici 300 secondes).

Deux montages sont effectués dans le répertoire « /export » : celui de /dev/md1 (local) et le montage samba (echange).

L’option « ghost » crée un répertoire pour le montage du média désiré. Dans le cas ou cette option est omise, l’utilisateur devra connaître précisément le point de montage d’un périphérique pour y accéder.

Exemple avec l’option gost :

srv ~ # /etc/init.d/autofs status
 * status:  stopped
srv ~ # ls /export
srv ~ # /etc/init.d/autofs start
 * Starting automounter ...      [ ok ]
srv ~ # ls /export
echange  local
srv export # mount
... (pas de montage de /dev/md1)
srv ~ # cd /export/local/
srv local # mount
...
/dev/md1 on /export/local type xfs (rw)
srv local #

Exemple sans l’otpion « ghost » :

srv ~ # /etc/init.d/autofs status
 * status:  stopped
srv ~ # ls /export
srv ~ # /etc/init.d/autofs start
 * Starting automounter ...       [ ok ]
srv ~ # ls /export
srv ~ # cd /export/local
srv local # ls ..
local

Sans l’option « ghost » le point de montage est créé lorsqu’on y accède.

La page de man d' »auto.master » (http://linux.die.net/man/5/auto.master) donne plus de précision sur les options disponibles.

Carte de montage simple (auto.xxxx)

Derniers éléments de la chaîne, les fichiers de configuration des points de montage.

Leur syntaxe est de la forme :

[Point de montage]      [Options de montage]      [source]

Montage de médias locaux

L’exemple nécessite 3 fichiers. Le premier, « /etc/autofs/auto.media », concerne le montage du CD-Rom.

srv ~ # cat /etc/autofs/auto.media
cdrom		-fstype=auto,ro,nosuid,nodev	:/dev/cdrom

La syntaxe est explicite. Dans le répertoire « /mnt » (définit dans auto.master), nous trouverons le répertoire « cdrom ». Lorsque nous y entrerons, AutoFS montera en lecture seule (ro) le périphérique « /dev/cdrom » en tentant de définir le système de fichier. Les options de montage sont les mêmes que pour « fstab » ou plus généralement que pour la commande « mount ».

Montage des homes via NFS

Le second fichier gère le montage des répertoires utilisateurs en NFS.

srv ~ # cat /etc/autofs/auto.home
*		-fstype=nfs,rw,soft,intr,sec=sys fileserver.rez0.lan:/users/&

Nous ne reviendrons pas sur les options disponibles pour les montages NFS, ce n’est pas le but de ce post déjà bien trop long.

Notons simplement que :

  • « * » définit tous les point de montage possible de /users/. Concrètement, lors de la connexion d’un utilisateur à « srv.rez0.lan » SON home, et seulement le sien sera monté en NFS depuis le serveur « fileserver.rez0.lan ».
  • « -fstype=nfs » Spécifie que le type de système de fichier attendu est du NFS. La suite de cette partie correspond aux options de montage NFS.
  • « fileserver.rez0.lan:/users/& » Précise que les homes sont importés depuis « fileserver.rez0.lan » et sont localisé dans « /users/quelque_chose ».

Concrètement, quand « root » liste le contenu de « /users/ » sur « srv.rez0.lan », le répertoire ne contiens rien :

srv ~ # ls -al /users/
total 0
drwxr-xr-x 2 root root  0 Mar 22 19:59 .
drwxr-xr-x 3 root root 20 Mar  4 19:22 ..
srv ~ # mount
... (rien de spécial)

mais si un utilisateur ce logue, sont répertoire personnel, et seulement son répertoire, est monté depuis le serveur distant :

srv ~ # su - fhh
fhh@srv ~ $  pwd
/users/fhh
fhh@srv ~ $ ls -al ..
total 4
drwxr-xr-x  3 root root     0 Mar 22 20:02 .
drwxr-xr-x  3 root root    20 Mar  4 19:22 ..
drwx--S--- 31 fhh  users 4096 Mar 15 23:38 fhh
fhh@srv ~ $ ^d
srv ~ # mount
...
fileserver.rez0.lan:/users/fhh on /users/fhh type nfs (rw,soft,intr,sec=sys,sloppy,addr=10.0.10.12)

si un autre utilisateur ce logue à son tour, son répertoire est également monté :

srv ~ # su - fhh
fhh@srv ~ $  pwd
/users/fhh
fhh@srv ~ $  ^d
srv ~ # su - nours
nours@srv ~ $  pwd
/users/nours
nours@srv ~ $ ^d
srv ~ # mount
...
fileserver.rez0.lan:/users/fhh on /users/fhh type nfs (rw,soft,intr,sec=sys,sloppy,addr=10.0.10.12)
fileserver.rez0.lan:/users/nours on /users/nours type nfs (rw,soft,intr,sec=sys,sloppy,addr=10.0.10.12)

Après le délai définit dans « auto.master » ou la valeur par défaut définie dans « autofs », le répertoire de l’utilisateur est démonté.

Montages SAMBA

Le dernier fichier de donnée, « auto.export », spécifie les volumes montés dans « /export ». Il s’agit tous d’abord du répertoire « local » qui monte le périphérique « /dev/md1 » tout comme nous montions plus haut le lecteur de CD-Rom puis du répertoire « echange » qui monte le partage samba « common » du serveur « fileserver.rez0.lan » en tant qu’utilisateur « nours » avec le mot de passe « jolimotdepasse » :

srv ~ # cat /etc/autofs/auto.export
local	-fstype=xfs,rw	:/dev/md1
echange        -fstype=smbfs,uid=equipe,gid=users,username=nours,password=jolimotdepasse,user	://fileserver.rez0.lan/common

La syntaxe de ce fichier est relativement explicite. Le répertoire échange est un montage samba ( » -fstype=smbfs ») monté sous l’UID « equipe » et le GID « users » par l’utilisateur « nours » utilisant le mot de passe « jolimotdepasse ». N’importe quel utilisateur pourra monté ce partage (« user »). Si le montage ne nécessite pas de mot de passe, définissez password à « chaîne vide » (password= » »).

L’auto montage de samba peut être « modernisé » comme suit pour l’utilisation de « CIFS » :

echange        -fstype=cifs,uid=equipe,gid=users,user=nours,pass=jolimotdepasse,user	  ://fileserver.rez0.lan/common

Enfin par soucis de sécurité, il n’est pas très heureux de laisser les identifiants de l’utilisateur effectuant le montage en clair dans « la carte » des montage d’autofs. Nous pourrons donc écrire ces informations dans un fichier texte lisible uniquement par l’administrateur :

srv ~ # cat /etc/autofs/auto.export
...
echange        -fstype=cifs,uid=equipe,gid=users,credentials=/root/.smb.passwd,user	  ://fileserver.rez0.lan/common
srv ~ # ls -al /root/
total 64
...
-rw-------  1 root root     31 Mar 23 12:47 .smb.passwd
...
srv ~ # cat /root/.smb.passwd
username=nours
password=jolimotdepasse
srv ~ # /etc/init.d/autofs restart
 * Stopping automounter ...   [ ok ]
 * Starting automounter ...     [ ok ]
srv ~ # su - fhh
fhh@srv ~ $ ls /export/echange/
0493.pdf
...

Exécution de scripts

AutoFS permet d’exécuter des scripts effectuant les montages lors de l’accès a certain points de montage. Les différents packages AutoFS en proposent généralement un pour les montage Samba.

Les scripts sont directement appelés depuis « auto.master » :

srv ~ # cat /etc/autofs/auto.master
...
/net            /etc/auto.smb -t300

Avec auto.smb le script suivant sous Gentoo Linux par exemple :

#!/bin/bash
 
# $Id: auto.smb,v 1.3 2005/04/05 13:02:09 raven Exp $
 
# This file must be executable to work! chmod 755!
 
key="$1"
mountopts="-fstype=cifs"
smbopts=""
credfile="/etc/auto.smb.$key"
 
for P in /bin /sbin /usr/bin /usr/sbin
do
	if [ -x $P/smbclient ]
	then
		SMBCLIENT=$P/smbclient
		break
	fi
done
 
[ -x $SMBCLIENT ] || exit 1
 
if [ -e $credfile ]; then
	mountopts="$mountopts,credentials=$credfile"
	smbopts="-A $credfile"
else
	smbopts="-N"
fi
 
$SMBCLIENT $smbopts -gL $key 2&gt;/dev/null| awk -v key="$key" -v opts="$mountopts" -F'|' -- '
	BEGIN	{ ORS=""; first=1 }
	/Disk/	{ if (first) { print opts; first=0 }; sub(/ /, "\\ ", $2); print " \\\n\t /" $2, "://" key "/" $2 }
	END 	{ if (!first) print "\n"; else exit 1 }

Ce script part chercher les identifiants de connexion dans /etc/auto.smb.$key. Le tout donne à l’exécution :

srv fhh # cat /etc/auto.smb.fileserver
username=fhh
password=jolimotdepasse
srv fhh # /etc/init.d/autofs restart
 * Stopping automounter ...                          [ ok ]
 * Starting automounter ...                          [ ok ]
srv fhh # ls /net/fileserver/fhh
0493.pdf
...

Montage automatique via SSHFS

Autofs permet d’automatiser les montages SSHFS. Un post spécial y a déjà été consacré dans les colonnes d’Admin-Linux Fr. N’hésitez pas a le consulter : Montage SSHFS via AUTOFS 5 multi-utilisateurs

Configuration AutoFS + LDAP

Comme vous aurez pu en juger par l’exemple précédent, la mise en place d’AutoFS est relativement simple. Dans le monde réel cependant, il est peu pratique d’avoir à changer X fichiers sur Y machines pour modifier le montage des répertories personnels des utilisateurs. Surtout quand Y n’arrête pas de croître… AutoFS permet de centraliser les informations de montage via LDAP ou NIS.

Les données rangées dans le NIS ou le LDAP sont l' »auto.master » et les « auto.xxxx ».

Le fait de centraliser « auto.master » peut cependant poser quelques problèmes (périphériques à monter différents en fonction des postes, etc) sauf sur des parcs ou toutes les machines sont rigoureusement identiques. Le bon compromis semble être de disposer localement d’un « auto.master » et de ne centraliser via l’annuaire que les données identiques à chaque client.

« auto.master » Utilisant un annuaire LDAP

En reprenant l’exemple précédent, nous obtiendrons un fichier auto.master local ressemblant à :

/mnt            /etc/autofs/auto.media       --ghost
/users          ldap:ldapsrv.rez0.lan:ou=auto.home     -t60
/export         /etc/autofs/auto.export      -t60 --ghost

Rien ne change donc en ce qui concerne les montages spécifiques à la machine (/mnt et /export). Cependant, les données relatives au montages des comptes utilisateurs (dans /users) est au format LDAP (« ldap:« ) et localisé sur le serveur « ldapsrv.rez0.lan » dans l’unité organisationnelle « auto.home » (d’où le « /users ldap:ldapsrv.rez0.lan:ou=auto.home -t60 » ).

Création des entrées dans l’annuaire LDAP

Afin d’impacter de façon minimale l’arbre LDAP, nous lui ajoutons simplement une unité organisationnelle (OU) nomée autofs dans laquelle nous rangeons TOUS ce qui concerne l’automontage. Sont créé ensuite les OU des cartes de montages qui contiennent l’équivalent des lignes d' »auto.xxxx » sous forme de Common Name (CN). Ce qui donne un arbre du type :

o=admin-linux.fr
|-- ou=computers
|-- ou=netgroups
|-- ou=groups
|-- ou=users
`-- ou=autofs
    `-- ou=auto.home
        `-- cn=\/

obtenu via un fichier LDIF du type :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dn: ou=autofs, o=admin-linux.fr
ou: autofs
objectClass: top 
objectClass: organizationalUnit
 
dn: ou=auto.home, ou=autofs, o=admin-linux.fr
ou: auto.home
objectClass: top 
objectClass: automountMap
 
dn: cn=\/,ou=auto.home, ou=autofs, o=admin-linux.fr
objectClass: top 
objectClass: automount
automountInformation: -fstype=nfs,rw,soft,intr,sec=sys    fileserver.rez0.lan:/users/&
cn: /
  • ligne 1 à 5, nous créons l’OU « autofs » ;
  • ligne 6 à 10, nous créons une nouvelle OU « auto.home » qui équivaudra à nos fichiers « auto.xxxx » ;
  • enfin, ligne 11 à 15, nous peuplons l’entrée « auto.home » via le CN « / » correspondant au caractère * du fichier simple… notez qu’il doit être échappé par un « \ » d’où l’entrée « \/ ».

Nous retrouvons dans le CN toutes les informations nécessaires au montage des comptes tel qu' »fstype=nfs », le mode « rw » pour la lecture écriture, les coordonnées du serveur exportant les comptes ainsi que le nom du partage à monter. Le compte utilisateur est symbolisé par le joker « & ».

Modification du fichier « autofs » pour utiliser LDAP

Afin qu’autofs trouve la localisation de l’unité organisationnelle définie dans « auto.master », il est nécessaire de compléter le fichier « autofs » afin d’y préciser entre autre :

  • l’url du serveur LDAP en renseignant la variable « LDAP_URI » ;
  • la base a partir de laquelle autofs recherchera les cartes de montage « SEARCH_BASE » ;
  • le type d’objets utilisé via les variables « MAP_OBJECT_CLASS » (type d’objet équivalent au fichier auto.xxxx), « ENTRY_OBJECT_CLASS » (type d’objet équivalent à une ligne du fichier auto.xxxx), « MAP_ATTRIBUTE » (type de l’attribut correspondant au fichier auto.xxxx), « ENTRY_ATTRIBUTE » (type de l’attribut équivalent à une ligne du fichier auto.xxxx) et « VALUE_ATTRIBUTE » (sous quel attribut sont définit les paramètres et le serveurs à monter – ici automountInformation -) ;
  • le fichier contenant les paramètres d’authentification à l’annuaire via la variable « AUTH_CONF_FILE« .

En reprenant les données de notre exemple, nous obtenons un fichier « autofs » ressemblant à ceci :

srv ~ # cat /etc/conf.d/autofs
#
# Define default options for autofs.
#
# MASTER_MAP_NAME - default map name for the master map.
#
MASTER_MAP_NAME="/etc/autofs/auto.master"
#
# TIMEOUT - set the default mount timeout (default 600).
#
TIMEOUT=300
#
# Define server URIs
#
LDAP_URI="ldap://ldapsrv.rez0.lan"
#
# SEARCH_BASE - base dn to use for searching for map search dn.
#
SEARCH_BASE="ou=autofs,o=admin-linux.fr"
#
# Other common LDAP nameing
#
MAP_OBJECT_CLASS="automountMap"
ENTRY_OBJECT_CLASS="automount"
MAP_ATTRIBUTE="ou"
ENTRY_ATTRIBUTE="cn"
VALUE_ATTRIBUTE="automountInformation"
AUTH_CONF_FILE="/etc/autofs_ldap_auth.conf"

Comme vous pouvez le constater, nous retrouvons les paramètres d’un fichier de configuration standard (« MASTER_MAP_NAME » et « TIMEOUT ») auxquels sont ajoutés les paramètres spécifiques à l’utilisation d’LDAP.

« autofs_ldap_auth.conf » Pour l’authentification sur l’annuaire

Dernier volet de la mise en place d’autofs sur LDAP : les paramètres de connexions à l’annuaire. Tous ces paramètres sont définis dans le fichier « autofs_ldap_auth.conf » au format XML. Dans le cas de l’exemple détaillé ici, il s’agit d’une connexion simpliste sans SSL ni TLS. Le fichier de configuration est donc très épuré :

<autofs_ldap_sasl_conf
        usetls="no"
        tlsrequired="no"
        authrequired="no"
/>

Le fichier est largement commenté et les options sont relativement explicites. Vous pourrez au travers de ce fichier permettre aux clients de s’authentifier sur l’annuaire, d’utiliser le SASL, de définir le mode d’authentification, etc…

Test de fonctionnement

Une fois toutes les modifications effectuées, un redémarrage du service est nécessaire.

srv ~ # /etc/init.d/autofs restart
Stopping automount:                                        [  OK  ]
Starting automount:                                        [  OK  ]

Enfin le test de fonctionnement s’effectue par un simple login sur un compte utilisateur :

srv ~ #  su - fhh
[fhh@srv ~]$ mount
...
fileserver.rez0.lan:/users/fhh on /users/fhh type nfs (rw,soft,intr,sec=sys,addr=10.0.10.12)

Un mot sur nsswitch.conf

La configuration d' »automount » présentée ici ne nécessite pas de modification du fichier de configuration des sources de données « /etc/nsswitch.conf » (auto.master est un fichier local…). Afin de rester cohérent, vous pourrez cependant modifier ce fichier de configuration en précisant ldap comme source de donnée :

[fhh@abner ~]$ grep automount /etc/nsswitch.conf 
automount:  files ldap

Conclusion

Face à des outils tels que HAL, ou son remplaçant DeviceKit, « autofs » peut semblé vieillissant, mais les finalités de ces outils sont TRÈS différentes ! Ils sont en réalité complémentaires, l’utilisation d’HAL gérera parfaitement les connexions des périphériques locaux (clés USB, lecteurs CD-Rom, etc…) tandis qu' »autofs » s’occupera des montages des comptes utilisateurs ou des partages réseaux. Les plus gros atouts d' »autofs » en production sont incontestablement sa robustesse et sa stabilité.

Références

man automount : http://linux.die.net/man/8/automount
man autofs : http://linux.die.net/man/5/autofs et http://linux.die.net/man/8/autofs
man auto.master : http://linux.die.net/man/5/auto.master

2 réflexions au sujet de « Mémo Autofs ( + LDAP) »

  1. Bonjour, merci pour ces explications.

    Une question, j’aimerais exporter les homes d’utilisateurs se trouvant dans plusieurs dossiers…c’est à dire :

    /home/group1/ssgroup1/$USER
    /home/group2/ssgroup2/$USER
    /home/group3/ssgroup3/$USER

    etc…

    Est il possible d’avoir ce type de schéma avec autofs et ldap ?

    Merci d’avance

    1. Cela semble tout à fait faisable par exemple en créant une entrée par sous groupe dans l’annuaire (si il n’y en a pas trop).

      Après, il doit y avoir moyen de jouer avec les wildcards… mais là il faut tester…

      FHH

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *