Por que o sudo não adiciona o PATH do root ao Ubuntu 12.04?

4

Atualizei recentemente meu servidor para o Ubuntu Server 12.04. Anteriormente, ele estava rodando 11.04.

Desde então, eu tenho tido problemas para realizar comandos de usuário root através do sudo. Um exemplo disso seria:

> sudo ufw status
sudo: ufw: command not found
> sudo su - root
> ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    LIMIT       Anywhere

Com o Ubuntu 11.04, o sudo ufw status normal funcionou bem, mas com o Ubuntu 12.04 ele não consegue encontrar o comando.

Isso parece ser apenas um problema com o PATH não definido ( ufw é encontrado em /usr/sbin/ufw ).

O que eu estou tentando entender é o que eu preciso mudar de volta para que o PATH do root esteja configurado corretamente quando eu apenas sudo <sbin command> ?

    
por couling 05.06.2012 / 17:40

2 respostas

4

Além de razões de segurança (como Anders tem referido ), mantendo o PATH do usuário original em conformidade com o Princípio de menor espanto .

Suponha que você execute um programa chamado foo , mas descubra que realmente precisa executá-lo como root . Então você corre sudo foo . Seria ruim se o programa executado por sudo foo fosse diferente do programa executado por foo , o que aconteceria se houvesse um% diferentefoo em root PATH . Isso basicamente violaria suas expectativas e a suposição geral de que sudo faz a mesma coisa que você coloca depois, exceto como root .

Isso é o que aconteceria se sudo pré pagasse root PATH ao seu PATH . Mas suponha que sudo ap pagou o caminho de root para o seu PATH . Se esse era o comportamento de sudo , provavelmente você presumiria que, se pudesse executar um programa (chame-o de bar ) ao simular um shell de login root inicial ( sudo -i ), também poderia executá-lo com sudo bar . Mas essa suposição estaria errada, porque pode haver um bar diferente em seu próprio caminho (ou seja, não root ).

Em vez do comportamento de sudo mudar de um lançamento do Ubuntu para outro, o que provavelmente aconteceu foi que seu PATH mudou. Se você adicionar /sbin , /usr/sbin e /usr/local/sbin ao seu PATH , o problema será resolvido. A menos que você queira apenas sbin em seu PATH ao executar programas como root . Nesse caso, eu recomendo postar uma pergunta separada sobre isso (embora uma técnica para realizar isso seja sugerida na resposta de Anders . )

    
por Eliah Kagan 07.06.2012 / 20:32
5

Você consultou a página do manual para sudo ? Em a seção SECURITY NOTES eles falam sobre como sudo usa o PATH variable.

Você também pode procurar em /etc/sudoers como o PATH pode ser alterado com secure_path . As configurações também podem ser feitas por arquivos no diretório /etc/sudoers.d/ .

Sugerimos que você faça alterações na configuração sudo criando arquivos em /etc/sudoers.d/ , porque suas alterações permanecerão independentes das alterações feitas em /etc/sudoers que podem ocorrer ao atualizar sudo para uma nova versão. Você ainda deve usar o comando visudo para criar e editar arquivos em /etc/sudoers.d/ .

    
por Anders 06.06.2012 / 22:33