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

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

是否可以防止任何用户使用 ls、rm 等可能损害系统的系统命令。但用户应该能够执行 shell 程序。

答案1

你的问题应该是:

我不信任我的用户。愚蠢的用户在互联网上看到一些东西,然后尝试它,却不了解它的作用。狡猾的用户喜欢四处窥探,查看其他人的文件并窃取他们的创意。还有懒惰的用户,别让我开始谈论懒惰的用户。

我该如何保护我的系统和用户免受用户的侵害?


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

如果你真的害怕你的用户,并想把他们困在超级max受限环境的类型,使用类似 freebsd 的 jails 或 solaris 的区域 - 每个用户都有自己量身定制的环境。为了增加点数,使用 ZFS,这样您可以在用户登录时拍摄环境快照,这样如果他们删除了文件,您只需将它们从快照中拉出来即可。

答案2

为了完全完成您的要求,需要做好三件事:

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

腰带、吊带和钉枪都是不错的选择。这样很难出错。

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

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

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

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

答案3

嗯,你可以设置用户的 shell对于您编写的仅允许它们运行某些 shell 脚本的程序。

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

答案4

如果你希望用户只能执行某些脚本/二进制文件,则可以使用受限外壳。这(正如 Wikipedia 文章所提到的)并不完全安全,但如果您可以保证没有允许运行的应用程序能够执行新的 shell,那么这是一个不错的选择。

要设置用户受限的 shell,请设置/bin/rbash(或类似方法,大多数 shell 在二进制文件被命名时进入受限模式r***name*) 作为用户 shell。然后,编辑 **.bashrc(或等效的)并设置$PATH为存储所有允许的二进制文件/脚本的目录。

相关内容