![尝试通过 sftp 登录 chroot 账户时连接中止](https://linux22.com/image/881100/%E5%B0%9D%E8%AF%95%E9%80%9A%E8%BF%87%20sftp%20%E7%99%BB%E5%BD%95%20chroot%20%E8%B4%A6%E6%88%B7%E6%97%B6%E8%BF%9E%E6%8E%A5%E4%B8%AD%E6%AD%A2.png)
我正在尝试创建一个用户 kake_sftp,它可以登录位于 /var/www/html 或类似位置的 Web 服务器。我知道 chroot 需要一些额外的子目录才能使权限发挥作用,所以我可以添加新文件夹或稍微更改文件夹布局。
我在组 www-data 中创建了用户,主目录位于 /var/www/html
$ cat /etc/passwd | grep kake_sftp
kake_sftp:x:1001:1001::/var/www/html:/bin/bash
$ groups kake_sftp
kake_sftp : kake_sftp www-data
然后我在 /etc/ssh/sshd_config 中做了一些更改。我将“Subsystem sftp /usr/lib/openssh/sftp-server”替换为“Subsystem sftp internal-sftp”,并在末尾添加了以下几行
Match User kake_sftp
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTcpForwarding no
www文件夹的权限设置如下。
$ ls -la /var/www
drwxrwxr-x 3 root root 4096 Apr 7 12:17 .
drwxr-xr-x 12 root root 4096 Apr 4 10:17 ..
drwxr-xr-x 2 root www-data 4096 Apr 4 11:34 html
当我尝试使用设置为 sftp 的 Filezilla 登录时,出现以下错误。
Error: Network error: Software caused connection abort
Error: Could not connect to server
当我尝试通过 sftp 以主用户身份登录时,一切运行正常。因此客户端没有问题。
答案1
之所以不起作用,是因为 chrooted 目录具有写入权限。通过撤销所有写入权限,我成功连接了。
chmod 555 /var/www