--preserve-env 또는 -E 플래그를 알고 있지만 sudo
이 플래그로 인해 sudo가 Fedora에서 이상하게 동작하는 것 같습니다.
설치했는데 루트가 아닌 사용자로 입력하면 다음과 같은 내용이 표시 ranger
됩니다 LinuxBrew
.which ranger
$ which ranger
/home/linuxbrew/.linuxbrew/bin/ranger
내가 sudo하면,
$ sudo -E which ranger
which: no ranger in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)
$ sudo -E echo $PATH
/usr/lib64/qt-3.3/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/david/bin:/home/david/.gem/ruby/2.6.0:/home/david/prog/flutter/bin:/home/david/go/bin:/home/linuxbrew/.linuxbrew/bin:/home/david/.local/bin:/snap/bin:/var/lib/snapd/snap/bin:/home/david/.gem/ruby/2.6.0:/home/david/go/bin:/home/linuxbrew/.linuxbrew/bin:/home/david/.local/bin:/snap/bin:/home/david/prog/flutter/bin
$ sudo -E ranger
sudo: ranger: command not found
하지만 상황은 더욱 이상해집니다.
sudo --preserve-env=PATH which ranger
/home/linuxbrew/.linuxbrew/bin/ranger
$ sudo --preserve-env=PATH ranger
sudo: ranger: command not found
여기서 정확히 무슨 일이 일어나고 있는지 설명할 수 있는 사람이 있나요?
어떤 도움이라도 대단히 감사하겠습니다!
답변1
이것은 sudo의 보안 기능입니다. 파일에는 /etc/sudoers
다음과 같은 줄이 있어야 합니다.
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
이 옵션의 의미는 secure_path
매뉴얼 페이지에 나와 있습니다 sudoers
:
안전한 경로:sudo에서 실행되는 각 명령에 사용되는 경로입니다. sudo를 실행하는 사람이 일반 PATH 환경 변수를 가지고 있다는 것을 신뢰하지 않는 경우 이 방법을 사용할 수 있습니다. 또 다른 용도는 "사용자 경로"에서 "루트 경로"를 분리하려는 경우입니다. Except_group 옵션으로 지정된 그룹의 사용자는 secure_path의 영향을 받지 않습니다. 이 옵션은 기본적으로 설정되어 있지 않습니다.
이 동작을 방지하려면 여기에서 사용자에 대한 옵션을 정의할 수 있습니다 exempt_group
. /etc/sudoers
예를 들어:
Defaults exempt_group+=jo
일부 이전 RHEL 배포판에서는 이를 위해 시스템 그룹을 생성해야 합니다. 참조https://access.redhat.com/solutions/150783