我有一个运行 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