Sudo um comando altera temporariamente o $ PATH para ser o root?

6
  1. Ao executar sudo <command> em uma sessão de login do usuário, será que altere $PATH para ser a $PATH da raiz durante a execução de sudo <command> ?
  2. Se <command> depende do usuário $PATH , não da $PATH da raiz, como o usuário pode executar sudo <command> com sucesso?

por Tim 21.08.2014 / 08:23

3 respostas

6

Isso é realmente dependente da configuração . Há uma opção env_reset em sudoers que, combinada com env_check e env_delete , controla se é necessário substituir, estender ou passar por algumas ou todas as variáveis de ambiente, incluindo PATH .

O comportamento padrão é ter env_reset ativado e redefinir PATH . O valor PATH está definido para poder ser controlado com a opção secure_path e, caso contrário, é determinado pela configuração do usuário.

Você pode desabilitar env_reset ou adicionar PATH a env_keep para alterar esse comportamento, mas observe que pode não ter o efeito desejado em geral - geralmente há diretórios ( sbin ) em PATH da raiz que não estão no seu usuário. Você pode ativar setenv para permitir a substituição do ambiente para uma única execução de sudo usando a opção -E para sudo .

Tudo isso pode ser alterado na configuração padrão da sua distribuição. Execute sudo visudo para ver o que está no seu arquivo sudoers .

Existem abordagens alternativas. Uma delas é usar a configuração de variável de ambiente incorporada de sudo ou env :

sudo PATH="$PATH" command ...
sudo env PATH="$PATH" command ...

executará apenas este comando com o PATH do seu usuário atual. Você pode definir outras variáveis também da mesma maneira, o que geralmente é útil. Um ou outro desses pode não ser permitido pela sua configuração.

    
por 21.08.2014 / 08:47
9

When running sudo under a user login session, will that change $PATH to be the root's $PATH during the running of sudo ?

sudo mudará a variável $PATH , dependendo da sua política de segurança. De sudo página de manual :

PATH
    May be overridden by the security policy.

Na maioria dos sistemas, a opção env_reset é ativada por padrão. Isso faz com que os comandos sejam executados com um ambiente mínimo contendo TERM , PATH , HOME , SHELL , LOGNAME , USER e USERNAME além das variáveis do processo de chamada permitido pelas opções env_check e env_keep sudoers.

Por motivo de segurança, a opção /etc/sudoers tem secure_path para definir o cofre PATH para sudo :

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

If relies on the user's $PATH, not the root's $PATH, how can the user run sudo successfully?

Como o PATH do usuário pode ser preservado quando você executa sudo . Você sempre pode fazer:

sudo env "PATH=$PATH" <command>
    
por 21.08.2014 / 08:45
5

Você precisa obter um shell raiz de login interativo?

sudo -H -i

de man sudo :

 -H          The -H (HOME) option requests that the security policy set the HOME environment variable to the home directory of the
             target user (root by default) as specified by the password database.  Depending on the policy, this may be the default
             behavior.


 -i [command]
             The -i (simulate initial login) option runs the shell specified by the password database 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 via the shell's -c option.  If no command is specified,
             an interactive shell is executed.  sudo attempts to change to that user's home directory before running the shell.  The
             security policy shall initialize the environment to a minimal set of variables, similar to what is present when a user
             logs in.  The Command Environment section in the sudoers(5) manual documents how the -i option affects the environment
             in which a command is run when the sudoers policy is in use.
    
por 21.08.2014 / 08:31

Tags