내 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
입니까?
답변
살펴보십시오 /etc/sudoers
. Fedora의 기본 파일 (RHEL 및 Ubuntu 및 이와 유사한 파일)에는 다음 줄이 포함됩니다.
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
sudo에서 바이너리를 실행할 때 경로가 깨끗하게 유지됩니다. 이것은 이 질문에 언급 된 일부 우려 사항을 방지하는 데 도움이됩니다 . 당신이없는 경우에도 편리 /sbin
하고 /usr/sbin
자신의 경로에.
답변
이 명령 su -
은 루트 사용자 프로필을 실행하고 경로 등을 포함하여 해당 사용자 환경을 sudo
수행하지 않습니다.
다음 과 같이 sudo
동작 하려면 사용자 프로필을 실행하는 su -
옵션을 사용하십시오.sudo -i [command
다음 과 같이 su -
동작 sudo
하려면 하이픈을 사용하지 마십시오.su [command]
답변
을 실행하여 이유 가 다른지 확인할 수 있습니다 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에서 실행되는 모든 명령에 사용되는 경로. 제정신PATH
환경 변수 를 가지고 sudo를 실행하는 사람들을 신뢰하지 않는다면 이것을 사용하고 싶을 것입니다.또 다른 용도는“루트 경로”를“사용자 경로”와 분리하려는 경우입니다.
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"
답변
대부분의 Linux에서는 패키지 관리를 통해 프로그램을 설치하고 정기적으로 업데이트를받습니다. 패키지 관리를 우회하는 것을 설치하면 / usr / local / bin (예 : 또는 … / sbin 또는 / opt)에 설치되고 정기적으로 업데이트되지 않습니다.
따라서 프로그램은 안전한 것으로 간주되지 않으며 기본적으로 루트 PATH에 넣지 않습니다.
답변
방금 직접 시도했지만 보았던 동작을 보지 못했습니다. 경로가 동일하게 유지되므로 sudo 구성이 다를 수 있습니다. 확인 man sudoers
하면 secure_path
재설정 이라는 PATH
옵션이 있습니다.이 옵션이 활성화 된 것 같습니다.
답변
당신이 사용하는 경우 때문에 sudo bash
, bash
로그인 쉘의 역할을하지 않습니다. 로 다시 시도하면와 sudo bash -l
같은 결과가 나타납니다 su -
.
그게 맞다면, 다음의 차이 PATH
구성 파일의 거짓말은 : /etc/profile
, ~/.bash_profile
, ~/.bash_login
, ~/.profile
동안, 로그인 쉘 (순서대로) 실행되는 ~/.bashrc
비 로그인 대화 형 쉘 실행됩니다.
답변
오래된 질문은 알고 있지만,이 정확한 문제를 조사하고 있었기 때문에 지금 여기에서 우연히 발견되었습니다.
어떤 /usr/local/bin
이유로을 통해 루트가 될 때 PATH에만있었습니다 sudo su -
. sudo -i
그것을 사용할 때 거기에 없었습니다. 물론 나는 그것을 / etc / sudoers에 추가 할 수 있다는 것을 알고 있지만 여전히 왜 이후에 있는지 설명하지 못했습니다 su -
. PATH의이 부분은 어디에서 왔습니까?
많은 grepping과 search 후 답을 찾았습니다.
‘/ usr / local / bin’을 포함하는 기본 경로는 실제로 su (1)에 하드 코딩됩니다.
따라서 pam 구성, 프로필, bashrc 또는이 요소를 선택적으로 추가하는 것은 없습니다. su
인수 할 때는 항상 이미있었습니다 . 그리고 sudo
전혀 호출하지 않고 su
자체 구성을 사용하므로 이후에 누락되었습니다.sudo -i
RHEL6 및 RHEL7에서 이것이 사실임을 알았습니다. 다른 버전이나 배포판을 확인하지 않았습니다.