Puedes hacer eso con su o sudo, no hay necesidad de ambos.
sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"'
Las partes pertinentes 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 es root. Vea la respuesta de Caleb
Puede modificar el /etc/pam.d/su archivo para permitir su sin contraseña. Ver esto respuesta.
Si modificó el archivo de autenticación a lo siguiente, cualquier usuario que formara parte del grupo somegroup podría su a otheruser sin contraseña.
auth sufficient pam_rootok.soauth [success=ignore default=1] pam_succeed_if.so user = otheruserauth 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
Las respuestas anteriores son realmente útiles para mí, pero para responder a la pregunta real...
¿Cómo puedo afirmar que el script realmente se está ejecutando bajo ese usuario ahora?-
Utilizar:
ps -ef | grep <command-name>
La salida debe incluir su script y el usuario real que lo ejecuta.Las personas en sistemas similares a BSD, por ejemplo, MAC, pueden encontrar información similar con:
Tuve el mismo problema.Simplemente escriba el comando screen -dmS testscreen esto creará una pantalla separada en su cuenta de usuario que no sea sudo y luego podrá iniciar sesión y verificar si esta pantalla está allí al screen -ls.
Puedes usar sudo para hacer esto. En primer lugar, es necesario modificar el /etc/sudoers archivo para agregar una regla que permita hudson usuario para convertirse en el otro usuario del script en cuestión. Supongamos que tiene un user1 cuenta que necesita ejecutarse /usr/local/bin/my_script.sh.
Ejecutar visudo para modificar el sudoers file.A continuación, utilice lo siguiente sudo comando para ejecutar el script desde hudson.
Es muy importante que uses visudo para modificar el sudoers archivo para verificar si hay errores en el archivo antes de colocarlo en su lugar. Además, sugeriría una lectura rápida man sudoers para comprender claramente lo que hace lo anterior antes de agregarlo a su configuración.
Utilizo & quot; ssh & quot; apuntando a la misma máquina local.Esto me permite ejecutar el script de shell o el comando sin contraseña.
ssh target-user@localhost script-to-execute
Primero, me aseguro de que el usuario host haya guardado su clave pública para el usuario objetivo (en la misma máquina).Luego ejecuto el comando ssh que mostré arriba.
El resultado es un comando / script que se ejecuta como el usuario de destino, sin siquiera ingresar una contraseña.