グループメンバーにsudoerが許可するタスクのみを実行させることはできますか?

グループメンバーにsudoerが許可するタスクのみを実行させることはできますか?

sudoersラインは

%game_servers   ALL=      NOPASSWD:/usr/bin/renice

グループメンバーはパスワードなしですべてのユーザーがすべてのプロセスを実行できるようにしますが、負の値を使用してグループメンバーの独自のプロセスのみを許可したいとrenice思います。renice

man sudoers変更しようとした場所でALL=(root:root)答えが見つかりませんALL=。悪い考えでした。

ALL=()文法エラーです。

答え1

reniceグループメンバーが自分のプロセスのみを実行できるようにしたいです。これは項目のないデフォルトの動作ですsudoers。デフォルトでは、renice独自のプロセス範囲内で良い値を設定できます0 - 19

sudoアクセス権があれば、スコープと独自のプロセスをrenice拡張できます。-20 to 19renice

を実行すると、man renice目的の操作を実行するためのオプションは表示されません。ユーザーがコマンドsudoにアクセスできる場合は、すべてのプロセスを実行するためのオプションをrenice追加できます。renice

あなたの解決策はファイルreniceのエントリを削除することですsudoers。これにより、ユーザーはrenice自分のプロセスのみを使用できます。彼らは良い値を間の値に設定する能力を失いますが-20 and -1、これがここで求められる妥協案です。

答え2

次のラッパーを使用してくださいrenice

#!/bin/sh
priority="$1"
pid="$2"

owner=`ps -h -o uid $pid`
if [ $owner != ${SUDO_UID} ]; then
    echo "Only your own processes can be reniced" >&2
    exit 1
fi
renice $priority $pid

この例は脆弱であり、所有権の確認と優先順位の変更との間の遅延により競合状態が発生しやすくなります。

関連情報