Cambia utente e carica l'intero ambiente nello script della shell


9

Sto riscontrando dei problemi con uno dei nostri script upstart che cambia utente e avvia alcuni processi daemon ruby.

In passato mi sarei semplicemente bash -c "do the business" -l someuserassicurato di usare la -lbandiera per emulare un login.

Finora ha funzionato alla grande, il nostro processo ruby ​​ha generato il seguente errore: require: no such file to load -- rubygems (LoadError)dopo alcune indagini ho riscontrato che questo errore si verifica solo quando eseguo lo script come utente root, ovvero (quando io sudo suo quando sono avviato da upstart).

Penso che questo sia un problema PATH in quanto quando imposto manualmente il percorso prima risolve il problema.

C'è un modo per cambiare utente e caricare l' intero ambiente?

Ho anche provato su user -ce sudo.


Per rendere più semplice il test, sto sudo sueseguendo il "rooting up" ( ) ed eseguo which bundle(bundle è una cosa ruby).

Ecco cosa ottengo:

  • sudo -i -u webuser which bundle # => nessun output
  • su -l webuser -c which bundle # => nessun output
  • sudo su - webuser -c which bundle # => nessun output

Ma è entrato come utente web

  • which bundle # => / opt / ruby ​​/ bin / bundle

1
Ci hai provato su - user -c?
Karlson,

Di che distribuzione si tratta?
artistoex,

Il tuo script dipende dai moduli ruby ​​installati per utente?
Keith,

@artistoex è ubuntu :)
Daniel Upton,

1
Mi assicurerei che si tratti davvero di un problema PATH (scarica la variabile nello script). Quindi confrontare i PERCORSI e guardare /etc/profile ~/.bash_profile ~/.bash_logine ~/.profile. Per le shell di login, bash le valuta nell'ordine indicato.
artistoex,

Risposte:


10

L'utilizzo sudo su - user -clo renderà come se si fosse effettuato il login come quella persona che eredita il proprio percorso. Ecco perché su userè diverso da su - user.

Tuttavia, se si sta impostando il percorso in un .bashrcfile, avrà effetto solo per le sessioni interattive (ad esempio, come utente).

Dovresti invece usare .bash_profileo /etc/profile, vedi questo .


3
Si dovrebbe notare che su -e su -lsono sinonimi.
Giordania,

3
e probabilmente dovrebbe raccomandare --loginper leggibilità.

3

Per il contesto di accesso utilizzare:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
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.