我试过了
chmod 700 /bin/kill chown root /bin/kill
但普通用户仍然可以这样做:
kill blah
…并成功杀死在用户帐户下运行的应用程序“blah”。
我使用Ubuntu(8.10)。 bash shell显然有内置的kill命令,所以尝试上述方法将不起作用。
使用.bashrc可以使用enable命令在每次启动terminal时禁用内置的kill命令,但是可以简单地使用通过GUI启动的文本编辑器编辑.bashrc来重新启用kill命令。 我可以以某种方式永久禁用内置的bash命令,而不使用.bashrc(这是用户可编辑的)?
任何人有任何想法如何我可以禁用内置的杀死?
答案是,编译自己的bash版本的短,你不能。 而且,即使你成功了,如果你的用户可以编译程序或者把二进制文件移动到系统上,他们总是可以带入一个自己的kill二进制文件,并且无论如何都可以发出kill。
现在的问题是:你真的想做什么? 因为禁用kill命令不是,我怀疑你的实际目标。 你试图阻止用户做一些事情(大概杀死他们不应该做的事情),并且可能有更好的方法去做你想做的事情。
无论你使用什么,kill命令或shell内置,它将使用kill或相关的系统调用。 要了解这个,请看man 2 kill 。
杀死不仅仅是用来杀死一个进程,而是用来发送一个信号。 发送信号是Unix操作系统的基本function,所以你不想禁用它。
正确的方法:
正确的方法来做你想做的事情可能是正确地pipe理你的权限。 只有在以下条件下才允许使用信号:
对于有权发送信号的进程,它必须有特权(在Linux下:具有CAP_KILL能力),或者发送进程的真实或有效用户ID必须等于目标的实际或保存的set-user-ID处理。
如果你真的想要:
所以,如果你真的想让用户无法发送信号来处理他们开始,我想你必须setuid root程序,并且在开始之后立即改变真实和有效的用户ID没有特权的用户,因为只有root可以改变真正的用户ID。 这样做的一个示例程序是login命令。 你必须非常小心地编程这些程序,否则你将会造成一个很大的安全漏洞。
在迈克尔的回答之后,要防止用户向用户保护域(即在该用户的ID下运行)中运行的进程发送信号(这是kill的作用)将是非常非常困难的。 可能的话,你不会真的想,因为它也可以防止用户终止一个失控的程序,例如。 另外,它可能会破坏你现有系统的一部分。
正如Michael所说,你可能试图阻止用户向一个或多个特定进程发送信号,而这样做的方法是将这些进程放到不同的保护域中,换句话说就是在不同的用户标识下运行它们。
如果你想限制和locking人们可以用bash做的事情,那么把它们改为rbash (受限制的bash)shell。 更多信息