벽돌 벽을 여러 번 접한 후 나는 다음과 같은 사실을 발견했습니다.
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/steve/bin
$ sudo bash
# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
하지만
$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
$ sudo bash -Ec 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
나는에서 수집했다다른 게시물경로는 sudo
다음에서 읽혀집니다 /etc/sudoers
. 그런데 왜 그럴까요? 설정이 $PATH
의미가 있습니까 /root/.profile
, 아니면 이것이 위의 혼란의 원인입니까(예: 실제 쉘을 생성하면 $PATH
임시 명령 sudo
에 사용된 것과 다른 결과가 발생합니다...)?
RHEL 6.4에서 bash를 사용하고 있습니다.
답변1
보호
sudo
이러한 명령 중 몇 가지를 실행할 때 알 수 있는 보호 기능이 내장되어 있습니다. 이러한 보호는 보안 강화 등 다양한 작업을 수행할 수 있습니다 $PATH
.
/etc/sudoers
문서 에서 :
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
이는 명령을 실행할 때 표시되는 내용입니다 sudo -c ....
. -E
전환하여 이 동작을 비활성화 할 수 있습니다 sudo
.
노트:일부 설정의 경우 이 -E
스위치는 효과가 없습니다. 이를 "해결"하려면 을 사용할 수 있습니다 sudo env "PATH=$PATH" bash
. 그러면 $PATH
현재 전류가 sudo
환경으로 전송됩니다.
상호작용 및 로그인
이 명령을 실행하면:
$ sudo bash
bash
로그인 쉘과 대화형 쉘을 실행 중입니다 bash
. 이는 bash
구성 파일의 소스와 관련이 있습니다.
- 대화형, 일명
bash
또는bash -i
, 원천$HOME/.bashrc
- 로그인하세요.
bash -l
, 원천$HOME/.bash_profile
그렇다면 왜 작동하지 않습니까 -E
?
이 질문에 대한 TylerRick의 답변(sudo는 경로를 변경합니다 - 왜?)많은 이유가 다뤄집니다. 주로 sudo
Ubuntu의 경우처럼 컴파일 타임에 하드코딩되어 이러한 스위치를 쓸모 없게 만듭니다. Launchpad에는 오랫동안 해결되지 않은 미해결 문제가 있어 왔으며, 이로 인해 Canonical은 이 동작을 기본값으로 두는 것이 가장 좋다고 생각했다는 것을 깨닫게 되었습니다.
답변2
규칙이 sudoers
사용자에게 특정 명령을 실행할 수 있는 권한을 부여 하는 경우 wibble
일반적으로 보안 값을 설정해야 합니다 PATH
. 즉, 사용자가 자신의 프로그램을 심을 수 없는 디렉터리만 포함해야 합니다. wibble
외부 명령이 호출되고 foo
재설정 이 PATH
없으면 사용자는 ~/bin
명령 앞에 PATH
링크를 /bin/sh
놓은 ~/bin/foo
다음 sudo wibble
호출을 실행하여 ~/bin/foo
임의의 쉘 명령을 입력할 수 있습니다.
따라서 PATH를 재설정하는 것이 안전한 기본값입니다. 모든 경우에 이것이 필요한 것은 아니지만 기본값으로 설정하는 것이 더 쉽고 안전합니다.
규칙에 sudoers
따라 사용자에게 임의 명령을 실행할 수 있는 권한이 부여되는 경우 PATH를 재설정해도 직접적인 보안 이점은 없습니다. 또한 간접적인 이점도 있습니다. 즉, 사용자가 잠재적으로 원치 않는 프로그램이 포함된 PATH를 실수로 설정할 수 있으며 PATH를 재설정하면 이러한 프로그램이 실수로 호출되는 위험을 피할 수 있습니다. 기능적 이점도 있습니다. 루트로 명령을 실행하려면 일반적으로 /usr/local/sbin
, /usr/sbin
및 가 필요 /sbin
하지만 일반 사용자로는 필요하지 않습니다.
런타임 시 경로가 재설정되는 것을 원하지 않으면 다음 위치 sudo
에서 면역 그룹에 자신을 추가하세요 sudoers
.
Defaults exempt_group+=stevebennet
로그인 쉘( sudo -I
또는 sudo bash -l
다른 방법)을 실행하는 경우 쉘은 일반적으로 .profile
대상 사용자의 홈 디렉토리를 읽고 해당 파일이 PATH를 변경할 수 있습니다.
답변3
이는 보안상의 이유입니다. PATH는 원본 사용자가 가질 수 있는 해킹된 PATH가 아닌 명확하게 정의된 경로로 설정됩니다.
바라보다https://superuser.com/questions/98686/passing-path-through-sudo해결 방법으로.