Para iniciar un shell raíz en máquinas donde la cuenta raíz está deshabilitada, puede ejecutar uno de los siguientes:
sudo -i
:ejecute un shell de inicio de sesión interactivo (lee/root/.bashrc
y/root/.profile
)sudo -s
:ejecute un shell interactivo sin inicio de sesión (lee/root/.bashrc
)
En el mundo de Ubuntu, muy a menudo veo sudo su
sugerido como una forma de obtener un shell raíz. ¿Por qué ejecutar dos comandos separados cuando uno es suficiente? Por lo que puedo decir, sudo -i
es equivalente a sudo su -
y sudo -s
es lo mismo que sudo su
.
Las únicas diferencias parecen ser (comparando sudo -i
a la izquierda y sudo su -
a la derecha):
Y comparando sudo -s
(izquierda) y sudo su
(derecha):
Las principales diferencias (ignorando el SUDO_foo
variables y LS_COLORS
) parece ser el XDG_foo
variables del sistema en el sudo su
versiones.
¿Hay algún caso en el que esa diferencia justifique el uso del poco elegante sudo su
? ? ¿Puedo decirle a la gente con seguridad (como lo hago a menudo) que nunca tiene sentido ejecutar sudo su
o me estoy perdiendo algo?
Respuesta aceptada:
Como dijiste en tu pregunta, la principal diferencia es el entorno.
sudo su -
contra sudo -i
En caso de sudo su -
es un shell de inicio de sesión, por lo que /etc/profile
, .profile
y .bashrc
se ejecutan y se encontrará en el directorio de inicio de root con el entorno de root.
sudo -i
es casi lo mismo que sudo su -
El -i
(simular inicio de sesión inicial) ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario de destino como un shell de inicio de sesión. Esto significa que los archivos de recursos específicos de inicio de sesión como .profile
, .bashrc
o .login
será leído y ejecutado por el shell.
sudo su
contra sudo -s
sudo su
llama a sudo
con el comando su
. Bash se llama shell interactivo sin inicio de sesión. Así que bash
solo ejecuta .bashrc
. Puede ver que después de cambiar a root todavía está en el mismo directorio:
[email protected]:~$ sudo su
[email protected]:/home/user#
sudo -s
lee el $SHELL
variable y ejecuta el contenido. Si $SHELL
contiene /bin/bash
invoca sudo /bin/bash
, lo que significa que /bin/bash
se inicia como shell sin inicio de sesión, por lo que todos los archivos de puntos no se ejecutan, pero bash
en sí mismo lee .bashrc
del usuario llamante. Su entorno sigue siendo el mismo. Su casa no será la casa de root. Así que eres root, pero en el entorno del usuario que llama.
Conclusión
El -i
se agregó la bandera a sudo
en 2004, para proporcionar una función similar a sudo su -
, entonces sudo su -
fue la plantilla para sudo -i
y la intención de trabajar como él. Creo que realmente no importa cuál uses, a menos que el entorno no sea importante.
Adición
Un punto básico que debe mencionarse aquí es que sudo
fue diseñado para ejecutar solo un único comando con mayores privilegios y luego dejar esos privilegios a los originales. Nunca tuvo la intención de realmente cambiar el usuario y dejar abierto un shell raíz. Con el tiempo, sudo
se amplió con tales mecanismos, porque la gente estaba molesta sobre por qué usar sudo
delante de cada comando.
Entonces el significado de sudo
fue abusado sudo
estaba destinado a alentar al usuario a minimizar el uso de privilegios de root.
Lo que tenemos ahora es sudo
se vuelve cada vez más popular. Está integrado en casi todas las distribuciones de Linux conocidas. La herramienta original para cambiar a otra cuenta de usuario es su
. Para un veterano *nix de la vieja escuela, cosas como sudo
puede parecer innecesario. Agrega complejidad y se comporta más probablemente con los mecanismos que conocemos de la familia de sistemas operativos de Microsoft y, por lo tanto, es contrario a la filosofía de simplicidad de los sistemas *nix.
Realmente no soy un veterano, pero también en mi opinión sudo
siempre fue una espina en mi costado, desde el momento en que se presentó y siempre trabajé en torno al uso de sudo
, si fuera posible. Soy muy reacio a usar sudo
. En todos mis sistemas, la cuenta raíz está habilitada. Pero las cosas cambian, tal vez llegue el momento, cuando su
quedará en desuso y sudo
reemplaza su
completamente.
Por lo tanto, creo que será mejor usar sudo
Los mecanismos internos (-s
, -i
) en lugar de confiar en una herramienta antigua como su
.