创建sftp跟目录
假如我们用/data
目录来作为数据目录,在此创建/data/sftp_data
为sftp的跟目录。
1mkdir /data/sftp_data
创建组
因为有多个sftp用户,所以需要建立一个组为sftpgroup,专门管理该组内的用户。
1groupadd sftp
创建用户
创建用户
1useradd -g sftpgroup sftpuser
- -m:自动创建 home 目录
- -d:指定 home 目录
- -s:shell为 /usr/sbin/nologin 禁止用户使用SSH登录,仅用于SFTP
- -g 指定组为 sftpgroup
配置用户密码
1passwd sftpuser
配置SSH
1#修改/etc/ssh/sshd_config
2sudo vim /etc/ssh/sshd_config
3
4#注释 Subsystem sftp /usr/lib/openssh/sftp-server
5#新增下面行,表示sftp服务使用系统自带的internal-sftp
6Subsystem sftp internal-sftp
7
8#文件最后新增内容
9Match Group sftpgroup # 匹配组,多个组用逗号分隔,也可以match User 用户名,为指定用户做配置
10ChrootDirectory /data/sftp_data # 指定用户根目录。%h表示用户home目录,%u表示用户名
11X11Forwarding no # 禁止X11转发
12AllowTcpForwarding no # 禁止TCP转发
13ForceCommand internal-sftp # 强制使用系统internal-sftp
重启SSH
1service sshd restart
2#系统不一样重启命令不同,也有systemctl restart sshd
配置目录权限
因为我们指定了ChrootDirectory
,而ChrootDirectory
权限要有一下两个要求:
ChrootDirectory
指定的目录及该目录到系统根目录为止,目录拥有者都只能是root
ChrootDirectory
指定的目录及该目录到系统根目录为止,群组用户不能有写入权限
1chown root:root /data
2chown -R root:root /data/sftp_data
3
4chmod 755 /data
5chmod -R 755 /data/sftp_data
如果没有按照以上规则配置权限,则用户连接sftp会失败,且有类似以下错误:
1sftpuser@127.0.0.1's password:
2packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
3Connection closed
SFTP上传
上传文件需要再sftp的跟目录建立一个所有者为该用户的目录,比如:
1mkdir /data/sftp_data/upload
2chown sftpuser:sftpgroup /data/sftp_data/upload
此时用户登录sftp后,就可以将文件上传到upload
目录下了。