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 someuser
aseguraba de usar la -l
bandera 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 su
o 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 -c
y 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 salidasu -l webuser -c which bundle
# => sin salidasudo su - webuser -c which bundle
# => sin salida
Pero ssh'd como usuario web
which bundle
# => / opt / ruby / bin / bundle
fuente
su - user -c
?/etc/profile
~/.bash_profile
~/.bash_login
y~/.profile
. Para shells de inicio de sesión, bash los evalúa en el orden dado.Respuestas:
El uso
sudo su - user -c
hará que haya iniciado sesión como esa persona heredando su ruta. Por esosu user
es diferente desu - user
.Sin embargo, si está configurando la ruta en un
.bashrc
archivo, solo surtirá efecto para las sesiones interactivas (es decir, enviarse como ese usuario).En su lugar, debe usar
.bash_profile
o/etc/profile
, ver esto .fuente
su -
ysu -l
son sinónimos.--login
su legibilidad.Para el contexto de inicio de sesión, use:
sudo -i -u USER COMMAND
su -l USER -c COMMAND
fuente