一、SFTP简介
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。SFTP使用加密传输认证信息和传输的数据,所以使用SFTP是非常安全的。
和ftp不同的是sftp传
SFTP 为SSH的一部分,是一种传输档案至 Blogg
二、SFTP搭建
1、安装OpenSSH
- 安装之前务必检查SELINUX状态,如果开启一定将其关闭
[root@localhost ~]# sestatus
SELinux status: enabled
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 重启服务器
[root@localhost ~]# reboot
# 重启服务器后再次确认
[root@localhost ~]# sestatus
SELinux status: disabled
- 首先我们需要先确认是否安装了OpenSSH服务,默认情况下Linux发行版都安装了,我们这里再确认一下,安装则忽略,没安装则运行下面的命令安装
# YUM方式安装的,通过以下命令查看
[root@localhost ~]# yum list installed openssh
[root@localhost ~]# yum install openssh
# RPM包安装的,通过以下命令查看
[root@localhost ~]# rpm -qa | grep openssh
# 如果没有则通过以下命令进行安装
[root@localhost ~]# yum install openssh-client openssh-server openssh-sftp-server
2、创建用户和组
2.1:创建用户组
- 这里创建一个单独的用户组,为了方便我们管理SFTP用户
# 我这里创建了一个名为sftp-users的用户组
[root@localhost ~]# groupadd sftp-users
2.2:创建用户
# 创建一个SFTP用户,我这里取名为admin,并指定他的属组为sftp-users
[root@localhost ~]# useradd -g sftp-users -m admin
# 为admin用户配置密码
[root@localhost ~]# echo "dqzboy123" | passwd --stdin admin
更改用户 admin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
3、配置SSH和权限
3.1:修改SSH的配置
[root@localhost ~]# vim /etc/ssh/sshd_config
99 AllowTcpForwarding no
101 X11Forwarding no
# 将默认的Subsystem注释掉,改为下面的参数
132 Subsystem sftp internal-sftp
# 文件末尾添加
Match Group sftp-users
ChrootDirectory /data/app
ForceCommand internal-sftp
参数说明:
AllowTcpForwarding no
用户不能使用端口转发,去除注释,将yes改为no;没有该参数则需将该参数添加至文件末尾X11Forwar
禁止使用X11转发;没有该参数则需将该参数添加至文件末尾文章来源(Source):浅时光博客 ding noSubsystem sftp internal-sftp
指定sshd使用内置sshd的SFTP服务器代码,而不是运行另一个进程Match Group sftp-users
表示下面的配置匹配该用户组,多个组用逗号分隔ChrootDirectory /data/app
表示SFTP所访问的主目录为/data/app,表示指定上面匹配的用户组可以chroot环境路径到此目录, 如果写的是 %h,那就是指定SFTP默认的主目录为用户家目录,比如/home/adminForceCommand internal-sftp
强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令
3.2:设定SFTP的权限
# 创建SFTP指定的主目录
[root@localhost ~]# mkdir -p /data/app
# 主目录的属主必须为ROOT用户,属组改为我们上面创建的sftp的用户组
[root@localhost ~]# chown root:sftp-users /data/app/
# 设置SFTP主目录权限为755,不可以超过755否则会登入报错
[root@localhost ~]# chmod 755 /data/app/
- 注意:目前为止,sftp的主目录只有查看权限,只能实现下载、查看,并不能上传,删除,重命名
3.3:创建SFTP子目录
# 现在在SFTP主目录下创建一个子目录,并设置子目录的属主为admin,属组为sftp-users
[root@localhost ~]# mkdir /data/app/upload
[root@localhost ~]# chown admin:sftp-users /data/app/upload/
[root@localhost ~]# chmod 755 /data/app/upload/
3.4:重启SFTP服务
- 配置完成后需要重新启动sshd使配置生效
[root@localhost ~]# systemctl restart sshd.service
三、SFTP登入
1、Linux环境下
[root@localhost ~]# sftp admin@127.0.0.1
sftp> ls
upload
sftp> pwd
Remote working directory: /
sftp> cd upload/
sftp> ls
sftp> mkdir 1
sftp> ls
1
2、Windows环境
- 通过ftp工具或者xshell选择sftp协议连接
四、问题总结
问题描述:
packet_write_wait: Connection to xx.xx.xx.xx port 22: Broken pipe
Couldn't read packet: Connection reset by peer
问题原因:
- 这个问题的原因是ChrootDirectory的主目录权限问题,你设定的主目录必须是root用户所有,如果主目录的权限不是root用户就会出现问题
解决方案:
确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:
- 目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
- 目录开始一直往上到系统根目录为止都不可以具有群组写入权限

必须 注册 为本站用户, 登录 后才可以发表评论!