Resumindo : como fazer o sudo para não liberar PATH toda vez?
Eu tenho alguns sites implantados no meu servidor (teste Debian) escritos com Ruby on Rails. Eu uso o Mongrel + Nginx para hospedá-los, mas há um problema que ocorre quando preciso reiniciar o Mongrel (por exemplo, depois de fazer algumas alterações).
Todos os sites são verificados no VCS (git, mas não é importante) e têm o proprietário e o grupo definidos para o meu usuário, enquanto o Mongrel é executado sob o usuário, huh, mongrel severamente restrito em seus direitos. Portanto, o Mongrel deve ser iniciado como root (ele pode alterar automaticamente o UID) ou mongrel.
Para gerenciar o mongrel, eu uso o mongrel_cluster gem porque permite iniciar ou parar qualquer quantidade de servidores Mongrel com apenas um comando. Mas ele precisa que o diretório /var/lib/gems/1.8/bin esteja no PATH: isso não é suficiente para iniciá-lo com o caminho absoluto .
A modificação de PATH no .bashrc raiz não mudou nada, os ajustes env_reset e env_keep do sudo também não.
Então a pergunta: como adicionar um diretório ao PATH ou manter o PATH do usuário no sudo?
Atualização: alguns exemplos
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Também posso dizer que funciona exatamente dessa maneira no Debian stable (lenny) também.
Respostas:
Lutou com o mesmo problema por algumas horas. No debian lenny, você pode corrigi-lo adicionando
para o arquivo sudoers.
Esta é a única maneira de contornar a opção compilada --secure-path, (tanto quanto eu sei).
Notavelmente, isso também isenta os usuários de precisarem digitar suas senhas quando fazem o sudo.
fonte
Se você se
secure_path
inscreveu/etc/sudoers
, pode jogar comenv_reset
/env_keep
tudo o que quiser e isso não fará nenhuma diferença no caminho. Se você vir algo assim, comente.fonte
Eu diria que procure nas opções env_reset e env_keep no man sudo . Mas parece que você já fez isso (você acabou de chamar por eng_keep "keepenv"). Se você desabilitar a opção env_reset (o padrão está ativado), acho que não deve apagar nenhuma variável env. Mas isso é menos seguro.
Há também uma opção secure_path para o sudo; Eu acho que isso está ativado por padrão. Você pode tentar desativá-lo.
As opções anteriores são definidas no seu arquivo / etc / sudoers. Há também a
-i
opção de linha de comando para o sudo. Isso fará com que o sudo execute /root/.profile ou /root/.login. Você pode definir o caminho desejado lá.fonte
Bem, você está fazendo algo errado. Além disso, você não especificou o que fez com o arquivo / etc / sudoers. Aqui está o que você deveria ter feito - este é um sistema CentOS, BTW:
Primeiro, isso está com a configuração env_keep correta (observe que PATH está lá):
Parece bom. Agora vamos remover a configuração env_keep e tente novamente:
Que CAMINHO triste:
fonte