Variável de ambiente não visível após 'sudo su'

0

Eu tenho uma configuração de variável de ambiente no usuário user_a 's .profile : export NODE_ENV=dev

Quando efetuo login como usuário e inicio um shell bash, se a variável de ambiente estiver configurada corretamente. Se eu fizer echo $NODE_ENV , receberei dev impresso conforme esperado.

Se eu fizer login como um usuário diferente user_b e, em seguida, tornar-se user_a por meio do comando sudo su user_a , a variável de ambiente não será definida.

Como posso garantir que a variável de ambiente NODE_ENV esteja definida?

    
por CadentOrange 01.05.2018 / 15:52

2 respostas

2

Ao emitir o comando su user , você alternará para o usuário sem carregar o perfil inteiro. Apenas as variáveis $HOME , $SHELL , $USER e $LOGNAME são carregadas. Para carregar todo o perfil do usuário ao alternar para ele, é necessário especificar que você está efetuando login no usuário usando o sinalizador --login , que tem um atalho como um único traço ( - ) após su, para que seu comando será parecido com su - user .

    
por 01.05.2018 / 16:57
2

Você precisará adicionar env_keep += "NODE_ENV" a um arquivo em /etc/sudoers.d/ . Eu recomendaria fazer isso da seguinte maneira:

  1. Execute sudo -i para ter um shell de root no caso de algo dar errado (eu estraguei tudo isso uma vez e foi muito chato consertar).
  2. Em um shell separado, faça sudo visudo -f /etc/sudoers.d/envkeep
  3. Nesse arquivo, adicione Defaults env_keep += "NODE_ENV"
  4. Depois de salvar, saia e tente sudo -i . Ele deve funcionar e colocá-lo em um shell no qual NODE_ENV deveria ter sido preservado.
por 01.05.2018 / 16:02