¿Cómo obtengo sudo -u $ user para usar el env de los usuarios?

19

Parece que cuando sudoing abajo que el uso sudo -u $userque se sigue utilizando el entorno de la raíz. ¿Cómo puedo hacer sudouso del entorno de los usuarios? Como nota especial, no todos los usuarios en los que usaré esto tienen shells de inicio de sesión.

xenoterracida
fuente
Definir 'medio ambiente'. # whoami => root # sudo -u user whoami => user
alex
1
@alex supongo que sudo -u useres análogo a su usercambiar el entorno en su que tienes que usarsu - user
xenoterracide
Pero, ¿qué quiere decir con "el entorno del usuario" si el usuario no tiene un shell de inicio de sesión?
Thomas Themel
Los usuarios de @Thomas pueden ejecutar programas incluso si no pueden -uusar shell ... Creo que también ignora los grupos ... Intenté algo desde la raíz (usando sudo -u down) y funcionó, aparentemente no lo hizo para el usuario. .. así que tengo que asegurarme de que estoy ejecutando comandos de una manera que tenga todas las limitaciones y problemas ambientales.
xenoterracide

Respuestas:

21

Tratar sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
Gerald Schneider
fuente
desafortunadamente no funciona si no tienen un shell en /etc/passwd:( pero supongo que sí ...
xenoterracide
En cuanto a la página del manual, parece que -Ees la que preserva el medio ambiente, es decir, todas las variables de entorno, etc. están allí, aunque todavía no se pone PATHy LD_LIBRARY_PATHal usuario de la llamada.
Shahbaz
1
$SUDO_USERse puede usar
Rahul Patil
4

man sudoersen Debian menciona otra posibilidad. No estoy seguro de qué dirección quiere, pero su pregunta parece que le gustaría tener la env_resetopción /etc/sudoers: lo opuesto es básicamente la env_keeplista. Para establecer lo correcto HOME, puede usar la -Hopción sudodirectamente o, nuevamente sudoers, con la always_set_homeopción.

Alternativamente, puede usar env_filepara especificar un entorno exacto que desea pasar. Sin embargo, creo que es mejor si revisa las env_*opciones desde man sudoers, porque lo /etc/sudoerscontrola todo y ese es el punto al que recurrir.

Aquí hay parte del contexto en el que uso env_resetdentro de mi sudoersarchivo:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
0xC0000022L
fuente
1

Al sudar las variables de entorno no se conservan.

En mi caso, uso el documento aquí .

Pones tus acciones como my_script.shdentro de tu 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_VARno está configurado para el usuario que ejecuta el script, no se configurará.

Su variable debe ser llamada dentro de sus scripts, o debe escapar de ellos con \.

P.ej.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Aquí, $MY_VARtendrá un some_uservalor contextual.

Juaniyyoo
fuente
Buena respuesta. Una pequeña corrección: debería ser en su - some_userlugar de su -u some_user.
Rudolfbyker