提供sftp服务的有vsftpd和internal-sftp,这里用的是系统自带的internal-sftp,操作步骤如下:
1.创建用户YSsftp,禁止ssh登录
useradd -s /sbin/nologin
YSsftp
2.设置用户密码
passwd YSsftp
3.创建用户的根目录
mkdir /home/sftpFile
4.设置权限
设置目录权限,目录的权限设定有两个要点:
目录开始一直往上到系统根目录为止的目录拥有者都只能是root
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
chown root:root /home/sftpFile
chmod 755 /home/sftpFile
5.配置sshd_config
vim /etc/ssh/sshd_config
#注释掉这行
#Subsystem sftp /usr/libexec/openssh/sftp-server
#添加在配置文件末尾
Subsystem sftp internal-sftp #指定使用sftp服务使用系统自带的internal-sftp
Match User www #匹配用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /home/sftpFile #用chroot将指定用户的根目录,chroot的含义
ForceCommand internal-sftp #指定sftp命令
X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
AllowTcpForwarding no
6.重启sshd服务
service sshd restart
7.用户登录后进入的是/home/sftpFile即用户根目录,根目录是无法写入的,所以先用root在/home/sftpFile新建一个UPfile目录
mkdir /home/sftpFile/UPfile
8.修改目录所有者和权限
chown UPfile:UPfile/home/sftpFile/UPfile
chmod 777 /home/sftpFile/UPfile
测试登录
sftp -oPort=22 sftpFile@host
常见文件修复
1.Directive ‘AddressFamily’ is not allowed within a Match block
将这段文字放在配置文件前面
- 2.
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755