이것은 PATH
sudo가없는 변수입니다.
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
이것은 PATH
sudo를 가진 변수입니다 :
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
내가 알 수있는 한, sudo
그대로 PATH
두어야합니다. 무슨 일이야? 이것을 어떻게 변경합니까? (이것은 우분투 8.04에 있습니다).
업데이트 : 내가 아는 한, 어떤 스크립트도 루트 변경 PATH
으로 시작되지 않았습니다.
보낸 사람 man sudo
:
명령 스푸핑을 방지하기 위해 sudo는 사용자의 PATH에서 명령을 검색 할 때“. ”및“ ”(현재 디렉토리를 나타냄)를 마지막으로 확인합니다 (하나 또는 둘 다가 PATH에있는 경우). 그러나 실제 PATH 환경 변수는 수정되지 않으며 sudo가 실행하는 프로그램으로 변경되지 않은 상태로 전달됩니다.
답변
이것은 성가신 기능 많은 배포판에서 sudo 의 기능 .
우분투 에서이 “문제”를 해결하려면 ~ / .bashrc에서 다음을 수행하십시오.
alias sudo='sudo env PATH=$PATH'
위의 $ PATH 자체를 재설정하지 않는 명령에서 작동합니다. 그러나`su ‘는 $ PATH를 재설정하므로 -p를 사용하지 말아야한다. IE :
sudo su -p
답변
다른 사람이 이것을 가로 질러 실행하고 모든 사용자에 대해 모든 경로 변수 변경을 비활성화하려는 경우.
다음 명령을 사용하여 sudoers 파일에 액세스하십시오 visudo
.. 어딘가에 다음 줄이 표시되어야합니다.
기본값 env_reset
다음 줄에 다음을 추가해야합니다.
기본값! secure_path
secure_path는 기본적으로 사용됩니다. 이 옵션은 sudoing 할 때 $ PATH를 만들 것을 지정합니다. 느낌표는 기능을 비활성화합니다.
답변
PATH
환경 변수이며 기본적으로 sudo에 의해 재설정됩니다.
이를 위해서는 특별한 권한이 필요합니다.
에서 man sudo
-E -E (환경 보존) 옵션은 env_reset를 대체합니다. sudoers (5)의 옵션). 일치하는 경우에만 사용할 수 있습니다. ing 명령에 SETENV 태그가 있거나 setenv 옵션이 sudo- ers (5).
명령에 설정할 환경 변수도 전달 될 수 있습니다VAR = value 형식의 명령 행 ( 예 : LD_LIBRARY_PATH = / usr / local / pkg / lib) 명령에 전달 된 변수 일반 환경 변수와 동일한 제한이 적용됩니다. 한 가지 중요한 예외가 있습니다. setenv 옵션이 설정된 경우 sudoers, 실행할 명령에 SETENV 태그가 설정되었거나 matched가 ALL이면 사용자는 과도하게 변수를 설정할 수 있습니다. 입찰했다. 자세한 내용은 sudoers (5)를 참조하십시오.
사용 예 :
cat >> test.sh
env | grep "MYEXAMPLE" ;
^D
sh test.sh
MYEXAMPLE=1 sh test.sh
# MYEXAMPLE=1
MYEXAMPLE=1 sudo sh test.sh
MYEXAMPLE=1 sudo MYEXAMPLE=2 sh test.sh
# MYEXAMPLE=2
최신 정보
남자 5 명 sudoers : env_reset 설정되면 sudo는 다음을 포함하도록 환경을 재설정합니다. LOGNAME, SHELL, USER, USERNAME 및 SUDO_ * 변수 능력. 발신자 환경의 모든 변수 env_keep과 일치하면 env_check 목록이 추가됩니다. env_keep 및 env_check의 기본 내용 루트로 sudo를 실행할 때 목록이 표시됩니다. -V 옵션. sudo가 SECURE_PATH로 컴파일 된 경우 옵션은 해당 값이 PATH 환경에 사용됩니다. 변하기 쉬운. 이 플래그는 기본적으로 켜져 있습니다.
따라서 이것이 컴파일되어 있는지 확인해야 할 수도 있습니다.
젠투 에서는 기본적으로
# ( From the build Script )
....
ROOTPATH=$(cleanpath /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin${ROOTPATH:+:${ROOTPATH}})
....
econf --with-secure-path="${ROOTPATH}"
답변
이 버그가 꽤 오랫동안 존재 한 것 같습니다! 다음은 도움이 될만한 버그 참조입니다 (구독, 투표, 힌트, 힌트 …).
데비안 버그 # 85123 ( “sudo : SECURE_PATH는 여전히 재정의 될 수 없습니다”) (2001 년부터)
이 버전의 sudo에는 여전히 Bug # 20996이있는 것 같습니다. 변경 로그에 따르면 런타임에 재정의 할 수 있지만 아직 방법을 찾지 못했습니다.
그들은 sudoers 파일에 다음과 같은 것을 넣는 것을 언급합니다.
Defaults secure_path="/bin:/usr/bin:/usr/local/bin"
그러나 적어도 우분투 8.10에서 그렇게하면이 오류가 발생합니다.
visudo: unknown defaults entry `secure_path' referenced near line 10
우분투 버그 # 50797 ( “with-secure-path로 빌드 된 sudo는 문제가 있습니다”)
설상가상으로 sudoers 파일에서 secure_path를 다시 지정할 수는 없습니다. 예를 들어, 사용자가 / opt 아래의 항목에 쉽게 액세스 할 수 있도록하려면 sudo를 다시 컴파일해야합니다.
예. 다시 컴파일 할 필요없이이 “기능”을 재정의하는 방법 이 필요 합니다. 환경에 가장 적합한 것이 무엇인지 알려주고이를 해제 할 수있는 방법을 제공하지 않는 것보다 보안 문제는 더 나쁘지 않습니다.
이것은 정말로 성가신 일입니다. 보안상의 이유로 기본적으로 현재 동작을 유지하는 것이 현명 할 수 있지만 소스 코드에서 다시 컴파일하는 것 이외의 방법으로 재정의하는 방법이 있어야합니다! 많은 사람들이 PATH 상속이 필요합니다. 왜 관리자가 조사하지 않는지 궁금합니다. 수용 가능한 해결책을 찾기가 쉽습니다.
나는 이것을 다음과 같이 해결했다.
mv /usr/bin/sudo /usr/bin/sudo.orig
그런 다음 다음을 포함하는 / usr / bin / sudo 파일을 작성하십시오.
#!/bin/bash /usr/bin/sudo.orig env PATH=$PATH "$@"
일반 sudo는 비보안 경로 sudo와 동일하게 작동합니다.
우분투 버그 # 192651 ( “스도 경로는 항상 재설정됩니다”)
이 버그의 복제본이 원래 2006 년 7 월에 제출되었다는 점을 고려할 때, 효과가없는 env_keep이 얼마나 오래 작동했는지는 확실하지 않습니다. 사용자가 위에 나열된 것과 같은 트릭을 사용하도록 강요하더라도 sudo 및 sudoers의 매뉴얼 페이지에는 PATH 수정 옵션이 사실상 중복된다는 사실이 반영되어야합니다.
실제 실행을 반영하도록 문서를 수정하는 것은 불안정하지 않으며 매우 유용합니다.
우분투 버그 # 226595 ( “경로 유지 / 지정 불가능”)
PATH에 추가 비표준 바이너리 폴더로 sudo를 실행할 수 있어야합니다. / etc / environment에 이미 요구 사항을 추가 한 후 sudo에서 명령을 실행할 때 누락 된 명령에 대한 오류가 발생했을 때 놀랐습니다 …..
나는 이것을 성공적으로 해결하기 위해 다음을 시도했다.
”
sudo -E
“옵션을 사용하면 작동하지 않습니다. 기존 경로는 여전히 sudo에 의해 재설정되었습니다./ etc / sudoers에서 ”
Defaults env_reset
“를 ”Defaults !env_reset
“로 변경해 도 작동하지 않습니다 (sudo -E와 결합 된 경우에도)/ etc / sudoers에서 주석 해제
env_reset
(예 : ”#Defaults env_reset
“)도 작동하지 않았습니다.
Defaults env_keep += "PATH"
/ etc / sudoers에 ‘ ‘를 추가 해도 작동하지 않았습니다.man 문서에도 불구하고 sudo는 PATH와 관련하여 완전히 하드 코딩되어 있으며 사용자 PATH 유지와 관련된 유연성을 허용하지 않습니다. sudo를 사용하여 루트 권한으로 기본 소프트웨어가 아닌 소프트웨어를 실행할 수 없으므로 매우 짜증납니다.
답변
이것은 나를 위해 일하는 것 같았다
sudo -i
비 스도에 걸리는 PATH
답변
실제로 sudo가 PATH를 재설정하는 것이 바람직하다고 생각합니다. 그렇지 않으면 사용자 계정을 손상시킨 공격자가 백도어 버전의 모든 도구를 사용자의 PATH에 넣을 수 있으며 sudo를 사용할 때 실행됩니다.
(물론 PATH를 재설정하는 것은 이러한 종류의 문제에 대한 완벽한 해결책은 아니지만 도움이됩니다)
이것은 실제로 사용하면 어떻게됩니까
Defaults env_reset
에서의 / etc /의 sudoers 사용하지 않고 exempt_group
나 env_keep
.
또한 루트에만 유용한 디렉토리 (예 : /sbin
및 /usr/sbin
)를 사용자 경로에 추가하지 않고 sudo 경로에 추가 할 수 있기 때문에 편리 합니다. sudo가 사용할 경로를 지정하려면 다음을 수행하십시오.
Defaults secure_path="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin"
답변
업장 저장소에서 sudo를 사용하여 작동합니다. 내 구성의 세부 사항 :
root@sphinx:~# cat /etc/sudoers | grep -v -e '^$' -e '^#'
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/grub-1.96/sbin:/opt/grub-1.96/bin"
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
root@sphinx:~# cat /etc/apt/sources.list
deb http://au.archive.ubuntu.com/ubuntu/ jaunty main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ jaunty main restricted universe
deb http://au.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu jaunty-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu jaunty-security main restricted universe
deb http://au.archive.ubuntu.com/ubuntu/ karmic main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ karmic main restricted universe
deb http://au.archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe
deb http://security.ubuntu.com/ubuntu karmic-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu karmic-security main restricted universe
root@sphinx:~#
root@sphinx:~# cat /etc/apt/preferences
Package: sudo
Pin: release a=karmic-security
Pin-Priority: 990
Package: sudo
Pin: release a=karmic-updates
Pin-Priority: 960
Package: sudo
Pin: release a=karmic
Pin-Priority: 930
Package: *
Pin: release a=jaunty-security
Pin-Priority: 900
Package: *
Pin: release a=jaunty-updates
Pin-Priority: 700
Package: *
Pin: release a=jaunty
Pin-Priority: 500
Package: *
Pin: release a=karmic-security
Pin-Priority: 450
Package: *
Pin: release a=karmic-updates
Pin-Priority: 250
Package: *
Pin: release a=karmic
Pin-Priority: 50
root@sphinx:~# apt-cache policy sudo
sudo:
Installed: 1.7.0-1ubuntu2
Candidate: 1.7.0-1ubuntu2
Package pin: 1.7.0-1ubuntu2
Version table:
*** 1.7.0-1ubuntu2 930
50 http://au.archive.ubuntu.com karmic/main Packages
100 /var/lib/dpkg/status
1.6.9p17-1ubuntu3 930
500 http://au.archive.ubuntu.com jaunty/main Packages
root@sphinx:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/grub-1.96/sbin:/opt/grub-1.96/bin
root@sphinx:~# exit
exit
abolte@sphinx:~$ echo $PATH
/home/abolte/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/grub-1.96/sbin:/opt/grub-1.96/bin:/opt/chromium-17593:/opt/grub-1.96/sbin:/opt/grub-1.96/bin:/opt/xpra-0.0.6/bin
abolte@sphinx:~$
해킹을 사용하지 않고 마침내이 문제를 해결하는 것이 좋습니다.