Réinitialiser un répertoire personnel

Comment faire pour qu’à chaque démarrage de la machine, un compte dispose toujours d’un répertoire personnel réinitialisé ?

Lorsqu’un ordinateur sert pour un accès public, il est facile de le paramétrer pour qu’à l’allumage une session soit ouverte automatiquement avec un compte choisi, appelons ce compte «visiteur». Cependant, pendant une session, l’utilisateur peut faire ce qu’il veut, ajouter des icones, modifier le bureau, etc. Il est alors indispensable de faire le ménage entre deux utilisations.

Il est possible d’automatiser ce «ménage» de deux manières différentes :

  • soit au démarrage de l’ordinateur;
  • soit à l’ouverture de la session «visiteur».

C’est la première solution que nous expliquerons ici.

La réinitialisation du compte

Le répertoire personnel du compte utilisateur «visiteur» est /home/visiteur. Supprimer le contenu de le compte, peut-être fait simplement par la commande :

rm -R /home/visiteur/*

La commande rm signifie remove (supprimer) et l’option R (comme Récursif) indique qu’il faut supprimer également tous les sous-répertoires qui pourraient exister dans le répertoire de «visiteur».

Sur votre machine unix, lors de la création d’un compte utilisateur, son répertoire personnel est pré-rempli avec le contenu du répertoire /etc/skel. Nous allons donc utiliser ce répertoire «skel» pour réinitialiser le contenu du répertoire personnel du compte «visiteur» :

cp -R /etc/skel/* /home/visiteur/
chown -R visiteur /home/visiteur/*
chgrp -R visiteur /home/visiteur/*

La première ligne recopie tout le contenu du répertoire «skel» dans le répertoire personnel de «visiteur». La deuxième ligne fixe le compte «visiteur» comme propriétaire des fichiers qui viennent d’être copiés et la troisième ligne fixe le groupe d’utilisateurs qui pourra avoir certains droits sur les fichier, ici le groupe principal du compte «visiteur».

Les deux dernières lignes font référence à la gestion des droits (lecture, écriture, exécution…) sur les fichiers. Si cela ne vous dit rien, dites-vous simplement que le compte «visiteur» doit être propriétaire de ses propres fichiers et c’est ce que réalisent ces deux lignes.

Automatiser la réinitialisation

Pour que cette réinitialisation soit faite à chaque démarrage, il va falloir rédiger un script shell qui pourra être exécuté par le gestionnaire des services de la machine unix. Ce script doit pouvoir être appelé avec un paramètre parmi les trois suivants : start, stop ou restart.

Pour les novices en ligne de commande, un script est simplement un fichier texte qui contient les commandes à exécuter. Compte tenu de l’utilisation de notre script, il contiendra un peu plus que les 4 lignes évoquées précédemment. Voici son contenu :

#!/bin/bash

# Script: nettoyage
# Version: 1.0
# Date: 20 avril 2012
# Author: Jean Henri
# Object: permet de reinitialiser le repertoire d'un utilisateur
#         au demarrage de l'ordinateur

# Nom du compte a reinitialiser
COMPTE=visiteur

# au demarrage de la machine le script est appele avec l'option start
case "$1" in
  start)
    # suppression du contenu du repertoire de l'utilisateur
    rm -r /home/${COMPTE}/* >&2
    # remplissage du repertoire de l'utilisateur avec /etc/skel
    cp -r /etc/skel/* /home/${COMPTE}/ >&2
    # on rend l'utilisateur proprietaire de ses fichiers
    chown -R ${COMPTE} /home/${COMPTE}/*
    # on associe les fichier au groupe principal de l'utilisateur
    chgrp -R ${COMPTE} /home/${COMPTE}/*
    ;;
  stop)
    ;;
  restart)
    ;;
  *)
    echo "Usage: $0 start|stop|restart" >&2
    exit 1 
    ;;
esac

exit 0
# FIN du script

Quelques explications :

  • les lignes qui commencent avec un # sont des commentaires et ne servent qu’à la compréhension du script;
  • la ligne COMPTE=visiteur permet de choisir le compte utilisateur à réinitialiser (il doit déjà être créé sur l’ordinateur);
  • l’expression ${COMPTE} sera remplacée, lors de l’exécution du script, par le compte utilisateur choisi, ici «visiteur».

Ce script, que nous appellerons nettoyage lors de son enregistrement avec un éditeur de texte, devra être placé dans le répertoire /etc/init.d par l’utilisateur root de la machine. Si vous avez enregistré le fichier sous le nom nettoyage dans votre répertoire personnel et que votre compte unix s’appelle «claude» (ça marche pour les gars et pour les filles !), ouvrez une console et tapez les commandes suivantes :

sudo cp /home/claude/nettoyage /etc/init.d
sudo chmod +x /etc/init.d/nettoyage

La commande sudo sert à exécuter la commande qui suit en tant que root, votre mot de passe vous sera alors demandé pour vérifier que vous avez le droit de travailler en tant que root (ce qui est normalement le cas sur une machine ubuntu pour le premier compte utilisateur créé lors de l’installation). Nous avons déjà rencontré la commande cp au début de cet article, donc vous devriez comprendre la première ligne. La seconde ligne permet de rendre exécutable (x comme eXécutable) le fichier.

Enfin, il reste à automatiser ce nettoyage au démarrage de l’ordinateur en tapant, toujours à la ligne de commande, la commande :

sudo update-rc.d nettoyage defaults 20

Ça y est, à chaque démarrage, le répertoire du compte «visiteur» est comme neuf !

Vous pouvez compléter le contenu du répertoire /etc/skel pour personnaliser encore un peu plus le compte «visiteur» mais n’oubliez pas que ce répertoire «skel» sert pour TOUS les comptes utilisateurs que vous créerez sur votre machine.

Et pour désactiver la réinitialisation ?

C’est simple, il faut taper les deux commandes suivante, à la ligne de commande :

sudo update-rc.d nettoyage remove
sudo rm /etc/init.d/nettoyage

Et pour en savoir plus sur les scripts de démarrages ?

Il suffit d’aller sur la page http://www.andesi.org/administration/gerer-les-services-lances-au-demarrage qui m’a servi à fabriquer le script ! Merci à l’auteur de l’article.

Laisser un commentaire

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