Passando o PATH pelo sudo

12

Resumindo : como fazer com que o sudo não limpe o PATH toda vez?

Eu tenho alguns sites implantados no meu servidor (testes Debian) escritos com Ruby on Rails. Eu uso o Mongrel + Nginx para hospedá-los, mas há um problema que surge quando eu 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 proprietário e grupo configurados para o meu usuário, enquanto o Mongrel é executado sob o usuário mestiço que está severamente restrito em seus direitos. Então Mongrel deve ser iniciado em root (ele pode mudar automaticamente o UID) ou mestiço.

Para gerenciar o mongrel eu uso o gem mongrel_cluster porque ele permite iniciar ou parar qualquer quantidade de servidores Mongrel com apenas um comando. Mas ele precisa do diretório /var/lib/gems/1.8/bin para estar no PATH: isso não é suficiente para iniciá-lo com o caminho absoluto .

Modificando o PATH no root .bashrc não alterou nada, ajustes do env_reset do sudo e env_keep 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 assim no Debian estável (lenny) também.

    
por whitequark 21.01.2010 / 08:54

4 respostas

11

Lutou com o mesmo problema por algumas horas. No debian lenny, você pode consertá-lo adicionando

Defaults        exempt_group=<your group> 

para o arquivo sudoers.

Esta é a única maneira de contornar a opção --secure-path compilada, (até onde eu sei).

Notavelmente, isso também isenta os usuários da necessidade de digitar sua senha quando eles sudo.

    
por 03.02.2011 / 11:06
2

Se você tiver secure_path definido em /etc/sudoers , poderá jogar com env_reset / env_keep e não fará diferença no caminho. Se você vir algo assim, comente.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
    
por 25.06.2010 / 16:08
0

Eu diria que olhe para as opções env_reset e env_keep em homem sudo . Mas parece que você já fez isso (você apenas erroneamente chama env_keep "keepenv"). Se você desabilitar a opção env_reset (o padrão está habilitado), eu acho que não é necessário 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ê poderia tentar desativá-lo.

As opções anteriores são definidas no seu arquivo / etc / sudoers. Há também a opção de linha de comando -i para sudo. Isso fará com que o sudo rode /root/.profile ou /root/.login. Você poderia definir o caminho desejado lá.

    
por 08.04.2010 / 06:21
-1

Bem, você está fazendo algo errado. Além disso, você não especificou o que fez com seu arquivo / etc / sudoers. Aqui está o que você deveria ter feito - este é um sistema CentOS, BTW:

Primeiro, isso é com a configuração correta env_keep (observe que o PATH está lá):

sudo grep -5 PATH /etc/sudoers Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \ _XKB_CHARSET XAUTHORITY PATH"

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

Parece bom. Agora vamos remover a configuração env_keep e tentar novamente:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

Que caminho triste:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin
    
por 16.04.2010 / 07:32