是否可以强制组成员仅以自己的身份运行 sudoers 允许的操作?

是否可以强制组成员仅以自己的身份运行 sudoers 允许的操作?

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

请注意,该示例很脆弱,并且由于所有权检查和优先级更改之间的延迟而容易出现竞争条件。

相关内容