如何阻止用户在 bash 中使用 kill?

如何阻止用户在 bash 中使用 kill?

我试过了

chmod 700 /bin/kill
chown root /bin/kill

但普通用户仍然可以执行以下操作:

kill blah

...并成功终止在用户帐户下运行的应用程序“blah”。

我正在使用 Ubuntu (8.10)。bash shell 显然内置了 kill 命令,因此尝试上述操作将不起作用。

使用 .bashrc,每次启动终端时,enable 命令可用于禁用内置 kill 命令,但用户可以使用通过 GUI 启动的文本编辑器简单地编辑 .bashrc 以重新启用 kill 命令。我是否可以在不使用 .bashrc(用户可编辑)的情况下永久禁用内置 bash 命令?

有人知道我该如何禁用内置终止功能吗?

答案1

答案是,除非您编译自己的 bash 版本,否则您无法做到这一点。此外,即使您成功了,如果您的用户可以编译程序或将二进制文件移动到系统上,他们总是可以引入自己的 kill 二进制文件,并且无论如何都能够发出 kill 命令。

现在,问题是:您真正想做什么?因为我怀疑禁用 kill 命令不是您的实际目标。您试图阻止用户执行某些操作(可能是杀死他们不应该执行的操作),并且可能有更好的方法来实现您的目标。

答案2

无论您使用 kill 命令还是 shell 内置命令,它都会使用 kill 或相关系统调用。要了解此内容,请参阅man 2 kill

Kill 不仅用于终止进程,还用于发送信号。发送信号是 Unix 操作系统的基本功能,因此您不想禁用它。

正确的方法:
无论你想做什么,正确的方法可能是正确管理你的权限。信号仅在以下条件下允许:

对于有权发送信号的进程来说,它必须具有特权(在 Linux 下:具有 CAP_KILL 功能),或者发送进程的真实或有效用户 ID 必须等于目标进程的真实或保存的设置用户 ID。

如果你确实想要:
所以,如果你真的真的如果希望用户无法向他们启动的进程发送信号,我认为您必须将程序设置为 root 权限,并让其在启动后立即将真实用户 ID 和有效用户 ID 更改为较低权限的用户,因为只有 root 才能更改真实用户 ID。执行此操作的一个示例程序是命令login。但是,您必须非常小心地编写这些程序,否则您将产生巨大的安全漏洞。

答案3

根据 Michael 的回答,阻止用户向在该用户的保护域中运行的进程(即在该用户的 ID 下运行)发送信号(这是 kill 所做的)是非常非常困难的。您可能真的不想这样做,因为它还会阻止用户终止失控的程序。此外,它可能会破坏您现有系统的某些部分。

正如迈克尔所说,您可能正在试图阻止用户向一个或多个特定进程发送信号,而实现这一点的方法是将这些进程放入不同的保护域中,换句话说,在不同的用户 ID 下运行它们。

答案4

如果您想限制和锁定人们可以使用 bash 做的事情,那么请将它们更改为rbash(受限 bash)shell。更多信息

相关内容