1 | docker pull fauria/vsftpd |
- /var/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录,建议宿主机使用 /var 这样公共权限文件夹,如果使用类似 /home 这样的目录可能会造成客户端无法连接上服务器问题)
- -p:映射 docker 端口(冒号前面是宿主机的端口)
- -e FTP_USER=test -e FTP_PASS=test :设置默认的用户名密码(都为 test)
- PASV_ADDRESS:宿主机 ip,当需要使用被动模式时必须设置。
- PASV_MIN_PORT~ PASV_MAX_PORT:给客服端提供下载服务随机端口号范围,默认 21100-21110,与前面的 docker 端口映射设置成一样。
1 | docker run -d -v /var/ftp:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=liangbo -e FTP_PASS=liangbo4869 -e PASV_ADDRESS=192.168.1.103 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd fauria/vsftpd |
Centos6新建用户并且限制用户的访问权限在某个指定目录中
新建一个新的用户,并且为了保证系统的安全性,指定该用户在指定的目录内进行访问
新建用户组:groupadd sftpusers
新建用户并将用户添加到分组中
使用root权限建立新用户的主目录,注意这里必须是root权限,否则后续的sftp不能连接
1
adduser sftpuser1 -d /sftp/sftpuser1 --shell /bin/false -g sftpusers
如果上面已经用root建立了一个主目录。所以会有一个warning,不用管他。
设置密码:
passwd sftpuser1查看group情况:
groups sftpuser1
修改sshd_config,使用 chroot 监狱限制 SSH 用户访问指定目录
vim /etc/ssh/sshd_config注释掉
Subsystem sftp /usr/libexec/openssh/sftp-server下一行添加
Subsystem sftp internal-sftp在文件最后添加;
1
2
3
4
5Match User sftpuser1 #也可设置为用户组 Match group sftpusers
ChrootDirectory /sftp/sftpuser1
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp这一段的意思是对visitors分组里的所有用户,我们只给他们通过sftp访问/home/fangke的权限,不能直接通过ssh登录服务器
重启sshd
1
2
3
4
5
6# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
OR
systemctl restart sshd
目录和权限设置
1)/sftp/sftpuser1
ChrootDirectory设置的目录/sftp/sftpuser1的所有者必须是root,并且该目录的上级目录/sftp的所有者也必须是root.
而且只有所有者拥有写权限,/sftp/sftpuser1和/sftp的权限最大设置只能是755.
1 | chown root:root /sftp/sftpuser1 |
2)/sftp/sftpuser1/download
由于上一层目录的权限是755,
因此所有非root用户都无法在目录中写入文件.
我们需要在ChrootDirectory指定的目录下建立子目录比如download,重新设置属主和权限.
这样就可以在读写download目录了.
1 | mkdir /sftp/sftpuser1/download |
- 测试
sftp -oPort=22 sftpuser1@127.0.0.1
输入密码
1 | # sftp -oPort=22 sftpuser1@127.0.0.1 |

\6. 问题和经验教训
按照网上的教程设置后,出现过几种情况
1)Write failed: Broken pipe
错误: Received unexpected end-of-file from SFTP server
错误: 无法连接到服务器
解决:
这个问题是由于ChrootDirectory指定的目录的权限问题。
注意归属和权限
drwxr-xr-x 3 root root 4096 Jun 17 16:12 sftp
drwxr-xr-x 3 root root 4096 Jun 17 15:21 sftpuser1
drwxr-xr-x 2 sftpuser1 sftpusers 4096 Jun 17 15:24 download
我最后的解决方案是: 单独建/sftp/sftpuser1 文件夹, 不要放在/home底下。