¿Cuál es una buena manera de ejecutar un script de shell como un usuario diferente? Estoy usando Debian etch, y sé qué usuario quiero suplantar.
Si lo estuviera haciendo manualmente, haría:
su postgres
./backup_db.sh /tmp/test
exit
Como quiero automatizar el proceso, necesito una forma de ejecutar backup_db.sh como postgres (heredar el entorno, etc.)
¡Gracias!
-
(o--login
) junto con en--command, -c
realidad no inicia una sesión de inicio de sesión, porque-c
siempre obliga a un shell sin inicio de sesión.- postgress
debería aparecer al final del comando. Desde la página de manual:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
Si el usuario objetivo a ejecutar tiene definido nologin shelll, entonces puede usar la opción -s para especificar el shell:
Consulte la siguiente pregunta: ejecute el script como usuario que tiene shell nologin
fuente
Para automatizar esto en un horario, puede ponerlo en el crontab del usuario. Sin embargo, los trabajos de 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:
fuente
Esto debería ser una lectura informativa - setuid en scripts de shell
Si ejecuta su con una
- 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.fuente
Prueba la página de manual de su:
su -c script_run_as_postgres.sh - postgres
Alernamente, puede usar sudo para permitirle ejecutar solo ese comando como postgres sin una contraseña. Sin embargo, requiere algo de configuración en sus / etc / sudoers.
fuente
El método "su -c ..." publicado por otros es bueno. Para la automatización, puede agregar el script al crontab del usuario que necesita para ejecutarlo.
fuente
Si el usuario ya tiene una entrada para sudo y no conoce la contraseña del superusuario, puede intentar lo siguiente: Este reinicia los postgres inicializados en /data/my-db/pgsql/9.6/data
fuente
También puedes usar:
fuente