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

41

As instruções em Como definir 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 -sisso, printenv PATHo caminho atualizado não será mostrado. Dei uma olhada, por exemplo, na configuração do caminho do TeX Live para root , mas isso não parece fazer sentido para mim, talvez porque eu seja do fundo do Windows. Existe alguma maneira de definir o caminho verdadeiramente de todo o sistema, de modo que as entradas sejam herdadas por absolutamente todos os processos em execução no sistema?

Joseph Wright
fonte

Respostas:

43

Atualizar:

A definição de variáveis ​​de ambiente global ainda deve ser executada /etc/environment, mas, como você apontou, o uso sudo -sdessas variáveis ​​é "desaparecido".

O motivo disso é sudouma política de redefinição do ambiente e definição de 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"

Portanto, o que for definido no /etc/environmentcaminho for substituído por sudo.

A página de manual dos sudoersestados:

   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 suisso para fornecer um shell com privilégios de root, mas contendo o PATH correto.


Resposta original

Você deve configurá-lo /etc/environment.

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

Para mais informações: EnvironmentVariables

Variáveis ​​de ambiente em todo o sistema

As configurações de variável de ambiente que afetam o sistema como um todo (e não apenas um usuário específico) não devem ser colocadas em nenhum dos muitos scripts em nível de sistema que são executados quando o sistema ou a sessão da área de trabalho são carregados, mas em

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

Não recomendado:

/etc/profile- Esse arquivo é executado sempre que um shell de logon do bash é inserido (por exemplo, ao fazer login no console ou através do ssh), bem como pelo DisplayManager quando a sessão da área de trabalho é carregada. Este é provavelmente o arquivo ao qual você será consultado ao perguntar aos administradores de sistemas UNIX veteranos sobre variáveis ​​de ambiente. No Ubuntu, no entanto, esse arquivo faz pouco mais do que invocar o arquivo /etc/bash.bashrc.

/etc/bash.bashrc- Esta é a versão geral do 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 desktop.

lgarzo
fonte
Ah, bem: para mim, esse é o caminho errado (todos devem herdar o mesmo caminho, ponto final), mas acho que é assim mesmo.
Joseph Wright
Você pode usar visudo(precisa de permissões de root) para editar as configurações do caminho seguro. essa não é uma prática recomendada. É aqui apenas para a educação.
Elliot Labs LLC
2

sudo -isimulará um login (de maneira semelhante a sudo su -) e, assim, fornecerá essas variáveis ​​de ambiente.

ℝaphink
fonte
1
Isto não funciona dessa forma. Pelo menos o PATH é redefinido no meu Ubuntu Trusty test-vm.
Martijn Heemels