En Ubuntu 12.04, cuando sudo -s
la 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 sudo
el shell con el que sudo -s
se ejecutó es el indicado /etc/passwd
, ¿verdad?
Q4. Sin embargo, tanto en Ubuntu como en Debian, el shell dado /etc/passwd
para root es /bin/bash
. En cualquiera de los dos sistemas tampoco, no puedo encontrar dónde está la diferencia .profile
o los .bashrc
archivos, en lo que respecta a $ HOME, por lo que el comportamiento de sudo -s
difiere. ¿Alguna ayuda en esto?
sudo
comporte 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 laHOME
variable 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 -s
conservaHOME
en Ubuntu, mientras que en DebianHOME
se borra ysudo
luego lo establece en el directorio de inicio del usuario objetivo.Puede anular este comportamiento en el
sudoers
archivo. Ejecutevisudo
para editar elsudoers
archivo. Hay varias opciones relevantes:env_keep
determina qué variables de entorno se conservan. UtilíceloDefaults env_keep += "HOME"
para retener laHOME
variable de entorno de la persona que llama oDefaults env_keep -= "HOME"
para borrarla (y reemplazarla por el directorio de inicio del usuario objetivo).env_reset
determina 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, haceHOME
que se anule incluso si se conserva debido a queenv_reset
está deshabilitado oHOME
está en laenv_keep
lista. Esta opción no tiene efecto siHOME
no se conserva de todos modos.set_home
es comoalways_set_home
, pero solo se aplicasudo -s
, no cuando se llamasudo
con un comando explícitoEstas opciones se pueden configurar para un usuario fuente dado, un usuario objetivo dado o un comando dado; Vea el
sudoers
manual para más detalles.Siempre puede optar por anular
HOME
una llamada dadasudo
pasando la opción-H
.El shell nunca anulará el valor de
HOME
. (Se estableceríaHOME
si no estuviera configurado, perosudo
siempre se configura deHOME
una forma u otra).Si ejecuta
sudo -i
,sudo
simula un inicio de sesión inicial. Esto incluye configurarHOME
el directorio de inicio del usuario objetivo e invocar un shell de inicio de sesión .fuente
Use en
sudo -H -i
lugar desudo -s
obtener un shell de inicio de sesión interactivo:De
man sudo
:fuente
-i
implica-H
.Esto tiene poco que ver con el comportamiento
sudo
y 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
HOME
o 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_home
yset_home
ensudoers
.Una forma bastante popular de obtener root shell también está usando:
fuente
sudo -i -H
Solía usar , pero falló al instalar un paquete global npm desde git. ¡Consudo su -
eso funciona! Gracias.Para deshacerse del comportamiento diferente de
sudo -s
Ubuntu y Debian, respectivamente, puede usar unsudo
contenedor (respuesta a la P4):fuente