将用户囚禁在目录中

将用户囚禁在目录中

树

我有一个运行 Debian 操作系统的 VPS,想在其上创建用户帐户。

我希望当用户使用 sftp 登录时,var 中的所有内容看起来都是他们的主目录,并且他们无法通过 cd 退出。

例如,当用户 3 登录时,他们可以访问 var 中的所有内容(读取、写入、执行),但不能查看 (cd) 用户 1 或用户 2 的个人资料。

我该如何做这件事?

我认为我必须在 中执行此操作chroot,但我不知道这将如何进行。

谢谢

答案1

人们在使用 chrooted SFTP 时遇到的 #1 问题是,OpenSSH 默认要求 root 拥有给定用户 chroot 目录的整个路径。换句话说,如果您想将某人 chroot 到 /home/someone,/ 必须由 root 拥有,并且权限不超过 0755,/home 必须由 root 拥有,并且权限不超过 0755,也许最令人惊讶的是,/home/someone 必须由 root 拥有,并且权限不超过 0755。在您的例子中,您希望将人们 chroot 到 /var(我甚至不会问),这样您就可以避免这个权限问题,但在其他不可避免的情况下,您可能需要研究一下mount --bind

至于实际的 chrooting,您有两种选择:按组或按用户。无论哪种情况,您都将编辑 sshd_config 文件。对于组范围,它看起来像:

Match group sftponly
ForceCommand internal-sftp
ChrootDirectory /var
AllowTcpForwarding no

对于每个用户的配置,它将简单如下:

Match user sftpdude
ForceCommand internal-sftp
ChrootDirectory /var
AllowTcpForwarding no

请注意,直到 OpenSSH 版本 5 左右才支持 internal-sftp,因此如果您无权访问 v5 包,则可能必须编译 OpenSSH 的自定义副本。

答案2

如果您将每个用户目录的 chmod 700 设为只有目录所有者才能访问该目录的内容。

即将chmod 700 /home/duke/aa/servers/user2阻止除 user2(和 root)之外的任何用户访问它。

当然,user2 需要是 的所有者/home/duke/aa/servers/user2才能访问他自己的文件。

答案3

根据您使用的 FTP 服务器,这应该相对容易。proftpd 和 vsftpd 都是 Debian 中的软件包,它们都支持 chroot 作为选项。ProFTPd 文档是这里

对于 SSH/SFTP,请查看http://www.debian-administration.org/articles/590

相关内容