Comment exécuter le script en tant qu'autre utilisateur sans mot de passe?

145

J'ai script.sh qui doit être exécuté en tant que user2. Cependant, ce script ne peut être exécuté que sous user1 dans mon application.

Je voudrais que la commande suivante s'exécute:

su user2 -C script.sh

mais pouvoir fonctionner sans mot de passe.

Je veux également que cela soit très restrictif, car dans user1 ne peut exécuter script.sh que sous user2 et rien d'autre.

J'ai essayé de faire cela avec le fichier sudoers et je suis devenu sans cesse confus après des heures d'essais.

Si quelqu'un peut fournir un exemple explicite de la façon dont cela peut être accompli (au lieu de quelque chose de générique comme use sudoers), ce serait grandement apprécié.

user788171
la source
15
Je ne suis pas particulièrement avec la fin. Il s'agit d'une question sur la façon de programmer le système d'une manière particulière; en tant que tel, il s'agit de programmation shell et est dans le cadre de SO qui est pour les questions sur la programmation. Il est clair qu'un certain nombre de personnes ne considèrent pas cela comme si hors sujet qu'il devrait être voté à la baisse; la question et les réponses ont toutes un nombre considérable de votes positifs.
Jonathan Leffler

Réponses:

121

Appelez visudoet ajoutez ceci:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

Les chemins de commande doivent être absolus ! Puis appelez sudo -u user2 /home/user2/bin/test.shdepuis un user1shell. Terminé.

pyroscope
la source
3
Il y a une belle description du format sudoers sur l'aide d'Ubuntu. La page de manuel pour les sudoers est moche :(
Mifeet
Alors, comment cette échelle pour tous les utilisateurs s'exécuterait-elle en tant qu'utilisateur2, au lieu de simplement user1?
jiggunjer
193

essayez de courir:

su -c "Your command right here" -s /bin/sh username

Cela exécutera la commande en tant que nom d'utilisateur étant donné que vous avez les autorisations sur sudo en tant qu'utilisateur.

Jeronimo Robles
la source
17
Cela fonctionnait comme un utilisateur normal avec les droits sudo complets comme ceci:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77
5
Juste un petit mot pour tous les utilisateurs de Mac, apparemment , la syntaxe est un peu différent: su username -c "command".
NHDaly du
1
Si vous essayez de démarrer en screentant qu'un autre utilisateur, cela pourrait être utile - linuxquestions.org/questions/linux-software-2
Mint
2
si username(ou dans la question, user2) a un mot de passe lui-même, cela ne permettra pas d'ignorer l'invite. l'autre réponse fait: aucun mot de passe nécessaire, à la fois utilisateur1 et utilisateur2.
phil294
1
`su -c "Your command right here" -s /bin/sh username`

La commande ci-dessus est correcte, mais sur Red Hat, si selinux applique, elle ne permettra pas à cron d'exécuter des scripts en tant qu'autre utilisateur. exemple; execl: couldn't exec /bin/sh execl: Permission denied

J'ai dû installer setroubleshoot et setools et exécuter ce qui suit pour l'autoriser:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
C Jaskoski
la source