Personnaliser l'ajout et la suppression de comptes
Par Julien Fontanet le jeudi 23 octobre 2008, 17h08 :: Lien permanent
Il est aisé sous Debian de créer et de supprimer des comptes (locaux, je précise), mais comment fait-on pour personnaliser le processus ?
Par exemple :
- je veux proposer à l'administrateur d'ajouter le nouvel utilisateur dans certains groupes ;
- je veux envoyer un courriel au nouvel utilisateur afin de lui dire que son compte est créé ;
- etc.
Et bien ce n'est pas difficile, Debian nous propose une solution simple mais que je ne trouve pas assez propre, c'est pourquoi je me suis fait les deux petits scripts que je vous propose ici.
Petit rappel pour la création et la suppression de compte sous Debian :
$ adduser bill $ deluser --remove-home bill
D'après le manuel de adduser :
Si le fichier /usr/local/sbin/adduser.local existe, il est exécuté une fois que l’utilisateur a été configuré, de façon à réaliser des opérations propres au système. Les paramètres passés à adduser.local sont : nom_utilisateur uid gid répertoire_personnel.
C'est effectivement très pratique, mais personnellement, je préfère que tout ce qui est lié à la configuration soit bel et bien dans /etc, c'est pourquoi, le script suivant exécute tous les programmes placé dans le répertoire /etc/adduser.d en leur transmettant les quatre arguments venant d'adduser.
L'exécution étant réalisée par run-parts, je vous conseille de lire son manuel afin d'en connaitre les modalités.
/usr/local/sbin/adduser.local :
#!/bin/bash if [ $# -lt 4 ]; then echo 'Not enough args.' >&2 exit 1 fi EXEC_DIR='/etc/adduser.d' ( [ -d "$EXEC_DIR" ] && run-parts -a "$1" -a "$2" -a "$3" -a "$4" -- "$EXEC_DIR" ) || exit 0 exit $?
C'est exactement la même chose pour deluser avec le fichier /usr/local/sbin/deluser.local.
En exemple, je vous donne le script suivant (/etc/adduser.d/home-init) qui va configurer le dossier public_html de l'utilisateur et l'ajouter à des groupes supplémentaires si l'administrateur le souhaite :
#!/bin/bash EXTRA_GROUPS="groupe1 groupe2" WEB_DIR="/var/www/userdirs/%U" WEB_DIR_OWNER="%U" WEB_DIR_PERM="" WEB_DIR_LINK="~/public_html" [[ -z "$VERBOSE" ]] && VERBOSE=1 [[ $# -lt 4 ]] && echo "Not enough parameters..." && exit USERNAME="$1" USERID="$2" GROUPID="$3" USERDIR="$4" msg_debug() { [[ "$VERBOSE" -eq 2 ]] && echo "$@" return $? } msg_info() { [[ "$VERBOSE" -ne 0 ]] && echo "$@" return $? } msg_fatal() { echo "$@" >&2 exit 1 } msg_debug "User: $USERNAME (uid=$USERID, gid=$GROUPID)" msg_debug "Userdir: $USERDIR" read -p "Do you want to add the user to extra groups ? [Y/n] " choice # Create the user's web dir. WEB_DIR="$(echo "$WEB_DIR" | sed "s/%U/$USERNAME/")" WEB_DIR_OWNER="$(echo "$WEB_DIR_OWNER" | sed "s/%U/$USERNAME/")" WEB_DIR_LINK="$(echo "$WEB_DIR_LINK" | sed "s#^~/#$USERDIR/#")" msg_info "Creating user's web dir: \"$WEB_DIR\"..." mkdir -p "$WEB_DIR" || msg_fatal "Cannot create this directory." msg_debug "Setting correct owner and rights..." [[ -n "$WEB_DIR_OWNER" ]] && ( chown "$WEB_DIR_OWNER" "$WEB_DIR" || msg_fatal "Cannot set owner." ) [[ -n "$WEB_DIR_PERM" ]] && ( chmod "$WEB_DIR_PERM" "$WEB_DIR" || msg_fatal "Cannot set rights." ) [[ -n "$WEB_DIR_LINK" ]] && msg_info "Creating link for user's web dir..." && ln -s "$WEB_DIR" "$WEB_DIR_LINK" [[ "$choice" == "n" || "$choice" == "N" ]] && exit 0 # Add the user to the extra groups. for group in $EXTRA_GROUPS; do msg_debug "Add $USERNAME to group $group..." adduser "$USERNAME" "$group" done exit 0