Existe uma diferença entre sudo su - root e sudo -u root -H /bin/bash?

Existe uma diferença entre sudo su - root e sudo -u root -H /bin/bash?

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 - rootespecificar que root é redundante.

sudo -u root -H /bin/bashnovamente -u root, é redundante, sudoé executado como root por padrão, mas é -H /bin/bashexecutado 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 bashapenas 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.

informação relacionada