Cambiar usuario y cargar todo el entorno en el script de shell

9

Tengo algunos problemas con un script nuestro de inicio que cambia de usuario e inicia algunos procesos de Ruby Daemon.

En el pasado, simplemente me bash -c "do the business" -l someuseraseguraba de usar la -lbandera para emular un inicio de sesión.

Esto ha funcionado muy bien hasta ahora, nuestro proceso de ruby ​​ha estado arrojando el siguiente error: require: no such file to load -- rubygems (LoadError)después de una investigación, encontré que este error solo ocurre cuando ejecuto el script como usuario raíz, es decir (cuando yo sudo suo cuando se ejecuta por arranque).

Creo que este es un problema de RUTA ya que cuando configuro manualmente la ruta primero resuelve el problema.

¿Hay alguna manera de cambiar de usuario y cargar todo el entorno?

También lo he intentado su user -cy sudo.


Para facilitar la prueba, estoy "rooteando" ( sudo su) y ejecutándome which bundle(el paquete es una cosa de rubí).

Esto es lo que obtengo:

  • sudo -i -u webuser which bundle # => sin salida
  • su -l webuser -c which bundle # => sin salida
  • sudo su - webuser -c which bundle # => sin salida

Pero ssh'd como usuario web

  • which bundle # => / opt / ruby ​​/ bin / bundle
Daniel Upton
fuente
1
¿Lo has intentado su - user -c?
Karlson
¿Qué distribución es?
artistoex
¿Su script depende de módulos ruby ​​instalados por usuario?
Keith
@artistoex es ubuntu :)
Daniel Upton
1
Me aseguraría de que realmente sea un problema de RUTA (volcar la variable en el script). Luego compara las RUTA y mira /etc/profile ~/.bash_profile ~/.bash_loginy ~/.profile. Para shells de inicio de sesión, bash los evalúa en el orden dado.
artistoex

Respuestas:

10

El uso sudo su - user -chará que haya iniciado sesión como esa persona heredando su ruta. Por eso su useres diferente de su - user.

Sin embargo, si está configurando la ruta en un .bashrcarchivo, solo surtirá efecto para las sesiones interactivas (es decir, enviarse como ese usuario).

En su lugar, debe usar .bash_profileo /etc/profile, ver esto .

Nate
fuente
3
Debe tener en cuenta que su -y su -lson sinónimos.
jordanm
3
y probablemente debería recomendar --loginsu legibilidad.
3

Para el contexto de inicio de sesión, use:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
H.-Dirk Schmitt
fuente