Tem um comando no meu $ PATH, mas ele não está sendo reconhecido quando eu uso o sudo [duplicate]

1
    

Esta pergunta já tem uma resposta aqui:

    
  •              Como fazer o 'sudo' preservar o $ PATH?                                      7 respostas                          
  •     

Estou usando o Ubuntu 14.04. Estou tendo problemas para obter um comando selecionado em meu $ PATH usando o sudo. Eu adicionei isto ao meu arquivo /root/.profile

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

export PATH=$PATH:/usr/local/rvm/rubies/default/bin

mesg n

Eu fiz logout e efetuei login novamente como meu usuário com privilégios sudo. Então eu tento executar o comando dentro do $ PATH mas recebo um “comando não encontrado”…

daveuser@mymachine:/home/rails/myproject$ sudo gem pristine --all
sudo: gem: command not found
daveuser@mymachine:/home/rails/myproject$ sudo echo $PATH
/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/    bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/rvm/bin
daveuser@mymachine:/home/rails/myproject$ sudo which gem
daveuser@mymachine:/home/rails/myproject$ which gem
/usr/local/rvm/rubies/ruby-2.3.0/bin/gem

Observe que quando eu faço echo de $ PATH eu recebo exatamente o PATH onde o comando "gem" mora. O que mais eu preciso fazer para obter meu comando "gem" reconhecido quando eu executo o comando como o usuário sudo?

Editar: o preserv-env não funcionou. eis o que aconteceu…

remoteuser@remotemachine:/home/rails/myproject$ sudo --preserve-env gem pristine --all
[sudo] password for remoteuser: 
sudo: gem: command not found

Editar 2: saída do sudo -l

remoteuser@rtemotemachine:/home/rails/myproject$ sudo -l
Matching Defaults entries for remoteuser on rtemotemachine:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User remoteuser may run the following commands on rtemotemachine:
    (ALL : ALL) ALL
    
por Dave 22.10.2016 / 18:58

2 respostas

2

Por padrão, o sudo redefine as variáveis de ambiente por motivos de segurança, verifique a linha a seguir em / etc / sudoers

Defaults    env_reset
A variável

PATH é redefinida para o valor "secure_path".

e.g. Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Você pode tentar

sudo env "PATH=$PATH" [command] para preservar o caminho do sudo -E não funcionou.

Uma explicação melhor pode ser encontrada aqui

    
por 22.10.2016 / 20:49
1

use

sudo --preserve-env

-E, --preserve-env Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

    
por 22.10.2016 / 19:27