我怎样才能安全地给别人一个外壳?

我怎样才能安全地给别人一个外壳?

我有一个关于向某人提供空壳帐户的问题。安全性如何?他可以阅读/etc。我怎样才能提供一个安全的 shell 帐户,仅将用户限制在某些垃圾箱和他自己的家中? chroot 监狱是唯一的方法吗?

答案1

控制用户可以执行的操作的最简单/有效的方法之一是壳牌

lshell 是一个用 Python 编写的 shell,它允许您将用户环境限制为有限的命令集,选择启用/禁用通过 SSH 的任何命令(例如 SCP、SFTP、rsync 等)、记录用户的命令、实施计时限制,和更多。

答案2

如果你给某人一个 shell 帐户,他们就可以看到所有世界可读的文件。这包括/etc系统工作所需的许多文件,包括/etc/passwd(包含用户名但不包含密码)。

如果您只允许用户登录 chroot 内部,他们将无法看到 chroot 外部的文件。这意味着您必须在 chroot 中放置足够的程序、库等 — 用户必须有权访问的所有内容以及它们的每个依赖项。

请注意,chroot 仅保护直接文件访问。用户可以窥探各种内容,包括所有用户正在运行的进程的名称和参数(除非您设置了额外的保护,例如 SELinux)。如果用户不需要做太多事情,您可以使用受限 shell 设置更严格的限制(包括阻止用户创建自己的可执行文件),但设置受限 shell 权限非常棘​​手,所以我不这样做不推荐它。

如今,虚拟机非常便宜。您有许多免费的实现可供选择(用户模式 ​​Linux、VirtualBox、VMware、KVM、OpenVZ、VServer 等),并且额外的系统安装所使用的磁盘空间很小(无论如何您可能都需要它来进行 chroot)。虚拟机几乎隔离了所有内容:文件、进程、网络……除非您有非常不寻常的限制,否则这就是正确的选择。

答案3

一种选择是将它们放入受限的 shell 会话中,例如rbash[bash-r]。

目前还不清楚您到底希望完成什么,但是,从表面上看,“其他”的 posix acl 将应用于新帐户以及该帐户所属组的任何组 acl,例如例如“用户”。

答案4

请记住,/etc即使非特权用户也需要阅读其中的部分内容。如果其中有些内容/etc不应该可读,但实际上是可读的,那么您遇到了更大的问题,至少应该运行您的发行版的权限检查/修复程序。

监狱是设置严厉限制的最简单方法。还有其他方法,例如设置 SElinux 并安排用户拥有非常有限的安全上下文。

相关内容