
문제:
sudo가 반환될 때 스크립트 실행
sudo: mount-remove-hiberfile: command not found
정보:
스크립트 폴더: '/scripts'(모든 사용자 정의 스크립트는 여기에 보관됩니다)
내 사용자: 'cybex'
cybex@cybex-W55xEU:~$ echo $PATH //및 'sudo echo $PATH'는 동일한 경로를 반환합니다.
/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/bin:/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts:/snap/bin
root@cybex-W55xEU:/home/cybex# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts
'mount-remove-hiberfile' 스크립트는 일반 사용자로 실행할 수 없으므로 sudo mount-remove-hiberfile
.
sudo가 이 스크립트를 감지하지 못하는 이유는 무엇입니까?
참고: 이에 관한 몇 가지 질문을 찾았지만 내 질문에 대한 답변은 없습니다.
업데이트
ls -l /scripts/
total 20
-rwxr-xr-x 1 root root 95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 40 Apr 26 22:45 apt-update
-rwxr-xr-x 1 root root 769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root 370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
업데이트(명령과 오류 및 디렉터리를 포함하는 붙여넣기 포함)
cybex@cybex-W55xEU:~$ pwd
/home/cybex
cybex@cybex-W55xEU:~$ ls -l /scripts/
total 52
-rwxr-xr-x 1 root root 95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 2283 May 21 16:59 backup
-rwxr-xr-x 1 root root 109 May 21 16:59 check-port
-rwxr-xr-x 1 root root 2185 May 21 16:59 connected
-rwxr-xr-x 1 root root 769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root 164 May 21 16:59 download
-rwxr-xr-x 1 root root 370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 5142 May 21 16:59 firewall
-rwxr-xr-x 1 root root 3881 May 21 16:59 firewall.save
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
-rwxr-xr-x 1 root root 80 May 21 16:59 portquiz
-rwxr-xr-x 1 root root 84 May 21 16:59 space-used
drwxr-xr-x 1 root root 0 May 21 17:00 tmp
cybex@cybex-W55xEU:~$ sudo mount-remove-hiberfile
sudo: mount-remove-hiberfile: command not found
답변1
sudo 구성은 기본적으로 sudo 호출 방법에 관계없이 경로를 재설정합니다. 이 문제를 해결하는 두 가지 일반적인 방법은 다음과 같습니다. 첫 번째는 영구적인 변경이고, 두 번째는 sudo에 대한 명령줄 인수(별칭으로 추가할 수 있음)입니다.
영구적이고 전역적인 변화
다음 /etc/sudoers
두 가지 설정을 수정해야 합니다.
sudo visudo
Default env_reset
sudoers 파일에는 기본적으로 sudo가 -E(환경 유지)로 호출되더라도 sudo 호출자 셸에서 환경 설정을 지우는 설정이 있습니다 .
파일에서 이라는 설정을 찾으세요 env_keep
. 이는 sudo로 생성된 루트 환경에 전달될 수 있는 환경 변수를 결정합니다. 일반적으로 기본 sudoers 파일에는 일련의 env_keep="xxx" 및 env_keep+="xxx" 문이 있습니다. 기본적으로 PATH는 통과할 수 있는 환경 변수 중 하나가 아닙니다.
이러한 항목 중 하나에 PATH를 추가하거나 env_reset 행을 주석 처리하세요. env_keep 항목이 없으면 그 뒤에 Defaults env_reset
새 env_keep = "PATH"
항목을 찾아서 추가하십시오.
둘째, PATH 변수가 sudo env에 전달되도록 허용하더라도 설정에 따라 sudoers에서 경로가 제한됩니다. Defaults secure_path='...'
이 설정을 주석 처리하거나 스크립트가 있는 경로를 항목에 추가할 수 있습니다.
그 후 sudo는 PATH 변수를 유지하고 스크립트를 실행합니다.
명령줄 해결 방법
sudoers 파일 수정을 방지하려면 다음 구문을 사용하여 sudo를 호출할 수 있습니다.
sudo env "PATH=$PATH" <script name>
답변2
sudo는 기본적으로 경로를 사용하지 않으며 루트의 bashrc 또는 이에 상응하는 것을 실행하지 않습니다. 보다https://askubuntu.com/q/128413전체 설명을 보려면