如何限制用户的shell允许执行shell程序

Hul*_*ulk 9 scripting linux shell

是否有可能阻止任何用户不使用诸如 ls、rm 和其他可能损害系统的系统命令之类的命令。但是用户应该能够执行shell程序。

chr*_*ris 11

你的问题应该是:

我不信任我的用户。愚蠢的人在互联网上看到一些东西并在不了解它的作用的情况下尝试它。狡猾的人喜欢四处窥探,查看其他人的文件并窃取他们的想法。和懒惰的人,不要让我开始谈论懒惰的人。

我如何保护我的系统和我的用户免受我的用户的影响?


首先,unix 有一个非常全面的文件系统权限系统。 这似乎是一个关于 Unix 文件系统权限的不错的教程。其要点是可以设置目录,以便用户可以进入目录并可以在该目录外运行程序,但不能查看该目录的内容。例如,如果您在 /home 上执行此操作,如果用户在 /home 上运行 ls,则会收到权限被拒绝错误。

如果你真的很害怕你的用户,并且想把他们放在一个超大类型的受限环境中,使用像 freebsd 的 jails 或 solaris 的 zone 之类的东西——每个用户都有自己量身定制的环境。对于添加的点,请使用 ZFS,因此您可以在他们登录时拍摄环境快照,因此如果他们删除了他们的文件,您只需将它们从快照中拉出即可。


sys*_*138 9

要完全满足您的要求,需要做好三件事:

  1. 缺少您感兴趣的命令的自定义 shell。这是一件很难的事情,但如果你真的不希望用户访问某些 shell 原语,这是删除它们的唯一方法。
  2. 正确设置文件权限。不想用户破坏系统?设置权限,这样即使他们拥有正确的工具也不会损坏系统。在这三个步骤中,这是最简单的步骤。
  3. 使用像 AppArmor 这样的强制访问控制技术。AppArmor 和 SELinux 等 MAC 在内核中嵌入了权限。这会阻止用户运行正确的工具,即使他们在某处找到它们(并且像文件权限一样,阻止他们在受限框之外使用它们)。

腰带、吊带和一把订书钉枪,以备不时之需。那里很难出错。

AppArmor 很有趣,因为特定可执行文件的 MAC 由其所有子项继承。将用户的登录名/bin/bash-bob设置为 ,为该特定二进制权限设置 AppArmor 配置文件,他们摆脱该权限监狱的唯一方法是通过内核漏洞利用。如果某些懒惰的安装脚本/var/opt/vendor/tmp由于某些愚蠢的原因使全局可写,则/bin/bash-bob用作其 shell的用户将无法在那里编写. 将 bash-bob 配置文件设置为仅允许写入其主目录和/tmp,并且不能利用此类权限错误。即使他们以某种方式找到了 root 密码,AppArmor 配置文件/bin/bash-bob即使在他们su启动后仍然适用,因为它产生subash进程是/bin/bash-bob.

困难的部分是构建 AppArmor 配置文件。

  1. 为 /bin/bash-bob 创建 AppArmor 配置文件并将其设置为审核模式
  2. 将 Bob 的登录 shell 设置为 /bin/bash-bob
  3. 以 Bob 身份登录。做你想让鲍勃做的一切。
  4. 使用审计日志来构建 AppArmor 配置文件(SUSE 有这方面的工具,不确定其他 Linux 发行版)。这非常乏味,但如果您需要这种级别的安全性,就需要这样做。
    1. 你会做这样的事情:
      • 批准对大多数系统库的读取访问
      • 批准对选定的几个允许的系统命令的读取和执行权限
      • 批准对临时空间的写访问
      • 如果需要,批准套接字创建
  5. 设置要强制执行的策略。
  6. 以 Bob 的身份登录,做事。
  7. 进行调整。

在我看来,您只需要第 2 步和第 3 步,因为它们结合起来都可以防止在您在这两个步骤中设置的精心构建的盒子之外做任何有害的事情。


小智 4

那么,您可以将用户的 shell 设置为您编写的程序,只允许他们运行某些 shell 脚本。

当然,这只能与程序和 shell 脚本一样安全;实际上,这种受限制的 shell 通常无法抵御聪明的攻击者。