web-dev-qa-db-fra.com

Autoriser un utilisateur d'un shell chrooté à utiliser une commande Sudo

J'ai un utilisateur chrooted dans un répertoire, et tout fonctionne bien. Je souhaite qu'un groupe de cet utilisateur puisse redémarrer un processus unique géré par supervisor, mais je ne vois pas comment.

J'ai ajouté cette ligne à /etc/sudoers:

%mygroupname ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart myprocessname

J'ai copié /usr/bin/Sudo vers le même chemin dans l'environnement chroot. J'ai également copié toutes ses dépendances aux endroits appropriés (trouvé avec ldd /usr/bin/Sudo).

J'ai compris que Sudo utilise un tonne de fichiers supplémentaires sur le système et je les ai copiés dans l'environnement chroot. Cependant, je suis coincé maintenant et je ne peux pas dépasser cette erreur. Qu'est-ce que je rate?

Sudo log (les sauts de ligne facilitent la lecture):

Nov 10 20:29:04 Sudo[3593] pam_setcred: Failure setting user credentials @
                           Sudo_pam_begin_session()
                           /build/Sudo-1bDJzQ/Sudo-1.8.16/plugins/sudoers/auth/pam.c:274

Nov 10 20:29:04 Sudo[3593] pam_open_session: Module is unknown @
                           Sudo_pam_begin_session()
                           /build/Sudo-1bDJzQ/Sudo-1.8.16/plugins/sudoers/auth/pam.c:283

Est-ce une idée complètement stupide en premier lieu?

3
vaindil

Plutôt que d'essayer de copier le binaire Sudo et ses dépendances dans le chroot, il pourrait être plus facile de faire fonctionner un script en tant que root pour vérifier la présence d'un fichier et redémarrer le processus.

Ce script pourrait être quelque chose comme ça:

#!/bin/bash
restartfile="restartprocess"
while :
do
   for user in /home/*
   do
      if [ -f $user/$restartfile ]
      then
         supervisorctl restart myprocessname
         rm $user/$restartfile
      fi
   done
   sleep 5 #Adjust file checking time interval
done

(Cela suppose également que l'utilisateur est chrooté dans un dossier dans/home)

Une fois que ce script est exécuté en tant que root, l’utilisateur chrooté doit simplement exécuter l’une des commandes suivantes pour créer un fichier vide (appelé restartprocess) dans son répertoire de base (vous pouvez ajouter ~/ avant le fichier. Nom):

touch restartprocess
echo > restartprocess
> restartprocess

Et le processus serait redémarré.

6
Evan Chen