¿Cómo ejecutar el script como otro usuario sin contraseña?

145

Tengo script.sh que debe ejecutarse como usuario2. Sin embargo, este script solo se puede ejecutar bajo user1 en mi aplicación.

Me gustaría ejecutar el siguiente comando:

su user2 -C script.sh

pero poder ejecutar sin contraseña.

También quiero que esto sea muy restrictivo, ya que en user1 solo se puede ejecutar script.sh en user2 y nada más.

Intenté hacer esto con el archivo sudoers y me confundí infinitamente después de horas de intentarlo.

Si alguien puede proporcionar un ejemplo explícito de cómo se puede lograr esto (en lugar de algo genérico como usar sudoers), sería muy apreciado.

usuario788171
fuente
15
Yo no particularmente con el cierre. Esta es una pregunta sobre cómo programar el sistema de una manera particular; como tal, se trata de programación de shell y está dentro del alcance de SO, que es para preguntas sobre programación. Está claro que varias personas no ven esto tan fuera de tema que debería ser rechazado; la pregunta y las respuestas tienen un número considerable de votos positivos.
Jonathan Leffler

Respuestas:

121

Llama visudoy agrega esto:

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

¡Las rutas de comando deben ser absolutas ! Luego llame sudo -u user2 /home/user2/bin/test.shdesde un user1caparazón. Hecho.

piroscopio
fuente
3
Hay una buena descripción del formato sudoers en la ayuda de Ubuntu. La página de manual para sudoers es fea :(
Mifeet
Entonces, ¿cómo podría esta escala para todos los usuarios ejecutar como usuario2, en lugar de solo usuario1?
jiggunjer
193

intenta correr:

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

Esto ejecutará el comando como nombre de usuario dado que tiene permisos para sudo como ese usuario.

Jerónimo Robles
fuente
17
Funcionó como usuario normal con derechos de sudo completos como este:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77
55
Sólo una nota para los usuarios de Mac, al parecer, la sintaxis es un poco diferente: su username -c "command".
NHDaly
1
Si su tratando de iniciar screencomo otro usuario, entonces esto podría ser servicial - linuxquestions.org/questions/linux-software-2/...
Menta
2
si username(o en la pregunta user2) tiene una contraseña propia, esto no permitirá omitir la solicitud. la otra respuesta sí: no se necesita contraseña, tanto user1 como user2.
phil294
1
`su -c "Your command right here" -s /bin/sh username`

El comando anterior es correcto, pero en Red Hat si selinux está aplicando, no permitirá que cron ejecute scripts como otro usuario. ejemplo; execl: couldn't exec /bin/sh execl: Permission denied

Tuve que instalar setroubleshoot y setools y ejecutar lo siguiente para permitirlo:

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
fuente