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, .profiley .bashrcse ejecutan y se encontrará en el directorio inicial de la raíz con el medio ambiente de la raíz.
sudo -ies casi lo mismo que sudo su -La -iopció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, .bashrco .loginserán leídos y ejecutados por el shell.
sudo su vs. sudo -s
sudo sullama sudocon el comando su. Bash se llama como shell interactivo sin inicio de sesión. Entonces bashsolo 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 -slee la $SHELLvariable y ejecuta el contenido. Si $SHELLcontiene /bin/bashinvoca sudo /bin/bash, lo que significa que /bin/bashse inicia como un shell sin inicio de sesión, por lo que todos los archivos de puntos no se ejecutan, sino que bashse lee. bashrcdel 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 -ibandera fue agregada sudoen 2004 , para proporcionar una función similar a sudo su -, así sudo su -fue la plantilla para sudo -iy 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 sudofue 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, sudose amplió con tales mecanismos, porque la gente estaba molesta por qué usar sudofrente a cada comando.
Entonces el significado de sudofue abusado. sudoestaba destinado a alentar al usuario a minimizar el uso de privilegios de root.
Lo que tenemos ahora es sudocada 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 sudopodrí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 sudosiempre 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 suserá obsoleto y se sudoreemplazará por sucompleto.
Por lo tanto, creo que será mejor utilizar sudolos mecanismos internos ( -s, -i) en lugar de depender de una herramienta antigua como su.
ubuntuque impiden que los usuarios sean estándarsu -. Crearon el problema y ahora hay discusiones interminables sobre cómo resolverlo.