Como dice el título, ¿hay alguna diferencia entre estos dos comandos?
sudo su - root
sudo -u root -H /bin/bash
Estoy usando GNU/Linux, si eso hace la diferencia.
Respuesta1
Si desea convertirse en root, la mejor manera de hacerlo es sudo -i
, que simula el inicio de sesión inicial (proporcionándole todas las rutas y variables asociadas con un inicio de sesión root). Si desea iniciar sesión sin obtener los usuarios root.archivos, podrías usarlo sudo su
(no es necesario especificar el usuario root).
Respuesta2
su - # causes the user to run a login shell aka bash --login
# the same as if the user had logged in as the root from the login prompt
y sudo su -
es lo mismo que sudo su - root
especificar root es redundante.
sudo -u root -H /bin/bash
nuevamente -u root
, es redundante, sudo
se ejecuta como root de forma predeterminada pero se -H /bin/bash
ejecuta como sudoer, las variables de entorno SUDO_USER, SUDO_UID y SUDO_COMMAND están configuradas en el nombre/uid de las personas que llaman y bash respectivamente.
Pero en este caso, bash no se ejecuta como shell de inicio de sesión.
Respuesta3
Obviamente, pueden diferir si el shell raíz no es /bin/bash; esto es posible para entornos Linux pequeños o integrados, o tradicional para sistemas BSD que prefieren /bin/[t]csh para el usuario root. Además, `su -' elimina todo el entorno excepto algunas variables relacionadas con la terminal. El comportamiento de sudo en el entorno es configurable (consulte env_reset en /etc/sudoers). Así que cuidado con los detalles...
Respuesta4
La mayor diferencia entre los dos comandos que enumeró es que la ejecución su -
hará que el shell sea un shell de inicio de sesión. Eso significa que se ejecutarán los scripts de inicio de sesión del shell de root (.bash_profile por ejemplo, si es bash), el PWD se establecerá en $HOME y se inicializarán ciertas partes del entorno del usuario. sudo bash
simplemente ejecuta un nuevo shell como shell del usuario de destino, y -H simplemente inicializa una variable, $HOME, en el directorio de inicio del usuario de destino. Otras variables no se establecerán y algunas se transferirán al nuevo shell, como se define en su política de sudo.