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

while read COMMAND LOGIN_EXT RESTE
do

  if [ ${COMMAND} != "mkdir" ] ; then
      echo "commande inconnue : $COMMAND"
      exit 1
  fi

  LOGIN=`echo $LOGIN_EXT | tr -dc A-Za-z0-9_.-@`

  if ! id "${LOGIN}" > /dev/null
      then
        echo "$0 erreur : login $LOGIN introuvable" >&2
        exit 1
  fi

  HD=`getent passwd ${LOGIN}|cut -d: -f 6`

  if [ ! -e ${HD} ]
  then
      
        mkdir -pv  ${HD} >> /var/log/mkdir.log 2>&1
        cd ${HD}
        chown -R $LOGIN:users ${HD} 
        chmod 700 ${HD} 
        PART=`df -Pl ${HD} | tail -1 | cut -d' ' -f1`
        /usr/sbin/quotatool -u $LOGIN -b -l 800000 -q 800000  ${PART}
        echo $(date) mkdir $HD >>/var/log/mkdir.log
        exit 0
  else
      echo "$HD existe" 
      exit 1
  fi

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, le port d'écoute sera 10, le serveur /usr/local/bin/pam_inetd_mkhomedir, wait à no, protocol à tcp, socket_type à stream, et le user à root.

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