Configurando o PATH para que se aplique a todos os usuários, incluindo root / sudo

36

As instruções em Como Eu defino variáveis ​​PATH para todos os usuários em um servidor? trabalhe para definir o PATH para todos os usuários 'normais'. No entanto, se eu fizer sudo -s e, em seguida, printenv PATH , o caminho atualizado não será mostrado. Eu dei uma olhada, por exemplo, Definindo o caminho do TeX Live para o root , mas isso não parece fazer sentido para mim, talvez como eu sou de um fundo do Windows. Existe alguma maneira de definir o caminho verdadeiramente para todo o sistema, de modo que as entradas sejam herdadas por absolutamente todos os processos em execução no sistema?

    
por Joseph Wright 30.04.2012 / 11:48

2 respostas

40

Atualização:

A definição de variáveis ​​de ambiente global ainda deve ser realizada em /etc/environment , mas, como você observou, usar sudo -s faz com que o efeito dessas variáveis ​​seja "desaparecido".

A razão para isso é que sudo tem uma política de redefinir o Ambiente e definir um caminho seguro . Está ativado por padrão:

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Assim, o que estiver definido no /etc/environment do caminho será substituído por sudo .

A página de manual para sudoers states:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Como solução alternativa, você pode usar sudo su que fornecerá um shell com privilégios de root, mas contendo o PATH correto.

Resposta original

Você deve defini-lo em /etc/environment .

Teste sudo YOUR_TEXT_EDITOR /etc/environment (certifique-se de criar um backup primeiro).

Para mais informações: EnvironmentVariables

  

Variáveis ​​de ambiente de todo o sistema

     

Configurações de variáveis ​​de ambiente que afetam o sistema como um todo   (em vez de apenas um usuário em particular) não deve ser colocado em nenhum   os muitos scripts de nível de sistema que são executados quando o sistema ou o   sessão de desktop são carregados, mas em

     

/etc/environment - Este arquivo é especificamente destinado a configurações de variáveis ​​de ambiente em todo o sistema. Não é um arquivo de script, mas sim   consiste em expressões de atribuição, uma por linha. Especificamente,   O arquivo armazena as configurações de localidade e caminho do sistema.

     

Não recomendado:

     

/etc/profile - Este arquivo é executado sempre que um shell de login bash é inserido (por exemplo, ao efetuar login no console ou por ssh), como   bem como pelo DisplayManager quando a sessão da área de trabalho é carregada. Isto é   provavelmente o arquivo que você será referido ao pedir veterano UNIX   administradores do sistema sobre variáveis ​​de ambiente. No Ubuntu, no entanto,   este arquivo faz pouco mais que invocar o arquivo /etc/bash.bashrc.

     

/etc/bash.bashrc - Esta é a versão de todo o sistema do arquivo ~ / .bashrc. O Ubuntu é configurado por padrão para executar este arquivo   sempre que um usuário entra em um shell ou no ambiente de área de trabalho.

    
por lgarzo 30.04.2012 / 11:59
1

sudo -i simulará um login (de maneira semelhante a sudo su - ) e, portanto, fornecerá a você essas variáveis ​​de ambiente.

    
por ℝaphink 15.10.2012 / 13:58