Como posso ter certeza de que uma variável de ambiente está configurada quando eu sudo?

2

Como posso ter certeza de que uma variável de ambiente ( GRAILS_HOME , por exemplo) está definida quando eu sudo ?

Eu coloquei um script no meu /etc/profile.d com esse valor e o fiz ugo+x . O que preciso fazer para tornar isso visível para o superusuário?

    
por C. Ross 01.02.2011 / 18:03

2 respostas

2

Tente com

sudo su -

O - carrega todos os arquivos do ambiente. De man su :

-, -l, --login
   Provide an environment similar to what the user would expect had
   the user logged in directly.

   When - is used, it must be specified as the last su option. The
   other forms (-l and --login) do not have this restriction.

Atualizar : No caso geral, você executa sudo -i mycomment , como a página do manual de sudo diz,

-i [command]
           The -i (simulate initial login) option runs the shell
           specified in the passwd(5) entry of the target user as a
           login shell.  This means that login-specific resource files
           such as .profile or .login will be read by the shell.  If a
           command is specified, it is passed to the shell for
           execution.  Otherwise, an interactive shell is executed.
           sudo attempts to change to that user's home directory
           before running the shell.  It also initializes the
           environment, leaving DISPLAY and TERM unchanged, setting
           HOME, SHELL, USER, LOGNAME, and PATH, as well as the
           contents of /etc/environment on Linux and AIX systems.  All
           other environment variables are removed.
    
por user4124 01.02.2011 / 18:21
1

Por esta resposta: Definição o PATH então se aplica a todos os usuários, incluindo root / sudo se você notar que o Sudo redefine todas as variáveis e o caminho por padrão.

Bit pertinente:

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.

Então, você pode fazer o seguinte para manter as variáveis ao usar o sudo

sudo visudo

isto irá abrir as configurações do sudo para você. Então, por que eu adicionei o seguinte abaixo

Defaults secure_path="blah"

Defaults env_keep +="VARIABLE VARIABLE VARIABLE"

(EXCLUINDO PATH como é definido por secure_path) e esses são apenas espaços únicos entre cada variável se você deseja ter mais de 1 mantido.

e o que isto faz é dizer ao sudo quais variáveis env devem manter e não desconsiderar.

Quando terminar, segure ctrl e aperte o para Write Out, digite e diga sim para salvar [mesmo que especifique um arquivo tmp OK, ele será escrito de volta na configuração principal apenas diga sim quando perguntado se você deseja sobrescrever ].

Isso deve permitir que você mantenha as variáveis que desejar (uma grande delas é JAVA_HOME e também http_proxy se você usar um proxy).

Por isso, deve ser algo como abaixo, incluindo sua variável especificada:

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin"
Defaults        env_keep +="GRAILS_HOME"

e para verificar se é necessário sair de todas as janelas de terminal abertas e reabrir uma e executar

echo $GRAILS_HOME 

Deve ser o que você definir, agora emitir

sudo echo $GRAILS_HOME

e agora deve permanecer inalterado

    
por Pariah 07.11.2014 / 12:49