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 19
renice
を実行すると、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
この例は脆弱であり、所有権の確認と優先順位の変更との間の遅延により競合状態が発生しやすくなります。