Qual é a diferença entre "sudo -i" e "sudo bash -l"

13

Há uma pergunta recente sobre vários administradores de sistema que trabalham como raiz e sudo bash -lfoi referenciada.

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

Nas páginas do manual para bash e sudo, parece que a diferença pode ser que sudo bash -lexecute ~ / .bash_profile, ~ / .bash_login e ~ / .profile e ~ / .bash_logout do usuário root, mas, ao me testar, parece ele executa o .bashrc do usuário normal e não o root. Talvez eu tenha entendido mal qual usuário a expressão ~ está fazendo referência nas páginas de manual. O esclarecimento dos cenários de diferença e uso seria apreciado.

Rqomey
fonte

Respostas:

10

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

johnshen64
fonte
Olá @ johnshen64, você poderia esclarecer os diferentes cenários de uso?
Rqomey 25/05
2
pessoas como o shell que estão usando; portanto, se você quiser usar o bash, use o segundo formulário. o segundo formulário também simula um login real (é isso que -l significa). é claro, você também pode digitar bash quando descobrir que o usuário (o padrão é root) não possui o bash como shell interativo no uso do sudo -i. caso contrário, a diferença é muito pequena. como mostra a outra resposta, também existem algumas pequenas diferenças de ambiente. na maioria dos casos, a diferença não importa e a primeira é mais curta, pois as distros mais comuns usam o bash. Eu raramente uso o 2º formulário.
25412 Jan
4

Também para adicionar à resposta @ johnshen64, notei que a sudo -iinvocação atualiza a $USERNAMEvariável env para roote cd ~para a página inicial do usuário;

$ 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 $USERNAMEnão é molestado e o diretório de trabalho não é alterado. (embora isso não seja consistente com outros usuários, consulte 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 ~/.bashrcou na mesma ordem, etc.

(minha caixa pode ter sido um pouco bagunçada pelos meus .bashrcajustes, então YMMV)

Tom H
fonte
Obrigado @ Tom H: echo $USERNAMEretorna o root duas vezes para mim (no meu desktop ubuntu e no centos 5.2). PWD é como você relata.
Rqomey 25/05