Voici une idée de la façon dont cela pourrait être fait. NOTE : il s'agit d'un hack ; à n'utiliser que si les mots sudo sans mot de passe faire en sorte que tes sourcils veuillent ramper jusqu'à ton crâne.
La prémisse est la suivante : nous ne pouvons pas transmettre les identifiants de connexion à l'utilisateur. sudo
. La question est donc de savoir comment avoir un NOPASSWD
sudo pour seulement les premières minutes d'une connexion. Nous pouvons le faire en démarrant le login Shell en NOPASSWD
et le lancement d'un processus d'arrière-plan en mode .bashrc
qui, après quelques minutes, défait le NOPASSWD
.
# somewhere near the bottom of ~/.bashrc
sudo -n /bin/bash -c "$HOME/nopasswd-sudo 60s 12h <&- >&- &"
Bien sûr, le script lui-même doit être lancé. avec NOPASSWD
sudo, ou nous serions toujours invités à entrer un mot de passe. Et le script doit rétablir la NOPASSWD
lorsque la session bash se termine, de sorte que NOPASSWD
est défini pour la prochaine connexion.
Voici le script $HOME/nopasswd-sudo
qui le fera :
#!/bin/bash
SUDO_FILE="/etc/sudoers.d/$(basename "$0")-${SUDO_USER}"
SUDO_RULE="${SUDO_USER} ALL=(ALL:ALL) NOPASSWD: ALL"
[ -z "$SUDO_USER" ] &&
echo "$(basename "$0"): must be invoked with sudo" >&2 &&
exit 1
# Trap exit to recreate SUDO_FILE for next login
trap "echo '$SUDO_RULE' > '$SUDO_FILE'; exit 0" EXIT
# First time around just exit, creating the SUDO_FILE
[ -f "$SUDO_FILE" ] || exit 0
# After $1 (default 5m) remove SUDO_FILE to end NOPASSWD sudo
sleep ${1:-5m} && rm -f "$SUDO_FILE"
# Wait until our parent exits, and we will exit via the trap
# If after $2 (default 12h) still alive, we assume we missed the HUP
sleep ${2:-12h}
Lors de sa première exécution (qui doit être effectuée à partir de la ligne de commande, et non à partir de l'application .bashrc
), le script crée le fichier /etc/sudoers.d/nopasswd-sudo-$USER
contenant un NOPASSWD
caractère générique pour l'utilisateur connecté $USER
:
{username} ALL=(ALL:ALL) NOPASSWD: ALL
Ensuite, à chaque connexion, il démarre et attend en arrière-plan jusqu'à ce que le temps sans mot de passe soit écoulé, après quoi il supprime le fichier, et le suivant sudo
nécessitera un mot de passe.
Après cela, il attend indéfiniment (en fait, jusqu'à 12h, pour éviter les orphelins persistants qui ont manqué le signal HUP de leur parent), ou jusqu'à ce que son parent, le login Shell, se termine. Juste avant qu'il ne se termine, son piège EXIT recrée l'objet NOPASSWD
fichier.
Conseil pour les aventuriers : n'oubliez pas de toujours garder une racine séparée Shell ouverte pendant que vous vous amusez avec des Shell de connexion ou des sudo
règles. Vous ne seriez pas le premier à vous enfermer dehors.