¿Cuál es la diferencia funcional entre sudo su y sudo -i?

19

¿Por qué se prefiere uno sobre el otro en este ejemplo?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Proporcione enlaces a la documentación de Ubuntu.

chili555
fuente
Reconsidere su elección de respuestas "aceptadas". El más votado es en realidad el único correcto.
Kyle Strand

Respuestas:

15

El sudo sucomando significa "cambiar usuario" y le permite convertirse en otro usuario. Permite a un usuario permitido ejecutar un comando como superusuario u otro usuario, como se especifica en el archivo sudoers.

La opción -i (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 el shell leerá los archivos de recursos específicos de inicio de sesión como .profile o .login. Si se especifica un comando, se pasa al shell para su ejecución a través de la opción -c del shell. Si no se especifica ningún comando, se ejecuta un shell interactivo.

Fuente: ManPage

Mitch
fuente
1
"Usar su crea un problema de seguridad y es esencialmente peligroso". ¿Qué?
Deja de dañar a Mónica el
1
Si ejecuta sudo su, se le solicita su contraseña, no la contraseña de root. El usuario root ni siquiera necesita tener una contraseña. De todos modos, si un administrador está usando la contraseña de root, eso no implica que todos los usuarios habituales la conozcan.
Deja de dañar a Mónica el
2
No, no lo hará. sudose ejecuta sucomo root y root puede sua cualquier usuario sin conocer su contraseña. Los malentendidos fundamentales sobre cómo funciona el sistema merecen una OMI negativa.
Deja de dañar a Monica el
3
Y eliminar tus comentarios solo aumenta la confusión.
Deja de dañar a Monica el
1
No lo estás haciendo mucho mejor. sudo -itampoco pedirá la contraseña de root, por lo que no es relevante para la pregunta.
Deja de dañar a Monica el
14

sudo susolo cambia el usuario actual a root. La configuración del entorno (como PATH) sigue siendo la misma.

sudo -i crea un entorno nuevo como si la raíz acabara de iniciar sesión.

La diferencia es más notable si usa otros usuarios. Después sudo su bobserás bob, pero en el mismo lugar. Después sudo -i -u bobserá Bob, en el directorio de inicio de Bob, con el shell predeterminado de Bob y con Bob .profiley cualquier otra secuencia de comandos de inicio de sesión que se haya ejecutado.

Ver man sudopara más detalles de lo que -ihace. Lamentablemente, man sues ligero en los detalles.


Encontré una versión de man su(desde login-1: 4.1.4.2 + svn3283-3ubuntu5.1) que tiene lo siguiente para decir:

$ PATH restablecer de acuerdo con las opciones /etc/login.defs ENV_PATH o ENV_SUPATH (ver más abajo);

$ IFS restablecer a "<space> <tab> <newline>", si se configuró.

Tenga en cuenta que el comportamiento predeterminado para el entorno es el siguiente:

Las variables de entorno $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH y $ IFS se restablecen.

Si no se usa --login, se copia el entorno, excepto las variables anteriores.

Si se usa --login, las variables de entorno $ TERM, $ COLORTERM, $ DISPLAY y $ XAUTHORITY se copian si se configuraron.

Otros entornos pueden ser configurados por módulos PAM.

Entonces, si y en qué medida sudo sucambia el entorno depende de su distribución y configuración. Por sudo -ilo tanto, es teóricamente más portátil.

Deja de dañar a Monica
fuente
su hace ajustes del entorno de cambio, y puede ser utilizado para simular un inicio de sesión utilizando -o -l. Incluso sin -l, $PATH se cambia. ¡Pruebe estas afirmaciones antes de hacerlas! (¿Quiso decir que PWDsigue siendo el mismo?)
Kyle Strand
La verdadera pregunta es, ¿hay alguna diferencia entre sudo su -y sudo -i?
Kyle Strand
1
Claramente estás pensando en esto y realmente estás haciendo algunas pruebas en el shell, así que te pido disculpas por mi breve comentario de "prueba estas afirmaciones". Dicho esto, en mi sistema observo que eso $PATHcambia cuando lo uso susin sudo(usando la contraseña de root). De acuerdo con info su(que podría ser una mejor opción para vincular en su respuesta), de suhecho lee la entrada de contraseña para el usuario en el que se está convirtiendo. Posiblemente el $PATHcambio que estoy observando depende del sistema (estoy en Debian 7).
Kyle Strand
1
Hmmm Mi man su(que es más largo que el que vinculaste) dice que es parte de shadow-utils 4.1.5.1. Mi manpágina también dice que $PATHestá configurado incluso si --preserve-environmentse usa. Así que supongo que realmente es solo una diferencia entre las diferentes versiones de su.
Kyle Strand
1
El comportamiento también se ve afectado por su configuración PAM. /etc/pam.d/sudoy /etc/pam.d/supuede configurarse para hacer cosas completamente diferentes o exactamente las mismas.
Deja de dañar a Mónica el
7

El principal problema es una de las configuraciones del entorno (no tan sensatas).

El uso sudo sudel nuevo shell obtiene su entorno del usuario que emite el comando, lo que puede ser problemático.

Con sudo -iusted obtienes una cáscara de raíz limpia.

Ver notas especiales sobre sudo y conchas

Queda por observar que rara vez es necesario crear un shell raíz.

Guntbert
fuente
Las "notas especiales" que enlaza para decir que sudo -ison similares sudo su -, que en realidad no obtiene su entorno del usuario que emite el comando.
Kyle Strand
@KyleStrand THX por señalar esto - era un error tipográfico, la pregunta realmente se trata sudo suvs sudo -i.
guntbert