Você provavelmente desejará editar o seu arquivo sudoers
com sudo visudo
, encontrar a linha Defaults env_reset
e adicionar uma linha Defaults env_keep = "JAVA_HOME"
abaixo dela. Veja abaixo a explicação, detalhes e alternativas.
Por que sudo
está limpando JAVA_HOME
Quando você executa um comando com sudo
, por padrão, seu ambiente não é passado intacto. A maioria das variáveis de ambiente é removida, por segurança, e isso geralmente é desejável. Como diz man sudoers
, na seção "Ambiente de comando":
Como as variáveis de ambiente podem influenciar o comportamento do programa,
sudoers
fornece um meio de restringir quais variáveis do usuário ambiente são herdados pelo comando a ser executado. Existem dois maneiras distintassudoers
pode lidar com variáveis de ambiente.Por padrão, a opção
env_reset
está habilitada. Isso faz com que comandos para ser executado com um novo ambiente mínimo. No AIX (e sistemas Linux sem PAM), o ambiente é inicializado com o conteúdo do/etc/environment
file. O novo ambiente contém o TERM, PATH, Variáveis HOME, MAIL, SHELL, LOGNAME, USER, USERNAME e SUDO_ * além de variáveis do processo de chamada permitido peloenv_check
eenv_keep
opções. Esta é efetivamente uma lista de permissões para variáveis de ambiente.Se, no entanto, a opção env_reset estiver desabilitada, quaisquer variáveis não explicitamente negado ....
Deixando JAVA_HOME
ao mesmo tempo
Uma opção, se você raramente executar mvn spring-boot:run
como root e preferir não alterar sua configuração, é simplesmente passar o valor de JAVA_HOME
manualmente:
sudo JAVA_HOME="$JAVA_HOME" mvn spring-boot:run
Quando você executa isso:
- O shell executa a expansão de parâmetros e quote remoção , substituindo
"$JAVA_HOME"
pelo valor (ou seja, conteúdo) deJAVA_HOME
. Se isso não contiver espaços em branco, as citações não são necessárias (sua finalidade aqui é impedir que a palavra divisão ). -
sudo
é chamado com três argumentos:JAVA_HOME=...
, em que...
é o valor deJAVA_HOME
quando você executou o comando;mvn
espring-boot:run
. -
sudo
reconhece a sintaxevariable=value
e sabe executarmvn
comJAVA_HOME
definido para o valor especificado. (spring-boot:run
é passado como o primeiro argumento de linha de comando paramvn
).
Para passar todas suas variáveis de ambiente, você pode executar sudo -E mvn spring-boot:run
, mas isso é potencialmente menos seguro e não ideal porque JAVA_HOME
é a única variável cujo valor você precisa preservar (além do punhado de variáveis cujos valores são preservados automaticamente mesmo com env_reset
).
Deixando JAVA_HOME
a cada vez
Embora você possa desabilitar env_reset
no seu arquivo sudoers
, isso passaria quase todas as variáveis de ambiente de um usuário a cada vez que sudo
fosse executado e, por esse motivo, não é recomendado.
Em vez disso, recomendamos que você edite seu arquivo sudoers
e adicione uma linha env_keep
apropriada após a linha env_reset
.
- Por favor, não edite
/etc/sudoers
diretamente. Em vez disso, você deve sempre usar o comandovisudo
para isso, que verifica para garantir que sua sintaxe está correta (evitando a criação de um arquivosudoers
inválido que travasudo
até ser corrigido ).
Executar:
sudo visudo
Isso usará seu editor de texto de linha de comando padrão. Se você quiser usar um editor diferente, poderá executar visudo
com ele atribuído à variável de ambiente VISUAL
. Por exemplo:
-
sudo VISUAL=nano visudo
-
sudo VISUAL=gedit visudo
( VISUAL
não é assim chamado após o "vis" em visudo
; em vez disso, é a variável de ambiente para especificar editores de texto padrão. Você também pode usar a variável EDITOR
, mas VISUAL
tem prioridade se definido.)
A execução de visudo
abre uma cópia temporária do seu arquivo sudoers
em um editor de texto; na saída, as alterações feitas nessa cópia são gravadas em /etc/sudoers
.
Encontre a linha que diz:
Defaults env_reset
Adicione uma linha logo abaixo, dizendo:
Defaults env_keep = "JAVA_HOME"
( Se você já tiver uma linha env_keep
, adicione JAVA_HOME
à lista de variáveis permitidas. Os nomes das variáveis são separados uns dos outros por espaços.)
Salve o arquivo e saia do editor de texto. Agora, quando os usuários executam comandos com sudo
, a variável de ambiente JAVA_HOME
será preservada.