cloner par programme / etc / skel pour les nouveaux utilisateurs

11

/etc/skelest un dossier qui sera cloné pour les nouveaux utilisateurs. Existe-t-il un moyen possible de définir des règles à copier à partir du /etc/skeldossier?

Par exemple, je cherche un moyen que si un utilisateur est créé et appartient au groupe nommé A, clonez le /etc/skeldossier sauf /etc/skel/not_for_a.txt. Possible?

Nam Nguyen
la source

Réponses:

11

Notez que la useraddcommande vous permet de spécifier un répertoire SKEL personnalisé à l'aide de l' -koption. 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:

useradd username -g groupA -k /etc/skel-for-group-A -m

Voir: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html

Mukesh Sai Kumar
la source
1
useraddest déconseillé pour les systèmes basés sur Debian dans la page de manuel de mon système 16.04. Si la raison de cette mise en garde a changé, pourriez-vous l'ajouter à votre réponse. Également sur 16.04 useraddet adduserdifférents programmes avec différentes options, vous pouvez peut-être modifier votre réponse pour plus de clarté.
J. Starnes
8
@ J.Starnes Pour spécifier un répertoire SKEL personnalisé n'est pas possible dans la addusercommande, nous utilisons donc useradd. Il n'est pas entièrement découragé: " useraddest un utilitaire de bas niveau pour ajouter des utilisateurs. Sur Debian, les administrateurs devraient généralement utiliser à la adduserplace." Il est correct d'utiliser cette commande dans des circonstances inhabituelles comme celle-ci.
Mukesh Sai Kumar
8
  1. Créez des skelrépertoires supplémentaires .

    sudo mkdir /etc/skel{A,B}
    
  2. Copiez le contenu /etc/skelà /etc/skelA.

    sudo cp /etc/skel/* /etc/skelA/
    
  3. Personnalisez le contenu alternatif du répertoire skel.

  4. addusersans homedir, mais avec des réglages par ailleurs normaux. Remplacez les points de suspension par les paramètres appropriés.

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper pour créer des utilisateurs homedir basés sur un répertoire skel alternatif.

    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
J. Starnes
la source
3

adduserprend en charge une manière limitée 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 régulière à partir de la ligne de commande, vous pouvez définir le fichier de configuration utilisé à l'aide de l' --confoption. Vous pouvez donc créer des copies supplémentaires /etc/adduser.confqui ne diffèrent que sur le SKEL_IGNORE_REGEX, et les utiliser:

(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 ...
muru
la source
3

La addusercommande peut exécuter un script spécifique au site pour effectuer n'importe quelle configuration comme la suppression de fichiers. Tant qu'il est acceptable de commencer par une copie complète, puis de supprimer certains fichiers par la suite, cette approche pourrait fonctionner pour vous.

Depuis la page de manuel adduser (8) :

Si le fichier /usr/local/sbin/adduser.local existe, il sera exécuté après la configuration du compte utilisateur afin d'effectuer toute configuration locale. Les arguments passés à adduser.localsont:

nom d'utilisateur uid gid home-directory

Il vous suffit donc d'écrire un script qui prend quatre paramètres et de l'utiliser pour supprimer tous les fichiers dont vous avez besoin. Enregistrez-le sous /usr/local/sbin/adduser.localet assurez-vous qu'il est marqué 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 et le comportement du groupe que vous souhaitez voir au lieu de a)et rm not_for_a.txt.

RJHunter
la source