sudo로 실행되는 사용자 정의 스크립트 - 명령을 찾을 수 없음

sudo로 실행되는 사용자 정의 스크립트 - 명령을 찾을 수 없음

문제:

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_resetsudoers 파일에는 기본적으로 sudo가 -E(환경 유지)로 호출되더라도 sudo 호출자 셸에서 환경 설정을 지우는 설정이 있습니다 .

파일에서 이라는 설정을 찾으세요 env_keep. 이는 sudo로 생성된 루트 환경에 전달될 수 있는 환경 변수를 결정합니다. 일반적으로 기본 sudoers 파일에는 일련의 env_keep="xxx" 및 env_keep+="xxx" 문이 있습니다. 기본적으로 PATH는 통과할 수 있는 환경 변수 중 하나가 아닙니다.

이러한 항목 중 하나에 PATH를 추가하거나 env_reset 행을 주석 처리하세요. env_keep 항목이 없으면 그 뒤에 Defaults env_resetenv_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전체 설명을 보려면

관련 정보