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

Pour Nacer : Certainement que tu demanderas pourquoi le port 10

ZAO/CréationAutomatiqueHomeNFS (dernière édition le 2013-05-15 15:58:02 par FranckKouyami)