web-dev-qa-db-ja.com

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

PDATE(コマンドとエラーおよびディレクトリを含む貼り付けを含む)

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
Cybex

デフォルトでは、Sudo構成は、Sudoの呼び出し方法に関係なくパスをリセットします。これを回避する2つの一般的な方法を次に示します。1つは永続的な変更、2つ目はSudoへのコマンドライン引数です(エイリアスとして追加できます)。

恒久的かつ地球規模の変化

/etc/sudoersでは、次の2つの設定を変更する必要があります。

Sudo visudo

Sudoersファイルには、デフォルトでDefault env_resetという設定があり、Sudoが-E(環境を維持)で呼び出された場合でも、Sudo呼び出し元シェルから環境設定をクリアします。

ファイルで、env_keepという設定を探します。これにより、Sudoで作成されたルート環境に渡すことができる環境変数が決まります。通常、デフォルトのsudoersファイルには一連のenv_keep = "xxx"およびenv_keep + = "xxx"ステートメントがあります。デフォルトでは、PATHはパススルーが許可されている環境変数の1つではありません。

これらのエントリの1つにPATHを追加するか、env_reset行をコメントアウトします。 env_keepエントリがない場合は、Defaults env_resetを探し、その後に新しいenv_keep = "PATH"エントリを追加します。

次に、PATH変数がSudo envに渡されることを許可した場合でも、パスはDefaults secure_path='...'の設定によってsudoersで制限されます。この設定をコメントアウトするか、スクリプトが含まれるパスをエントリに追加できます。

その後、SudoはPATH変数を維持し、スクリプトを実行します。

コマンドラインの回避策

Sudoersファイルの変更を回避するために、次の構文でSudoを呼び出すことができます。

Sudo env "PATH=$PATH" <script name>
3
Argonauts

Sudoは、デフォルトではパスを使用せず、rootのbashrcまたは同等のものを実行しません。詳細な説明については、 https://askubuntu.com/q/12841 を参照してください。

3
Gabe