En Ubuntu 12.04, cuando sudo -sla variable $ HOME no cambia, entonces si mi usuario habitual lo está regularuser, la situación es la siguiente:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Hace mucho tiempo que abandoné Ubuntu, así que no puedo estar seguro, pero creo que este es el comportamiento predeterminado. Entonces, mis preguntas son:
Q1. ¿Cómo se hace esto? ¿Dónde está la configuración?
Q2 ¿Cómo lo desactivo?
Editar: Gracias por las respuestas, que aclararon un poco las cosas, pero supongo que debo agregar un par de preguntas para obtener la respuesta que estoy buscando.
Q3. En Debian sudo -s, cambia la variable $ HOME a /root. De lo que obtengo de las respuestas y man sudoel shell con el que sudo -sse ejecutó es el indicado /etc/passwd, ¿verdad?
Q4. Sin embargo, tanto en Ubuntu como en Debian, el shell dado /etc/passwdpara root es /bin/bash. En cualquiera de los dos sistemas tampoco, no puedo encontrar dónde está la diferencia .profileo los .bashrcarchivos, en lo que respecta a $ HOME, por lo que el comportamiento de sudo -sdifiere. ¿Alguna ayuda en esto?

sudocomporte de manera diferente entre Debian y Ubuntu.sudo, creo que de hecho hay una diferencia por defecto. Sin embargo, no apuesto por eso, ya que estoy en una caja que ha sido configurada por otra persona y ha estado funcionando durante bastante tiempo. En cualquier caso, para cualquier persona interesada, encontré security.stackexchange.com/questions/18369/… y bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 .Respuestas:
Sudo tiene muchas opciones de configuración en tiempo de compilación. Puede enumerar las configuraciones en su versión con
sudo -V. Una de las diferencias entre la configuración en Debian wheezy y en Ubuntu 12.04 es que laHOMEvariable de entorno se conserva en Ubuntu pero no en Debian; ambas distribuciones borran todas las variables de entorno, excepto algunas que están explícitamente marcadas como seguras para preservar. Por lo tanto, sesudo -sconservaHOMEen Ubuntu, mientras que en DebianHOMEse borra ysudoluego lo establece en el directorio de inicio del usuario objetivo.Puede anular este comportamiento en el
sudoersarchivo. Ejecutevisudopara editar elsudoersarchivo. Hay varias opciones relevantes:env_keepdetermina qué variables de entorno se conservan. UtilíceloDefaults env_keep += "HOME"para retener laHOMEvariable de entorno de la persona que llama oDefaults env_keep -= "HOME"para borrarla (y reemplazarla por el directorio de inicio del usuario objetivo).env_resetdetermina si las variables de entorno se restablecen en absoluto. Restablecer las variables de entorno a menudo es necesario para las reglas que permiten ejecutar un comando específico, pero no tiene un beneficio de seguridad directo para las reglas que permiten ejecutar comandos arbitrarios de todos modos.always_set_home, si está configurado, haceHOMEque se anule incluso si se conserva debido a queenv_resetestá deshabilitado oHOMEestá en laenv_keeplista. Esta opción no tiene efecto siHOMEno se conserva de todos modos.set_homees comoalways_set_home, pero solo se aplicasudo -s, no cuando se llamasudocon un comando explícitoEstas opciones se pueden configurar para un usuario fuente dado, un usuario objetivo dado o un comando dado; Vea el
sudoersmanual para más detalles.Siempre puede optar por anular
HOMEuna llamada dadasudopasando la opción-H.El shell nunca anulará el valor de
HOME. (Se estableceríaHOMEsi no estuviera configurado, perosudosiempre se configura deHOMEuna forma u otra).Si ejecuta
sudo -i,sudosimula un inicio de sesión inicial. Esto incluye configurarHOMEel directorio de inicio del usuario objetivo e invocar un shell de inicio de sesión .fuente
Use en
sudo -H -ilugar desudo -sobtener un shell de inicio de sesión interactivo:De
man sudo:fuente
-iimplica-H.Esto tiene poco que ver con el comportamiento
sudoy mucho con la diferencia entre un "shell de inicio de sesión" y un "shell sin inicio de sesión". La solución rápida escomo se puede ver con:
Como se señala en el manual de sudo:
fuente
HOMEo no tiene todo que ver con cómo se configura sudo./etc/sudoers, no hay nada diferente entre Debian y Ubuntu en lo que respecta a $ HOME.always_set_homeyset_homeensudoers.Una forma bastante popular de obtener root shell también está usando:
fuente
sudo -i -HSolía usar , pero falló al instalar un paquete global npm desde git. ¡Consudo su -eso funciona! Gracias.Para deshacerse del comportamiento diferente de
sudo -sUbuntu y Debian, respectivamente, puede usar unsudocontenedor (respuesta a la P4):fuente