Création automatique de répertoires de base sur NFS
Quand on utilise auf-django-users pour créer des comptes utilisateurs sur le serveur NFS, on ne crée pas en même temps le répertoire de base correspondant lors de l'ajout du login dans la base de données. Ce répertoire est créé par une autre méthode :
Un script chargé de créer des répertoires est placé sur NFS et écoute sur un port bien défini, le port 10 par exemple.
Lorsqu'un compte réussi à s'authentifier depuis un poste client, le client se connecte au serveur NFS et vérifie l'existence ou non du répertoire de l'utilisateur. Et dans le cas où le répertoire n'est pas encore créé, il est tout simplement créé. Dans le cas contraire, il est déjà créé et donc l'utilisateur retrouve son répertoire tel qu'il était.
Ce qui signifie qu'il faut agir à deux niveaux : côté serveur, et côté client
Côté serveur NFS
# vi /usr/local/bin/pam_inetd_mkhomedir
1 #!/bin/sh
2
3 while read COMMAND LOGIN_EXT RESTE
4 do
5
6 if [ ${COMMAND} != "mkdir" ] ; then
7 echo "commande inconnue : $COMMAND"
8 exit 1
9 fi
10
11 LOGIN=`echo $LOGIN_EXT | tr -dc A-Za-z0-9_.-@`
12
13 if ! id "${LOGIN}" > /dev/null
14 then
15 echo "$0 erreur : login $LOGIN introuvable" >&2
16 exit 1
17 fi
18
19 HD=`getent passwd ${LOGIN}|cut -d: -f 6`
20
21 if [ ! -e ${HD} ]
22 then
23
24 mkdir -pv ${HD} >> /var/log/mkdir.log 2>&1
25 cd ${HD}
26 chown -R $LOGIN:users ${HD}
27 chmod 700 ${HD}
28 PART=`df -Pl ${HD} | tail -1 | cut -d' ' -f1`
29 /usr/sbin/quotatool -u $LOGIN -b -l 800000 -q 800000 ${PART}
30 echo $(date) mkdir $HD >>/var/log/mkdir.log
31 exit 0
32 else
33 echo "$HD existe"
34 exit 1
35 fi
36
37 done
Ce script signifie qu'on a quota activé sur notre partition /home, sinon, juste éliminer la ligne concernant quota.
# chmod +x /usr/local/bin/pam_inetd_mkhomedir
Puis pour ceux qui utilisent inetd, dans /etc/inetd.conf, ajouter cette ligne : 10 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/pam_inetd_mkhomedir
Ceux qui utilisent xinetd, entrer dans le répertoire /etc/xinetd.d/ et se baser sur un exemple pour faire écouter sur le port 10 : créer un service mkhomedir et mettre dedans :
service mkhomedir { disable = no type = UNLISTED # Important car sinon, il va chercher le service dans /etc/services log_type = SYSLOG local4 info instances = 4 socket_type = stream id = mkhomedir protocol = tcp port = 10 server = /usr/local/bin/pam_inetd_mkhomedir user = root wait = no }
Pour tester que ça marche : nc nfs 10 puis à l'invite de commande, taper mkdir quelquechose et voir la réponse. Si quelquechose n'existe pas, on aura erreur : login introuvable, ... Pour quitter, faire [CRTL]+c
Côté client NFS
Très facile pour les postes en auf-poste-client-fixe. # pam-auth-update
Cette commande donne une fenêtre dans laquelle il faut tout simplement (en plus de ce qui est déjà activé) "AUF mkhomedir via serveur distant lors de la connexion"
Très très simple.
Si ça ne marche pas
- Vérifier que le serveur dns résoud bien nfs
- la commande nc peut aider à comprendre d'où vient le problème.
- Si vous utilisez xinetd, il est intéressant d'activer les log et de regarder dans le syslog ce qui se passe ..? Les messages sont assez parlant
Pour Nacer : Certainement que tu demanderas pourquoi le port 10
- Consulte tous tes fichiers /etc/services pour avoir ma réponse.