![如何阻止某组命令在 Linux 中执行?](https://linux22.com/image/1327648/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E6%9F%90%E7%BB%84%E5%91%BD%E4%BB%A4%E5%9C%A8%20Linux%20%E4%B8%AD%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
我想在用户在终端上输入一组命令时立即阻止它们。
我怎样才能做到这一点?
答案1
仅仅阻止一组特定的命令是危险的,而且可能不是您想要的。如果有人拥有 shell 访问权限,他们很有可能只需使用几个基本命令就能弄清楚如何做某事(实际上,任何他们想要做的事情)。要确定您实际上“阻止”了某事,您必须仔细审核所有允许的命令,并确定其中没有一个允许用户执行您不想要的操作。这是一个相当艰巨的任务。
例如,如果您允许他们访问echo
、chmod
和base64
,那么他们可以在他们的系统上获取二进制文件,base64
将其粘贴到他们的 shell 中,echo 'long_base64_data' | base64 -d > bin.bin
然后使用chmod +x bin.bin
和然后./bin.bin
——它可以执行glibc
系统上的和系统调用允许的任何操作。
类似地,如果任何翻译是允许的,无论是perl
、、,甚至(可以说)python
,他们应该能够使用它最终实现任意代码执行——同样,内核的系统调用允许的任何操作。ruby
bash
如果你不相信某人拥有你系统的完全 shell 访问权限,那么就不要给他们 shell 访问权限。否则,你需要想出一些自定义网络协议来认为用户有敌意并将它们限制在一个非常小的众所周知和研究过的操作子集上,即使用户试图做一些恶意的事情,这些操作也是安全的。
回答你问的实际问题,天真地说:chmod o-x /bin/rm
如果你认为这实际上会阻止用户删除文件(在这种情况下,只有命令的所有者rm
才能执行它,通常是root
),你显然可以这样做;但如果你只做了这些,那么他们可以使用busybox
或上述任何脚本语言来删除文件。或者他们可以将可执行代码回显到文件中,使其可执行,然后运行它。我确信我省略了更棘手的方法,让某人使用 shell 执行任意代码,例如将 shell 命令注入到表面上看似无害且未明确允许任意命令的命令中。事实上,我能想到一个安装在 Ubuntu 上的命令,其中有一条评论,比如“我们真的应该想出一个更好的方法来做到这一点,因为这允许任意 shell 代码注入”。它仍然没有修复。
shell 在很大程度上假设操作员是值得信赖。即使是普通用户 shell(非 root)也需要很大的信任。如果您想要阻止用户执行命令的原因与不完全信任他们有关,我会找到另一种方法来完成您要做的事情,而无需完全授予他们 shell 访问权限。
顺便说一句,用户 shell 的权限有所降低的目的是为了保护(假定受信任的)用户免受自身攻击,以及保护用户免受恶意程序的攻击。保护用户免受自身攻击和保护用户免受恶意程序的攻击与保护操作系统免受不受信任的用户攻击是完全不同的问题。shell 本质上无法很好地做到这一点。
换句话说,阻止执行“一组”shell 命令,然后授予某人 shell 访问权限,就像试图通过在沙滩上插几根杆子来阻止海啸一样。还有数百万个其他地方可以流水,所以即使水冲进了你所有的杆子,也丝毫不会阻碍它涌上海滩(而且它很可能会把你的杆子拆下来,并随海啸一起涌上来)。你需要建立一个真正的水坝跨越数英里。幸运的是,在数字世界中,建造一个相当好的大坝比在现实生活中要容易得多。有一种叫做的东西an HTTPS server
和一些服务器端编程语言总体上可以很好地完成这项任务。当然比 shell 好得多。