sudo 명령이 일시적으로 $PATH를 루트 경로로 변경합니까?

sudo 명령이 일시적으로 $PATH를 루트 경로로 변경합니까?
  1. 사용자 로그인 세션에서 실행할 때 실행 중에 루트로 sudo <command>변경됩니까 ?$PATH$PATHsudo <command>
  2. 루트 대신 <command>사용자에 의존하는 경우 사용자는 어떻게 이를 성공적으로 실행할 수 있습니까?$PATH$PATHsudo <command>

답변1

사용자 로그인 세션에서 sudo를 실행할 때 sudo 실행 중에 $PATH가 루트의 $PATH로 변경됩니까?

sudo$PATH보안 정책에 따라 변수가 변경됩니다 . ~에서sudo 매뉴얼 페이지:

PATH
    May be overridden by the security policy.

대부분의 시스템에서 이 옵션은 기본적으로 활성화되어 있으며, 이로 인해 env_resetsudoers 옵션에서 허용하는 호출 프로세스의 변수가 포함된 최소 환경에서 명령이 실행됩니다.TERMPATHHOMESHELLLOGNAMEUSERUSERNAMEenv_checkenv_keep

보안상의 이유로 선택적으로 금고를 다음과 같이 설정할 /etc/sudoers수 있습니다 .secure_pathPATHsudo

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

루트의 $PATH가 아닌 사용자의 $PATH에 의존하는 경우 사용자가 어떻게 sudo를 성공적으로 실행할 수 있습니까?

PATH을 실행할 때 사용자의 정보를 유지할 수 있기 때문입니다 sudo. 언제든지 다음과 같이 할 수 있습니다.

sudo env "PATH=$PATH" <command>

답변2

이것은 실제로구성에 따라 다름. 을 포함한 일부 또는 전체 환경 변수를 제어하는 ​​및 와 함께 사용되는 env_reset옵션이 있습니다 .sudoersenv_checkenv_deletePATH

기본 동작은 활성화 env_reset하고 재설정하는 것입니다 PATH. 이 값은 PATH옵션을 통해 제어 가능하도록 설정되며 secure_path, 그렇지 않은 경우 사용자 구성에 따라 결정됩니다.

해당 동작을 비활성화 env_reset하거나 추가하여 PATH변경할 수 있지만 env_keep원하는 전체적인 효과가 없을 수도 있다는 점에 유의하십시오. 일반적으로 루트( )에는 사용자 디렉터리에 없는 sbin일부 디렉터리가 있습니다 . 다음을 사용하여 단일 실행에 대한 환경 재정의를 허용하도록 PATH활성화할 수 있습니다.setenvsudo-E옵션sudo.

이 모든 것은 배포판의 기본 구성에서 변경할 수 있습니다. 파일의 현재 내용을 sudo visudo보려면 실행하세요 .sudoers


다른 방법도 있습니다. 간단한 방법은 sudo내장된 환경 변수 설정을 사용하거나env:

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

둘 다 현재 사용자의 PATH. 귀하의 구성에서는 이들 중 하나 이상을 허용하지 않을 수 있습니다.

답변3

대화형 로그인 루트 쉘이 필요합니까?

sudo -H -i

에서 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.

관련 정보