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


15

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

是否可以允许这样的事情?


1
将sudo -u用户杀死权限授予一组中可能需要的所有用户
Kiwy

4
我真的希望这些低优先级用户是真实的人类用户,并且您和您的伙伴是纯种BOFH。这使问题变得更加有趣。
配管

@DavidFoerster,有一个问题是,即使当CPU不处于100%的低优先级的进程可以填满处理器高速缓存等。同样地与磁盘访问等等
伊恩林格罗塞

Answers:


24

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

sudo -u lowpriouser /bin/kill PID

用户只有自己的进程才能发出信号,除非它们具有root特权。通过sudo -usudoers文件中使用具有正确设置的用户,可以假定低优先级用户的身份并杀死该进程。

例如:

%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


如果允许任何 kill命令,则可能滥用该命令将与终止无关的信号发送到任意进程,这可能是安全问题。
森林

@forest这就是为什么我不建议让所有人都可以使用root帐户来运行kill。还要注意,我建议使用用户组(killers),而不是所有用户。
库沙兰丹

但是我的意思是,这将允许该小组发送信息kill -HUP,而不仅仅是发送kill -TERM
森林

@forest是的。它允许将信号发送到拥有的进程lowpriouser。如果您想将信号限制为TERM,则编写一个包装外壳脚本,/bin/kill并允许人们使用而不是/bin/kill
库沙兰丹

1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
森林

5

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

要真正降低优先级,请手动更改其优先级,或使用类似 autonice我多年前(约1994年)为DEC OSF / 1编写,查找长时间运行的作业,并随着运行时间的延长逐渐降低其优先级。

编辑有一个名为的软件包and,为现代Unices提供此功能。


一个问题是,即使CPU不在100%低优先级,进程也会填满处理器缓存等。同样,磁盘访问等
Ian Ringrose

@IanRingrose只有计划运行的任务才能占用缓存或执行磁盘访问。
Alnitak

4

我认为您是从错误的角度解决问题的:如果某个进程以低优先级设置(CPU,I / O)运行,那么它不会对其他进程造成太大影响,因为它不会被安排运行。至于内存使用情况,如果主内存太紧并且该进程没有计划长时间运行(例如,由于CPU和I / O约束),则会删除其“干净”页面,并提交其“脏”页面或换出,不再影响其他流程的性能。

结论:有了正确的优先级设置和足够的交换空间,就没有必要杀死低优先级的工作来为更重要的任务腾出空间。取而代之的是内核会注意使前者处于休眠状态,而后者则处于有利地位。


1
“低优先级”也可能意味着“不重要”,而没有暗示的含义“以降低的CPU优先级运行”。但是,这在问题中并未明确指出。
库沙兰丹

@Kusalananda:我同意这在问题中并不明确,但我的回答指出这应该是现实的。
David Foerster

1
这不是那么简单。即使是低优先级的进程也会使系统停止运行,尤其是在存在内存限制的情况下:根据设置的方式,它会使进程交换。交换会导致I / O(可能不包含在进程的I / O配额中),并且还会使系统的响应速度降低几个数量级。然后,您可能还通常希望(而其他人不需要资源),低优先级进程实际上可以获取它需要的所有资源(这使典型的内存限制不适用)。CPU共享在这里有帮助。
乔纳斯·谢弗

@JonasWielicki,换出完整过程的旧“ unix方式”确实有其优势。如果我没记错的话,HPUX可以在1990年代提供一些工具来解决此问题。
伊恩·林格罗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.