Eseguire lo script da rc.local come utente anziché root


26

Voglio eseguire uno script ogni volta che il mio server si avvia. Il problema è che devo essere un determinato utente per eseguire lo script, se provo a farlo come root non può trovare determinati pacchetti (come ruby).

Provo a passare a xxx user01.

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

Questo non funziona comunque.


Pubblica il tuo script init?
maggio

Hai dei registri?
Dom

Perché non lo usi semplicemente sunello script rc?
Mat

Risposte:


30

L'esecuzione sudo su user01in uno script non significa che i seguenti comandi vengano inviati alla shell risultante. In effetti, probabilmente significa che una nuova shell viene generata come user01, che non esce mai!

Due cose:

  • Puoi eseguire un comando come un altro utente o passando l' -c 'command...'argomento su su, come su user01 -c '/etc/init.d/script start'.
  • L'avvio di un servizio che utilizza /etc/init.d da rc.local non è la cosa giusta da fare. Si desidera utilizzare abilitare il servizio all'avvio utilizzando gli strumenti di distribuzione, come chkconfigo update-rc.d. Inoltre non vuoi lavori in /etc/init.d che non dovrebbero essere avviati come root. I lavori stessi possono sentirsi liberi di passare a un altro account utente, ma dovrebbero essere invocati da root.


4

Puoi semplicemente eseguire il comando tramite sudo in questo modo:

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

-H imposta la variabile di ambiente HOME su quella dell'utente

-u specifica il nome utente da eseguire come


0

Sicuramente non è possibile eseguire quello script con sudo a causa di requiretty (impone che gli utenti debbano essere registrati) nei sudoer. Potresti voler disabilitare, il che è alquanto rischioso

Inoltre c'è uno strumento un po 'vecchio chiamato railsuid: http://freecode.com/projects/runsuid

HTH

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.