将用户限制在主目录而不修改 /home/%u 权限

将用户限制在主目录而不修改 /home/%u 权限

我还是个 Linux 新手。我正在构建一个供多个用户使用的 Ubuntu 邮件/网络服务器。我想将用户限制在他们的主目录中,以便他们可以登录、更改密码或使用 shell 管理他们的文件。我还想将所有用户文件保存在他们的主目录中,包括邮件、网络等。

我看过的所有文章(例如如何限制ssh用户只能浏览/home/%u内容)提到您必须将chown用户目录归 root 拥有。好吧,这似乎是共识。

为什么会这样呢?

跟进

由于我希望用户能够访问passwd其他系统实用程序,因此我认为我原来的问题不再有意义。似乎正确的做法是关注任何特殊文件夹的权限,包括限制对其他/home*目录的访问。

理想情况下我希望用户能够访问他们需要管理的文件(邮件、网络等)并尽量减少其他地方的访问,并绝对阻止用户浏览或查看其他用户的文件。

答案1

仅使用ChrootDirectorywith 才有意义internal-sftp,当与 一起使用时,ForceCommand意味着与该配置匹配的用户将仅有的能够使用SFTP协议通过SSH访问该服务器。

这与您所说的要实现的目标不相容:

我想将用户限制在他们的主目录中,以便他们可以登录、更改密码或使用

要获得 shell,您需要完整的 SSH 而不仅仅是 SFTP,所以这可能不是您想要的......


关于ChrootDirectoryroot 的所有权,这不一定与主目录有关,而是与 chroot 环境的顶部有关。您在这里遇到的问题是使用主目录作为 chroot 的顶部,而这并不是真正的ChrootDirectory使用方式,也不是最有意义的方式。

更好的方法是使用配置通过 SFTP 公开 chrooted 主目录:

子系统 sftp 内部 sftp

匹配用户 brian
    Chroot目录/chroot/%u
    ForceCommand 内部 sftp

然后,为每个用户(例如 user brian)创建一个/chroot/brian由 root:root 拥有的目录(这很重要,因为它是ChrootDirectory正常工作的限制。)然后,在 内部/chroot/brian为用户创建一个主目录/chroot/brian/home/brian。该主目录可以由 user 写入brian,这可能就是您想要的(主目录完全可由其所有者管理。)

这种方式ChrootDirectory有效,SFTP 服务器将更改到 chroot 内的主目录(如果可以找到)。通过 SFTP 访问服务器的用户将能够进入目录..../..,但这些目录大部分是空的,因此那里不会暴露任何有趣的内容。

您可以使用绑定挂载将“真实”主目录与 chroot 内的目录链接起来:

$ sudo mkdir -p /chroot/brian/home/brian
$ mount --bind /home/brian /chroot/brian/home/brian

您可以配置此安装,/etc/fstab以便每次重新启动服务器时都会安装它。对于要向其公开 SFTP 的每个用户,您都需要一个这样的安装,因此这可能会成为相当大的维护负担。

无论如何,在我看来,SFTP 不一定是您想要的,因此ChrootDirectory可能与您的设置无关。


如果你想暴露,从技术上来说,可以为每个用户设置一个 chroot,并让他们通过 SSH 连接到 chroot。然而:

  • 此配置的设置相当复杂。特别是,您需要完全填充 chroot,因为在 shell 中您通常需要一整套外部命令(例如lscptar等)来执行一些有用的操作。如果您为每个用户设置 chroot,则需要使用所有这些二进制文件、它们依赖的库等来填充它们。此外,您还需要更新这些二进制文件以修复它们的错误和安全问题。这是很多工作。而且,也许更重要的是:

  • Achroot非常脆弱,如果您可以不受限制地访问它(通常使用 shell 进行操作),通常有多种方法可以摆脱它。堵住 chroot 中的所有漏洞并非易事,因此尚不清楚此设置是否能在安全方面带来很多好处。

由于复杂性的增加和安全性方面的微小(可能不存在)收益,我建议不要在 SSH 中研究 shell 的 chroot 设置。


因此,问题是您想要实现什么目标,而 Linux 发行版附带的默认设置尚未实现这一目标。

通常,Unix 权限足以在用户之间实现良好的安全性和隔离级别。

默认情况下,用户已被禁止将文件写入其他用户的主目录。

您可以阻止用户浏览阅读通过将主目录的权限设置为 0700 来访问其他用户主目录中的文件。

(将其自身的权限限制/home为 0711 会阻止使用 列出主目录ls /home,但从中没有太多好处,因为您通常可以找到从 读取内容的所有用户的列表/etc/passwd,而 Linux 中的所有用户都需要读取该列表。)

用户将能够浏览和读取文件系统的大部分其余部分(二进制文件等),但这通常是预期的,因为他们需要其中大部分内容来使用 shell。

邮件系统应该注意设置适当的所有权和权限,以防止用户阅读彼此的电子邮件,因此通常已经为您正确完成了这一操作。

您是否有默认设置尚未涵盖的特定安全问题?否则,保持简单并使用它们,对于大多数典型用例来说应该足够了。

答案2

我想将用户限制在他们的主目录中,以便他们可以登录、更改密码或使用 shell 管理他们的文件。我还想将所有用户文件保存在他们的主目录中,包括邮件、网络等。

理想情况下,我希望用户能够访问他们需要管理的文件(邮件、网络等)并尽量减少其他地方的访问,并绝对阻止用户浏览或查看其他用户的文件。

您不一定需要chroot为此提供环境。您可以按照/home正常方式创建用户帐户,并限制一个用户对任何其他用户的主目录的访问。

chown root.root /home        # Guarantee owner/group
chmod o=x /home              # Search the directory but no read (listing) access
chmod go= /home/*            # Prevent anyone else have access to users' home directories

系统数据库(例如/etc/passwd和 )/etc/group可供所有用户读取,因此存在一些有关在您的系统上拥有帐户的用户组的信息泄漏。

您可能需要创建并强制执行磁盘使用配额,以便一个用户无法填满应在所有人之间共享的可用磁盘空间。我建议/home建立一个单独的分区,/这样填充/home就不会导致系统本身瘫痪。

相关内容