2 votes

Linux : Permettre à un utilisateur d'exécuter une commande spécifique au nom de tout autre utilisateur

J'essaie de trouver un moyen de permettre à l'utilisateur john d'exécuter une commande (disons echo) pour le compte d'un autre utilisateur peter sans qu'on lui demande son mot de passe.

J'ai trouvé un fil de discussion qui, selon moi, répondrait à ma question :

john ALL = (ALL) NOPASSWD: /bin/echo

Malheureusement, cela ne fait pas tout à fait ce que je veux. Cette commande exécute le echo comme peter mais dans le contexte de john . Cela signifie que le répertoire personnel reste celui de john .

Comme l'utilisateur john si je me présente : " sudo -u peter echo ~ ", la réponse est : /home/john . Je veux que ce soit /home/peter .

Le comportement que j'attendais est fourni par la commande su. En tant que root, si je fais : su peter -c "echo ~" j'obtiens /home/peter .

La question qui se pose est la suivante : comment puis-je obtenir le comportement de su sans être root et sans être invité à entrer un mot de passe ?

1voto

TheCompWiz Points 7329

Vous devez spécifier le -i pour que sudo lise les scripts de connexion et les variables d'environnement comme elles doivent l'être. Sans faire en sorte que sudo charge l'environnement, la variable d'environnement home n'est pas mise à jour pour refléter l'exécution en tant qu'utilisateur.

0voto

chugadie Points 201

"sudo -u peter echo ~" interprétera la valeur de ~ avant d'exécuter la commande sudo. Essayez

sudo -s -H -u peter echo \$HOME

o

sudo -i -u peter echo \$HOME

De même, pour afficher toutes les variables d'environnement définies par sudo, essayez :

sudo -i -u peter export
# actually, use /usr/bin/env instead of export

UPDATE

Lorsque vous utilisez -i ou -s, vous sous-entendez que la COMMANDE SUDO_ à exécuter est l'environnement Shell de l'utilisateur spécifié. Ainsi, autoriser seulement /bin/echo n'est pas suffisant, il faudrait autoriser tout /bin/bash à être disponible.

Il semble que -H soit suffisant pour définir la variable d'environnement HOME, mais vous ne pouvez pas y faire écho avec $HOME car c'est une fonctionnalité d'un Shell. D'autres programmes peuvent être capables de lire la valeur de HOME via getenv() ou des méthodes similaires.

sudo -H -u peter  /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/usr/bin/env

sudo -i -u peter /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/bin/bash -c /usr/bin/env

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X