我还是个 Linux 新手。我正在构建一个供多个用户使用的 Ubuntu 邮件/网络服务器。我想将用户限制在他们的主目录中,以便他们可以登录、更改密码或使用 shell 管理他们的文件。我还想将所有用户文件保存在他们的主目录中,包括邮件、网络等。
我看过的所有文章(例如如何限制ssh用户只能浏览/home/%u内容)提到您必须将chown
用户目录归 root 拥有。好吧,这似乎是共识。
为什么会这样呢?
跟进
由于我希望用户能够访问passwd
其他系统实用程序,因此我认为我原来的问题不再有意义。似乎正确的做法是关注任何特殊文件夹的权限,包括限制对其他/home*
目录的访问。
理想情况下我希望用户能够访问他们需要管理的文件(邮件、网络等)并尽量减少其他地方的访问,并绝对阻止用户浏览或查看其他用户的文件。
答案1
仅使用ChrootDirectory
with 才有意义internal-sftp
,当与 一起使用时,ForceCommand
意味着与该配置匹配的用户将仅有的能够使用SFTP协议通过SSH访问该服务器。
这与您所说的要实现的目标不相容:
我想将用户限制在他们的主目录中,以便他们可以登录、更改密码或使用壳。
要获得 shell,您需要完整的 SSH 而不仅仅是 SFTP,所以这可能不是您想要的......
关于ChrootDirectory
root 的所有权,这不一定与主目录有关,而是与 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 中您通常需要一整套外部命令(例如
ls
、cp
、tar
等)来执行一些有用的操作。如果您为每个用户设置 chroot,则需要使用所有这些二进制文件、它们依赖的库等来填充它们。此外,您还需要更新这些二进制文件以修复它们的错误和安全问题。这是很多工作。而且,也许更重要的是:A
chroot
非常脆弱,如果您可以不受限制地访问它(通常使用 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
就不会导致系统本身瘫痪。