Como o título diz, há uma diferença entre esses dois comandos:
sudo su - root
sudo -u root -H /bin/bash
Estou usando GNU/Linux, se isso faz diferença.
Responder1
Se você deseja se tornar root, a melhor maneira de fazer isso é sudo -i
, que simula o login inicial (fornecendo todos os caminhos e variáveis associados a um login root). Se você deseja fazer login sem obter os usuários root.arquivos, você poderia simplesmente usar sudo su
(não há necessidade de especificar o usuário root).
Responder2
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
e sudo su -
é o mesmo que sudo su - root
especificar que root é redundante.
sudo -u root -H /bin/bash
novamente -u root
, é redundante, sudo
é executado como root por padrão, mas é -H /bin/bash
executado como um sudoer, os env vars SUDO_USER, SUDO_UID e SUDO_COMMAND são definidos para o nome/uid e bash do chamador, respectivamente.
Mas neste caso, o bash não é executado como um shell de login.
Responder3
Obviamente, eles podem ser diferentes se o shell root não for /bin/bash - isso é possível para ambientes Linux pequenos ou incorporados, ou tradicional para sistemas BSD que preferem /bin/[t]csh para usuário root. Além disso, `su -' elimina todos os ambientes, exceto algumas variáveis relacionadas ao terminal. O comportamento do sudo no ambiente é configurável (veja env_reset em/etc/sudoers). Então tome cuidado com os detalhes...
Responder4
A maior diferença entre os dois comandos listados é que a execução su -
fará com que o shell seja um shell de login. Isso significa que os scripts de login do shell do root serão executados (.bash_profile por exemplo, se for bash), o PWD será definido como $HOME e certas partes do ambiente do usuário serão inicializadas. sudo bash
apenas executa um novo shell como o shell do usuário alvo, e o -H apenas inicializa uma variável, $HOME, no diretório inicial do usuário alvo. Outras variáveis não serão definidas e algumas serão transportadas para o novo shell, conforme definido na sua política sudo.