Qual é a diferença entre “sudo -i” e “sudo bash -l”?

13

Há uma pergunta recente em relação a vários sysadmins que trabalham como root e sudo bash -l foi referenciado.

Eu procurei por isso no google e no SE, mas não entendi a diferença entre sudo bash -l e sudo -i .

A partir das páginas man do bash e sudo, parece que a diferença pode ser que sudo bash -l executa ~ / .bash_profile, ~ / .bash_login e ~ / .profile, e ~ / .bash_logout do usuário root, mas de testar a mim mesmo, parece que ele roda o .bashrc do usuário normal e não o raiz. Eu posso ter entendido mal qual usuário a expressão ~ está referenciando nas páginas man. A clarificação dos cenários de diferença e uso seria apreciada.

    
por Rqomey 25.05.2012 / 10:41

2 respostas

10

Eles diferem se o shell de login do usuário root especificado em / etc / passwd não for bash, então o segundo comando obterá um shell bash como root enquanto o primeiro comando usará qualquer shell interativo que o usuário root tenha.

    
por 25.05.2012 / 13:54
4

Além disso, para adicionar à resposta @ johnshen64, notei que a invocação sudo -i atualiza a variável $USERNAME env para root e cd ~ para a casa do usuário assim;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

No entanto, para sudo bash -l $USERNAME não é molestado e o diretório de trabalho não é alterado. (embora isso não seja consistente entre os outros usuários, veja os comentários ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Então presumivelmente você não está recebendo exatamente o mesmo conjunto de ~/.bashrc , ou não na mesma ordem, etc.

(minha caixa pode ter ficado um pouco confusa com minhas .bashrc tinkerings, então YMMV)

    
por 25.05.2012 / 14:08