sudoersで引用符で囲まれたパラメータでコマンドを指定しますか?

sudoersで引用符で囲まれたパラメータでコマンドを指定しますか?

一般的に

ユーザーがパスワードなしでsudoコマンド(パラメータを含む)を実行するようにします。ディレクティブを機能させることができますが、NOPASSWDパラメーターに引用符がない場合にのみ可能です。

たとえば、次のように動作します。

# /etc/sudoers.d/sample
%sudo   ALL=(ALL)  NOPASSWD: /bin/echo foo

$ sudo echo foo
foo

しかし、引用は文字通り解釈されるので、そうではありません。

# /etc/sudoers.d/sample
%sudo   ALL=(ALL)  NOPASSWD: /bin/echo "foo"

$ sudo echo "foo"
[sudo] password for rlue:
$ sudo echo \"foo\"
"foo"

私の具体的なケース

これは私が許可したいコマンドです:

$ sudo sh -c 'echo XHCI > /proc/acpi/wakeup'

実際に引用されていない次のコマンドを使って作業しました。

%sudo   ALL=(ALL)  NOPASSWD: /bin/sh -c echo XHCI > /proc/acpi/wakeup

しかし、電話が来るのでsh -c明らかに何が起きているのかよくわかりませんが、私が許すものは何かをより明確に説明したいと思います。

sudoersファイルでコマンドパラメータへの参照をどのように指定しますか?

ベストアンサー1

編集:警告、sudoはコマンドのスペースを安全に処理できないようですので、この方法でsudoを使用することは安全ではありません。 https://unix.stackexchange.com/a/279142/39281

sudoersファイルで引用符を使用する代わりに、バックスラッシュを使用してスペースをエスケープできます。

%sudo   ALL=(ALL)  NOPASSWD: /bin/sh -c echo\ XHCI\ >\ /proc/acpi/wakeup

とにかく、ユーザーのシェルは引用符付き引数を処理するため、次のように使用できます。

sudo /bin/sh -c 'echo XHCI > /proc/acpi/wakeup'

コメントで提案されているように、複雑なコマンドをスクリプトに配置することも検討できます。 https://serverfault.com/a/516002

おすすめ記事