/etc/skel
est un dossier qui sera cloné pour les nouveaux utilisateurs. Existe-t-il un moyen possible de définir des règles à copier dans le dossier /etc/skel
?
Par exemple, je cherche un moyen de cloner le répertoire /etc/skel
sauf le /etc/skel/not_for_a.txt
si un utilisateur est créé et appartient au groupe nommé A
. Possible?
Notez que la commande useradd
vous permet de spécifier un répertoire SKEL personnalisé à l'aide de l'option -k
. Vous pouvez créer un répertoire/etc/skel-for-group-A sans le not-for-a.txt
, puis ajouter de nouveaux utilisateurs avec leur groupe par défaut en tant que A et spécifier leur répertoire SKEL à l'aide de la commande suivante:
useradd username -g groupA -k /etc/skel-for-group-A -m
Voir: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html
Créez des répertoires skel
supplémentaires.
Sudo mkdir /etc/skel{A,B}
Copiez le contenu de /etc/skel
dans /etc/skelA
.
Sudo cp /etc/skel/* /etc/skelA/
Personnalisez le contenu du répertoire alternatif skel.
adduser
sans répertoire de départ, mais avec des paramètres normaux. Remplacez les points de suspension par les paramètres appropriés.
Sudo adduser --no-create-home ... bob
mkhomedir_helper
pour créer des utilisateurs homedir basés sur un autre répertoire de skel.
Sudo mkhomedir_helper bob /etc/skelA
#!/bin/bash
### a bare bones dumb script to create a user with a homedir based on an alternitive skeldir
adduseropt="--no-create-home --ingroup"
# assumes $1 will be user TODO add sanity check
# Assumes $2 will be alternitive skeldir TODO add sanity check
# assumes $3 will be a group TODO add sanity check
Sudo adduser --no-create-home $adduseropt $3 $1
Sudo mkhomedir_helper $1 $2
adduser
supporte un moyen limité d'exclure des fichiers du répertoire squelette. De man adduser.conf
:
SKEL_IGNORE_REGEX
Files in /etc/skel/ are checked against this regex, and not
copied to the newly created home directory if they match. This
is by default set to the regular expression matching files left
over from unmerged config files (dpkg-(old|new|dist)).
Bien que vous ne puissiez pas définir cette expression rationnelle à partir de la ligne de commande, vous pouvez définir le fichier de configuration utilisé à l'aide de l'option --conf
. Vous pouvez donc créer des copies supplémentaires de /etc/adduser.conf
qui ne diffèrent que sur le SKEL_IGNORE_REGEX
et utiliser celles-ci:
(grep -v '^SKEL_IGNORE_REGEX' /etc/adduser.conf; printf "%s\n" 'SKEL_IGNORE_REGEX="not_for_a.txt"') > /etc/adduser_A.txt
Sudo adduser --conf /etc/adduser_A.txt ...
La commande adduser
peut exécuter un script spécifique à un site pour effectuer toute configuration telle que la suppression de fichiers. Dans la mesure où il est acceptable de commencer par une copie complète, puis de supprimer certains fichiers, cette approche peut fonctionner pour vous.
Depuis la page de manuel adduser (8) :
Si le fichier
/usr/local/sbin/adduser.local
existe, il sera exécuté une fois le compte utilisateur configuré afin de procéder à toute installation locale. Les arguments passés àadduser.local
sont:nom d'utilisateur uid gid home-directory
Il vous suffit donc d'écrire un script comportant quatre paramètres et de l'utiliser pour supprimer tous les fichiers dont vous avez besoin. Enregistrez-le sous /usr/local/sbin/adduser.local
et assurez-vous qu'il est marqué comme exécutable (chmod a+x
).
Voici quelque chose pour vous aider à démarrer:
#!/bin/bash
## Site-specific setup for newly-created users.
## adduser(8) will call this script after setting up a new user.
set -euo pipefail
if [[ "$#" != 4 ]]; then
echo "usage: $0 username uid gid home" > /dev/stderr
fi
NEW_USERNAME="${1:?}"
NEW_UID="${2:?}"
NEW_GID="${3:?}"
NEW_HOME="${4:?}"
# The groups command outputs a space-separated list of group names
IFS=' '
for group in $(groups "${NEW_USERNAME}"); do
case "${group}" in
a)
[[ "${VERBOSE}" > 0 ]] && echo Removing file for a
rm "${NEW_HOME}/not_for_a.txt"
;;
b)
[[ "${VERBOSE}" > 0 ]] && echo Removing dir for b
rm -r "${NEW_HOME}/not_for_b/"
;;
*)
[[ "${VERBOSE}" > 1 ]] && echo No special setup required for $group
;;
esac
done
La partie intéressante, que vous voudrez éditer, sont les lignes qui ressemblent à celle-ci:
a)
[[ "${VERBOSE}" > 0 ]] && echo Removing file for a
rm "${NEW_HOME}/not_for_a.txt"
;;
Vous pouvez indiquer le nom du groupe et le comportement que vous souhaitez voir au lieu de a)
et rm not_for_a.txt
.