web-dev-qa-db-fra.com

cloner par programme / etc / skel pour les nouveaux utilisateurs

/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?

11
Nam Nguyen

Notez que la commande useraddvous 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

11
Mukesh Sai Kumar
  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 alternatif skel.

  4. 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
    
  5. 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
8
J. Starnes

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 ...
3
muru

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.

3
RJHunter