root
可以杀死任何用户运行的任何程序。用户是否可以在不使用sudo
等的情况下杀死另一个用户的程序?
示例:如何让用户杀死用户运行的foo
程序?x
bar
答案1
这是来自kill(2)
联机帮助页:
对于有权发送信号的进程,它必须具有特权(在 Linux 下:具有 CAP_KILL 功能),或者发送进程的真实或有效用户 ID 必须等于目标的真实或保存的设置用户 ID过程。在 SIGCONT 的情况下,当发送和接收进程属于同一会话时就足够了。
因此,本质上,在正常情况下,如果您不是 root(并且无法通过 sudo 或setuid
程序成为 root 或其他用户),则无法杀死其他用户的进程。
答案2
root 和 bar 只能杀死 bar 拥有的进程。 Sudo/setuid 程序将 foo 的权限更改为 root 的权限。
答案3
请参阅吉尔斯的回答为什么 bash 忽略 SIGTERM?
首先,这不是 bash 特有的。 ATT ksh、dash 和 zsh 的行为方式相同:它们在命令行编辑期间忽略 SIGTERM 和 SIGQUIT;至于 mksh,它也不会退出,而是将它们视为 SIGINT。
ksh 手册和 bash 手册都证明在这些术语中忽略 SIGTERM 是合理的:
so that kill 0 does not kill an interactive shell
Kill 0 杀死 shell 所在进程组中的所有进程。简而言之,进程组由终端前台运行的所有进程,或者后台或挂起作业的所有进程组成。