sudoers 条件付き/コンボコマンドは可能ですか?

sudoers 条件付き/コンボコマンドは可能ですか?

次のように sudo を許可します:

myuser ALL=NOPASSWD:/usr/bin/pkill -fx "/usr/sbin/nethogs -v 3 -s" || /usr/sbin/nethogs -v 3 -s

そのため、nethogs の実行インスタンスは 1 つだけになります。

visudo はそれを受け入れますが、パスワードなしでこれらのコマンドを実行することはできません...

失敗した試み:

sudo '/usr/bin/pkill -fx "/usr/sbin/nethogs -v 3 -s" || /usr/sbin/nethogs -v 3 -s'
sudo /usr/bin/pkill -fx "/usr/sbin/nethogs -v 3 -s" || sudo /usr/sbin/nethogs -v 3 -s

追記: このバージョンの nethogs は sf.net の cvs からコンパイルされています。

答え1

ファイル内ではプログラムまたはスクリプトの名前またはパス (およびオプションでそれらの引数) のみを使用できますsudoers。次のようなシェル構文は||機能しません。
引用man sudoers:

command name ::= file name |
                 file name args |
                 file name '""'

この問題を回避する最も簡単な方法は、一連のコマンドを実行するスクリプトを作成し、それを root のみが書き込み可能にして、 経由で実行するための権限を付与することですsudo


のマニュアルページにはサブシェルでコマンドを実行する例が実際に示されていますが、設定sudoでそれを許可する方法が見つかりませんでした(また、sudoerssudo-users メーリングリスト)

関連情報