Ejecute script desde rc.local como usuario en lugar de root

26

Quiero ejecutar un script cada vez que se inicia mi servidor. El problema es que necesito ser un cierto usuario para ejecutar el script, si trato de hacerlo como root no puedo encontrar ciertos paquetes (como ruby).

Intento cambiar a xxx user01.

sudo su user01
/etc/init.d/script start

Sin embargo, esto no funciona.

Philip
fuente
Publica tu guión de inicio?
quanta
¿Tienes algunos registros?
Dom
¿Por qué no lo usas simplemente suen el script rc?
Mat

Respuestas:

30

La ejecución sudo su user01de un script no significa que los siguientes comandos se envían al shell resultante. De hecho, probablemente significa que se genera un nuevo shell como user01, ¡que nunca sale!

Dos cosas:

  • Puede ejecutar un comando como otro usuario ya sea pasando el -c 'command...'argumento a su, como su user01 -c '/etc/init.d/script start'.
  • Iniciar un servicio que usa /etc/init.d desde rc.local no es lo correcto. Desea utilizar habilitar el servicio al inicio utilizando sus herramientas de distribución, como chkconfigo update-rc.d. Tampoco desea trabajos en /etc/init.d que no deberían iniciarse como root. Los trabajos en sí mismos pueden sentirse libres de transferirse a otra cuenta de usuario, pero deben ser invocados por root.
Kyle Smith
fuente
8

Podrías poner algo /etc/crontaby ejecutarlo@reboot

@reboot username /etc/init.d/script start
user9517 es compatible con GoFundMonica
fuente
2
o en el propio archivo crontab del usuario.
Jake
4

Simplemente puede ejecutar el comando a través de sudo de esta manera:

sudo -H -u user01 /etc/init.d/script start

-H establece la variable de entorno HOME a la del usuario

-u especifica el nombre de usuario para ejecutar como

joetek
fuente
0

Seguramente no puede ejecutar ese script con sudo debido a requiretty (exige que los usuarios deben estar registrados) en sudoers. Es posible que desee deshabilitar, lo cual es algo arriesgado

También hay una herramienta algo antigua llamada RunSuid: http://freecode.com/projects/runsuid

HTH

sebelk
fuente