- 사용자 로그인 세션에서 실행할 때 실행 중에 루트로
sudo <command>
변경됩니까 ?$PATH
$PATH
sudo <command>
루트 대신
<command>
사용자에 의존하는 경우 사용자는 어떻게 이를 성공적으로 실행할 수 있습니까?$PATH
$PATH
sudo <command>
한 가지 방법은
sudo su
루트가 되어 루트를$PATH
사용자의 루트로 변경하고<command>
직접 실행하는 것입니다. 이것이 내가 문제를 해결한 방법이다 gem을 설치하기 위해 더 높은 Ruby 버전을 지정하는 방법은 무엇입니까?.더 쉬운 방법이 있나요?
- 사용자에서 루트로 전환하지 않고도 수행할 수 있습니까?
답변1
사용자 로그인 세션에서 sudo를 실행할 때 sudo 실행 중에 $PATH가 루트의 $PATH로 변경됩니까?
sudo
$PATH
보안 정책에 따라 변수가 변경됩니다 . ~에서sudo
매뉴얼 페이지:
PATH
May be overridden by the security policy.
대부분의 시스템에서 이 옵션은 기본적으로 활성화되어 있으며, 이로 인해 env_reset
sudoers 옵션에서 허용하는 호출 프로세스의 변수가 포함된 최소 환경에서 명령이 실행됩니다.TERM
PATH
HOME
SHELL
LOGNAME
USER
USERNAME
env_check
env_keep
보안상의 이유로 선택적으로 금고를 다음과 같이 설정할 /etc/sudoers
수 있습니다 .secure_path
PATH
sudo
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
루트의 $PATH가 아닌 사용자의 $PATH에 의존하는 경우 사용자가 어떻게 sudo를 성공적으로 실행할 수 있습니까?
PATH
을 실행할 때 사용자의 정보를 유지할 수 있기 때문입니다 sudo
. 언제든지 다음과 같이 할 수 있습니다.
sudo env "PATH=$PATH" <command>
답변2
이것은 실제로구성에 따라 다름. 을 포함한 일부 또는 전체 환경 변수를 제어하는 및 와 함께 사용되는 env_reset
옵션이 있습니다 .sudoers
env_check
env_delete
PATH
기본 동작은 활성화 env_reset
하고 재설정하는 것입니다 PATH
. 이 값은 PATH
옵션을 통해 제어 가능하도록 설정되며 secure_path
, 그렇지 않은 경우 사용자 구성에 따라 결정됩니다.
해당 동작을 비활성화 env_reset
하거나 추가하여 PATH
변경할 수 있지만 env_keep
원하는 전체적인 효과가 없을 수도 있다는 점에 유의하십시오. 일반적으로 루트( )에는 사용자 디렉터리에 없는 sbin
일부 디렉터리가 있습니다 . 다음을 사용하여 단일 실행에 대한 환경 재정의를 허용하도록 PATH
활성화할 수 있습니다.setenv
sudo
-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.