GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecute un script de shell como un usuario diferente

Solución 1:

Para ejecutar su secuencia de comandos como otro usuario como un comando, ejecute:

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

Recomiendo siempre usar rutas completas en scripts como este:no siempre puede garantizar que estará en el directorio correcto cuando su (quizás alguien le cambió el homedir, quién sabe). También uso siempre la ruta completa a su (/bin/su) porque soy paranoico. Es posible que alguien pueda editar su ruta y hacer que use una versión comprometida de su.

Solución 2:

Si el usuario de destino que se va a ejecutar no tiene definido el shell de inicio de sesión, entonces puede usar la opción -s para especificar el shell:

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

Consulte la siguiente pregunta:ejecute el script como usuario que no tiene shell de inicio de sesión

Solución 3:

Para automatizar esto en un horario, puede ponerlo en el crontab del usuario. Sin embargo, los trabajos cron no obtendrán el entorno completo, pero de todos modos podría ser mejor poner todas las variables env que necesita en el script.

Para editar el crontab del usuario:

sudo crontab -u postgres -e

Solución 4:

Esta debería ser una lectura informativa:setuid en scripts de shell

Si ejecuta su con un "- username " secuencia de argumentos, creará un shell de inicio de sesión para que el usuario proporcione el mismo entorno que el usuario. Por lo general, se utiliza para ejecutar rápidamente su secuencia de comandos con su entorno doméstico desde un inicio de sesión diferente.

Solución 5:

Pruebe la página de manual de su:

su -c script_run_as_postgres.sh - postgres

Alternativamente, podría usar sudo para permitirle ejecutar solo ese comando como postgres sin una contraseña. Sin embargo, requiere cierta configuración en su /etc/sudoers.


Linux
  1. UNIX/Linux:¿Qué es un shell? ¿Cuáles son las diferentes conchas?

  2. Cómo ejecutar un script de shell al inicio

  3. Ejecute un script de shell en la nueva terminal desde la terminal actual

  4. ¿Ejecutar el comando de shell en jenkins como usuario root?

  5. Ejecute parte de un script bash como un usuario diferente

Cómo ejecutar el comando / secuencia de comandos de Linux Shell en segundo plano

Cómo ejecutar Shell Script como servicio SystemD en Linux

Cómo crear y ejecutar un script de shell en Ubuntu 22.04

¿Cómo se ejecuta un script al iniciar sesión en * nix?

Ejecutar script de shell en paralelo

¿Cómo ejecutar un comando como un usuario específico en un script de inicio?