Parece cuando Sudo
bajando eso usando Sudo -u $user
que el entorno de root todavía se está utilizando. ¿Cómo puedo hacer que Sudo
use el entorno de los usuarios? Como nota especial, no todos los usuarios en los que usaré esto tienen shells de inicio de sesión.
Tratar Sudo -i -u $user
[email protected]:~$ env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -u ubuntu env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
man sudoers
en Debian menciona otra posibilidad. No estoy seguro de qué dirección quiere, pero su pregunta parece que le gustaría tener el env_reset
opción de /etc/sudoers
- lo contrario es básicamente el env_keep
lista. Para establecer el HOME
adecuado, puede usar el -H
opción para Sudo
directamente o, nuevamente en sudoers
, con el always_set_home
opción.
Alternativamente, podría usar env_file
para especificar un entorno exacto que desea pasar. Sin embargo, creo que es mejor si revisas el env_*
opciones de man sudoers
, porque /etc/sudoers
controla todo y ese es el punto al que recurrir.
Aquí hay parte del contexto en el que uso env_reset
dentro de mi sudoers
archivo:
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
Cuando Sudo las variables de entorno no se conservan.
En mi caso, uso aquí-documento .
Pones tus acciones como my_script.sh
dentro de su DOCUMENTO AQUÍ:
su -u some_user <<EOF
./my_script.sh
EOF
No debe colocar variables directamente aquí, ya que serían interpretadas por su usuario actual.
su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF
Si $MY_VAR
no está configurado para el usuario que ejecuta el script, no se configurará.
Tu variable debe ser llamada dentro de tus scripts, o debes escapar de ellos con \
.
P.ej.
su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF
Aquí, $MY_VAR
tendrá some_user
valor contextual.