Como dijo en su pregunta, la principal diferencia es el medio ambiente.
sudo su -
vs. sudo -i
En caso de sudo su -
que es un shell de entrada, por lo que /etc/profile
, .profile
y .bashrc
se ejecutan y se encontrará en el directorio inicial de la raíz con el medio ambiente de la raíz.
sudo -i
es casi lo mismo que sudo su -
La -i
opción (simular inicio de sesión inicial) ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario objetivo 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án leídos y ejecutados por el shell.
sudo su
vs. sudo -s
sudo su
llama sudo
con el comando su
. Bash se llama como shell interactivo sin inicio de sesión. Entonces bash
solo se ejecuta .bashrc
. Puede ver que después de cambiar a root todavía está en el mismo directorio:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
lee la $SHELL
variable y ejecuta el contenido. Si $SHELL
contiene /bin/bash
invoca sudo /bin/bash
, lo que significa que /bin/bash
se inicia como un shell sin inicio de sesión, por lo que todos los archivos de puntos no se ejecutan, sino que bash
se lee. bashrc
del usuario llamante. Tu entorno permanece igual. Su hogar no será el hogar de la raíz. Entonces eres root, pero en el entorno del usuario que llama.
Conclusión
La -i
bandera fue agregada sudo
en 2004 , para proporcionar una función similar a sudo su -
, así sudo su -
fue la plantilla para sudo -i
y tenía la intención de funcionar así. 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 un solo comando con mayores privilegios y luego soltar esos privilegios a los originales. Nunca tuvo la intención de cambiar realmente al usuario y dejar abierto un shell raíz. Con el tiempo, sudo
se amplió con tales mecanismos, porque la gente estaba molesta por qué usar sudo
frente a 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
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 de la vieja escuela * nix, tal cosa sudo
podría parecer innecesaria. Agrega complejidad y se comporta más probablemente a los mecanismos que conocemos de Microsofts os-family, 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 llegará el momento, cuando su
será obsoleto y se sudo
reemplazará por su
completo.
Por lo tanto, creo que será mejor utilizar sudo
los mecanismos internos ( -s
, -i
) en lugar de depender de una herramienta antigua como su
.
ubuntu
que impiden que los usuarios sean estándarsu -
. Crearon el problema y ahora hay discusiones interminables sobre cómo resolverlo.