it-swarm-es.tech

¿Cómo hago para que Sudo -u $ user use el entorno de los usuarios?

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.

19
xenoterracide

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
21
Gerald Schneider

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
4
0xC0000022L

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.

1
Juaniyyoo