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

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

私はこのようにsudoを許可したい:

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

そのため、実行中のnethogsインスタンスのみを取得します。

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

PS:このバージョンのnethogsはsf.netのcvsに基づいてコンパイルされました。

答え1

ファイルでは、プログラムまたはスクリプトの名前またはパス(およびオプションのパラメーター)のみを使用できます。sudoers同様のシェル構成は||機能しません。
引用するman sudoers

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

この問題を解決する最も簡単な方法は、一連のコマンドを実行するスクリプトを生成し、ルートのみを書き込むように設定してからpassを付与することですsudo


sudoマンページは実際にサブシェルでコマンドを実行する例を示していますが、設定でこれを許可する方法が見つかりませんでしたsudoerssudoユーザーメーリングリスト

関連情報