Como você usa o sudo para executar um comando como o usuário root real no Ubuntu? Originalmente, pensei que esse era o comportamento padrão do sudo, até que executei:
myuser@localhost:~$ sudo echo `whoami`
myuser
myuser@localhost:~$ sudo -u root echo `whoami`
myuser
No entanto, este é o tipo de comportamento que eu quero, mas apenas em uma única linha:
myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root
whoami
? Basta dizer sudo whoami .. retornos raizRespostas:
Na verdade, eles são executados como raiz. Mas o que está acontecendo com você é que os ticks anteriores estão sendo avaliados antes das
sudo
execuções, pois são necessários para avaliar o comando. Mais diretamente, por que não apenas isso:Seus
whoami
tiques in-back são realmente avaliados em uma subcasca como o usuário atual, e é por isso que você vê o que faz.fonte
0
(zero), que é exatamente o que as pessoas chamam de "root". (Você teria sido bem sesudo
apenas estendeu suas capacidades sem alterar o UID Mas não é isso que ele faz..)sudo
faz. Mas, ao ler a resposta xyr, isso não parece ter sido realmente o caso.O subshell (
whoami
) é executado primeiro, como você, e o resultado (myuser
) é colocado nosudo
comando; o quesudo
vê éecho myuser
. Pense nisso como um atalho para:fonte
Parece haver alguma suposição acontecendo aqui ...
Os backticks obviamente estão fazendo o que os outros explicaram, expandindo-se
whoami
antes de invocar 'sudo' e deixando os backticks fora de 'root', como esperado.Mas é útil entender o que realmente está acontecendo com o sudo (8). Então, na verdade, olhei para a página de manual!
"O uid e o gid reais e efetivos estão definidos para corresponder aos do usuário de destino ..."
Portanto, parece que o comportamento observado não tem nada a ver com a diferença entre o ID do usuário efetivo e o real.
Também é ilustrativo fazer "sudo printenv" e comparar com apenas "printenv", o que realmente me surpreendeu um pouco. Mostra que [i] algumas [/ i] variáveis exportadas estão disponíveis e outras não: relata HOME, PATH, PS1, SHELL, TERM e EDITOR do usuário que está chamando, mas não outras como MANPATH, CVSROOT, LD_LIBRARY_PATH ou ENV. Isso parece um pouco estranho, pois pode fazer com que os programas se comportem de maneira diferente do que no usuário original ou como root.
fonte
O sudo permite executar qualquer comando com privilégios de root, mas não como usuário root. A razão pela qual isso é útil é que, com essa configuração, várias pessoas podem ter direitos de root, mas todo o log e assim por diante ainda indicam quem fez as alterações.
Essa configuração é melhor do que compartilhar senhas raiz. Como tal, foi substituído por ter usuários root em muitas distribuições, incluindo o Ubuntu.
sudo su, por outro lado, faz de você o usuário root e, portanto, não deve ser realmente usado.
Essa diferença também explica seu comportamento observado (correto).
fonte
O Sudo concede temporariamente quem você é (desde que você tenha permissão para sudo) privilégios de nível raiz.
Para ser root, você precisa fazer login como root, que está bloqueado no Ubuntu por padrão.
Você precisa ter cuidado com isso, o sudo não é root. Se você quiser mostrar que Fred está executando algo como sudo, como as variáveis de ambiente SUDO, SUDO_COMMAND pode ser a mais útil.
fonte