使任何人都可以杀死给定用户的所有进程

使任何人都可以杀死给定用户的所有进程

在共享服务器上,我希望有一些非常低优先级的用户,这样每当其他用户(也没有root权限)需要资源时,他们就可以杀死任何低优先级用户的进程。

可以允许这样的事情吗?

答案1

授予其他用户终止进程的权限作为低优先级用户通过

sudo -u lowpriouser /bin/kill PID

用户只能向自己的进程发出信号,除非他们具有 root 权限。通过使用文件sudo -u中正确设置的用户,sudoers可以假定低优先级用户的身份并终止进程。

例如:

%killers ALL = (lowpriouser) /bin/kill

killers这将允许组中的所有用户/bin/killlowpriouser.

另请参阅sudoers系统手册。


在 OpenBSD 系统上,可以通过本机doas实用程序完成相同的操作,配置如下

permit :killers as lowpriouser cmd /bin/kill

然后

doas -u lowpriouser /bin/kill PID

请参阅手册doasdoas.conf

答案2

您不应该终止这些进程,如果它们的优先级较低,它们将消耗很少的资源。

要真正降低它们的优先级,要么手动更改它们的优先级,要么使用像autonice我多年前(c.1994)为 DEC OSF/1 编写的守护进程,该守护进程会查找长时间运行的作业,并随着运行时间的延长逐渐降低它们的优先级。

编辑有一个包叫and为现代的 Unices 提供了这个功能。

答案3

我认为您从错误的角度处理这个问题:如果一个进程以低优先级设置(CPU、I/O)运行,它不会对其他进程产生太大影响,因为它不会被安排运行。至于内存使用,如果主内存紧张并且进程没有安排长时间运行(例如由于CPU和I/O限制),则其“干净”页面将被删除并提交其“脏”页面或被换出并且不再影响其他进程的性能。

结论:通过正确的优先级设置和足够的交换空间,应该没有必要杀死低优先级作业来为更重要的任务腾出“空间”;相反,内核会注意让前者进入睡眠状态,以利于后者。

相关内容