一般的に
ユーザーがパスワードなしで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