Ejecutar un script de shell como otro usuario que no tiene contraseña

203

Me gustaría ejecutar un script desde el shell principal de ubuntu como un usuario diferente que no tiene contraseña.

Tengo privilegios de sudo completos, así que probé esto:

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

Luego, debo ingresar mi contraseña, pero no estoy seguro si ese script realmente se está ejecutando bajo ese usuario.

¿Cómo puedo confirmar que el script realmente se está ejecutando bajo ese usuario ahora?

    
pregunta rubo77 13.05.2013 - 12:55

4 respuestas

285

Puedes hacer eso con su o sudo , sin necesidad de ambos.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Las partes relevantes de man sudo :

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

su solo puede cambiar de usuario sin proporcionar una contraseña si eres root. Ver la respuesta de Caleb

Puede modificar el archivo /etc/pam.d/su para permitir su sin contraseña. Consulte este respuesta .

Si modificó su archivo de autenticación a lo siguiente, cualquier usuario que formara parte del grupo somegroup podría su a otheruser sin una contraseña.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Luego prueba desde la terminal

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser
    
respondido por el geirha 13.05.2013 - 13:20
87

Si desea usar su en lugar de sudo, creo que puede usar algo como esto:

su - <username> -c "<commands>"
  • - simulará un inicio de sesión del usuario especificado
  • -c le dice que quiere ejecutar un comando

ps. Lamentablemente, no puedo instalar ruby ​​usando rvm con este método, pero eso probablemente no esté relacionado.

    
respondido por el Caleb 07.04.2015 - 02:01
6

Las respuestas anteriores son realmente útiles para mí, pero para responder la pregunta real ...

  

¿Cómo puedo afirmar que el script realmente se está ejecutando bajo ese usuario ahora? -

Uso:

ps -ef | grep <command-name>

El resultado debe incluir su script y el usuario real que lo ejecuta. Personas en sistemas similares a BSD, p. MAC puede encontrar información similar con:

ps aux | grep <command-name>
    
respondido por el Samuel Åslund 11.05.2017 - 20:30
2

Tuve el mismo problema. Simplemente escriba el comando screen -dmS testscreen , esto creará una pantalla separada en su cuenta de usuario no sudo y luego puede iniciar sesión y verificar si esta pantalla está allí por screen -ls .

    
respondido por el liime 06.05.2017 - 10:35

Lea otras preguntas en las etiquetas