내 Fedora VM에서 내 사용자 계정으로 실행할 때 내 /usr/local/bin
경로에는 다음이 있습니다.
[justin@justin-fedora12 ~]$ env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
런타임에도 마찬가지입니다 su
.
[justin@justin-fedora12 ~]$ su -
Password:
[root@justin-fedora12 justin]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
그러나 를 통해 실행할 때 sudo
디렉터리는 다음 경로에 없습니다.
[root@justin-fedora12 justin]# exit
[justin@justin-fedora12 ~]$ sudo bash
[root@justin-fedora12 ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin
를 통해 실행할 때 경로가 다른 이유는 무엇입니까 sudo
?
답변1
보세요 /etc/sudoers
. Fedora(및 RHEL, Ubuntu 등)의 기본 파일에는 다음 줄이 포함되어 있습니다.
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
이렇게 하면 sudo에서 바이너리를 실행할 때 경로가 깔끔하게 유지됩니다. 이는 일부 문제를 피하는 데 도움이 됩니다.이 질문에 언급된. 이는 하나도 없고 자신만의 방식으로 수행하는 경우 /sbin
에도 /usr/sbin
유용합니다.
답변2
이 명령은 su -
루트 사용자 프로필을 실행하고 사용자의 환경(경로 등 포함)을 가정하지만 sudo
작업을 수행하지는 않습니다.
이렇게 하려면 사용자 프로필을 실행하는 옵션을 sudo
사용하세요.su -
sudo -i [command
su -
이렇게 하려면 하이픈 sudo
을 사용하지 말고 하이픈을 사용하세요.su [command]
답변3
당신은 확인할 수 있습니다왜(이것은 다릅니다) sudo sudo -V
.
예를 들어 Linux에서 실행하는 경우:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
참고: macOS/BSD에서는 다음을 실행하세요 sudo sudo -V
.
위 목록은 일부 Linux 배포판의 기본 보안 정책 플러그인으로 인해 제한됩니다.
이에 대해서는 아래에서 자세히 설명합니다 man sudoers
.
이 옵션을 설정 하면 해당 값이 환경 변수
secure_path
에 사용됩니다 .PATH
secure_path
- sudo에서 실행되는 각 명령에 사용되는 경로입니다. sudo를 실행하는 사람이 정상적인 환경 변수를 가지고 있다는 것을 신뢰하지 않는 경우 이 방법을 사용할 수 있습니다PATH
.또 다른 용도는 "사용자 경로"에서 "루트 경로"를 분리하려는 경우입니다. 이 옵션으로 지정된 그룹의 사용자
exempt_group
는 영향을 받지 않습니다secure_path
. 이 옵션은 기본적으로 설정되어 있지 않습니다.
이 경우 sudo visudo
구성 파일을 실행 및 편집하고 수정 secure_path
(으로 구분된 추가 경로 추가 :
)하거나 사용자를 추가하여 ( 옵션의 exempt_group
영향을 받지 않음 ) 이를 변경할 수 있습니다.secure_path
또는 사용자에게 PATH
임시 값을 전달하려면 다음을 실행할 수 있습니다.
sudo env PATH="$PATH" my_command
다음을 통해 확인할 수 있습니다:
sudo env PATH="$PATH" env | grep ^PATH
또한보십시오:sudo
저장 하는 방법은 무엇입니까 $PATH
?
환경이 다를 수 있는 또 다른 이유 는 파일 에서 옵션을 활성화 sudo
할 수 있다는 것입니다 . 이로 인해 명령이 새로운 최소 환경에서 실행됩니다.env_reset
sudoers
env_keep
따라서 옵션을 사용할 수 있습니다 (권장되지 않음).보안상의 이유) 사용자의 환경 변수를 보존하려면 다음을 수행합니다.
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"
답변4
대부분의 Linux에서는 패키지 관리를 통해 프로그램을 설치하고 정기적으로 업데이트를 받습니다. 패키지 관리를 우회하는 항목을 설치하면 /usr/local/bin(예: 또는.../sbin 또는 /opt)에 설치되며 정기적인 업데이트를 받지 못합니다.
따라서 이러한 프로그램은 안전하지 않은 것으로 간주되며 기본적으로 루트 경로에 배치되지 않습니다.