如何阻止某些命令在 linux 中执行?

0 linux security shell

我想在用户在终端上输入一组命令后立即阻止它们。

我怎样才能做到这一点?

all*_*tic 5

仅仅阻止一组特定的命令是危险的,而且可能不是你想要的。如果有人拥有 shell 访问权限,那么他们很有可能通过使用一些基本命令来弄清楚如何做某事——他们想要的任何东西,真的。要确定您实际上是在“阻止”任何事情,您必须仔细审核所有允许的命令,并确定它们都不允许用户执行您不想要的操作。这是一个相当高的要求。

例如,如果你允许他们访问echo, chmodand base64,那么他们可以在他们的系统上获取一个二进制文件,然后将base64它粘贴到他们的 shell 中echo 'long_base64_data' | base64 -d > bin.bin,然后chmod +x bin.bin然后./bin.bin- 它可以执行glibc系统上的 和 系统调用允许的任何事情。

同样,如果任何的解释是允许的,是它perlpythonruby,甚至是(可以说)bash,他们应该能够用它来最终坐下来执行任意代码-再次,任何内核的系统调用允许。

如果您不相信某人在您的系统上拥有完整的 shell 访问权限,则根本不要给他们 shell 访问权限。否则,您需要想出一些自定义网络协议,假设用户是敌对的,并将它们限制为已知和研究过的非常小的操作子集,即使用户尝试做一些令人讨厌的事情,这些操作也是安全的。

天真地回答您提出的实际问题:您显然可以这样做,chmod o-x /bin/rm如果您认为这实际上会阻止用户删除文件(在这种情况下,只有rm命令的所有者才能执行它,通常是root) ; 但如果这就是你所做的,那么他们可以使用busybox或任何上述脚本语言来删除文件。或者他们可以将可执行代码回显到文件中,使其可执行,然后运行它。而且我确信我省略了一些更棘手的方法,让某人使用 shell 执行任意代码,例如将 shell 命令注入到一个命令中,该命令从表面上看似乎是无辜的,并且没有明确允许任意命令。事实上,我可以想到一个安装在 Ubuntu 上的命令,其中有一条评论,比如“我们真的应该想出一个更好的方法来做到这一点,因为这允许任意 shell 代码注入”。它仍然没有修复。

外壳在很大程度上假定操作员是可信的。即使是普通用户 shell(非根用户)也需要高度信任。如果您想要阻止用户执行命令的原因与不完全信任他们有关,我会找到另一种方法来做您想做的事情,而根本不授予他们 shell 访问权限。

顺便说一下,用户shell 稍微降低权限的目的是保护(假定受信任的)用户免受他们自己的攻击,并保护用户免受恶意程序的侵害。保护用户免受他们自己的侵害和保护用户免受恶意程序的侵害与保护操作系统免受不受信任的用户的侵害是完全不同的问题。贝壳本身就不能很好地做到这一点。

换句话说,阻止执行“一组”shell 命令然后授予某人shell 访问权限就像试图通过在海滩上的沙子中放置几根杆子来阻止海啸。还有数以百万计的水可以流到其他地方,所以即使水流进了你所有的杆子,也不妨碍它上海滩(它很可能会拆毁你的杆子并带来无论如何,它与海啸一起发生)。你需要建造一座跨越数英里的真正的水坝。幸运的是,在数字世界中,建造一座相当不错的大坝比在现实生活中容易得多。an HTTPS server总的来说,有一种叫做和许多服务器端编程语言可以很好地完成这项任务。当然比壳好得多。