clone par programme / etc / skel pour les nouveaux utilisateurs

11

/etc/skel est un dossier qui sera cloné pour les nouveaux utilisateurs. Existe-t-il un moyen de définir des règles à copier dans le dossier /etc/skel ?

Par exemple, je recherche un moyen de cloner A du dossier, sauf /etc/skel , si un utilisateur est créé et appartient au groupe nommé /etc/skel/not_for_a.txt . Possible?

    
posée Nam Nguyen 06.12.2017 - 05:54
la source

4 réponses

11

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: lien

    
réponse donnée Mukesh Sai Kumar 06.12.2017 - 06:51
la source
8
  1. Créez des répertoires skel supplémentaires.

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

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

  4. adduser sans homedir, mais avec des paramètres 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 sur la base d'un répertoire de 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
    
réponse donnée J. Starnes 06.12.2017 - 06:27
la source
3

adduser prend en charge un moyen limité d'exclure des fichiers du répertoire squelette. 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 ...
    
réponse donnée muru 06.12.2017 - 14:22
la source
3

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.

À partir de la page de manuel de adduser (8) :

If the file /usr/local/sbin/adduser.local exists, it will be executed after the user account has been set up in order to do any local setup. The arguments passed to adduser.local are:

username uid gid home-directory

Donc, tout ce que vous avez à faire est 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.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 .

    
réponse donnée RJHunter 07.12.2017 - 09:45
la source

Lire d'autres questions sur les étiquettes