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