2021-05-24-SFTP服务的搭建
一、SFTP概述
#1.FTP协议
FTP是一种文件传输协议,一般是为了方便数据共享的。包括一个FTP服务器和多个FTP客户端。FTP客户端通过FTP协议在服务器上下载资源。
#2.SFTP协议
sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口为22。
二、SFTP使用场景
#建议:更高的效率使用FTP协议,更安全的通信使用SFTP协议。
sftp通过使用加密/解密技术来保障传输文件的安全性,因此sftp的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。
三、Centos 7搭建SFTP
1.查看openssh版本:版本需大于4.8
#1.查看openssh版本:版本需大于4.8
[root@prd-db01 ~]$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
2.创建用户组和用户
#1.使用root用户创建用户组,组名为sftpuser_vivaki;创建sftp用户,用户名为sftpuser_vivaki,并设置密码
[root@prd-db01 ~]$ groupadd sftpuser_vivaki // 创建sftp组
[root@prd-db01 ~]$ useradd -g sftpuser_vivaki -M -s /bin/bash sftpuser_vivaki //-M 表示创建用户时不生成对应home目录,-s /sbin/nologin 表示sftp用户不能登录系统
[root@prd-db01 ~]$ passwd sftpuser_vivaki // 修改sftp用户密码
3.修改配置文件sshd_config
[root@prd-db01 ~]$ vi /etc/ssh/sshd_config
修改如下:
#注释掉这行
#Subsystem sftp /usr/libexec/openssh/sftp-server
## 在文件末尾添加如下几行
#指定使用sftp服务使用系统自带的internal-sftp,如果不添加,用户无法通过sftp登录。
Subsystem sftp internal-sftp
#匹配用户组,如果要匹配多个组,多个组之间用逗号分割
Match Group sftpuser_vivaki
#用chroot将指定用户的根目录,chroot的含义:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/;这里的%u指的是账号名,/data/sftpuser_vivaki/%u 含义是:/data/sftpuser_vivaki/sftpuser_vivaki
ChrootDirectory /data/sftpuser_vivaki
#指定sftp命令
ForceCommand internal-sftp
#这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
X11Forwarding no
AllowTcpForwarding no
4.创建目录并设置Chroot目录权限
#1.使用root用户新建目录/home/sftpfile,将其设置为/data/sftpuser_vivaki的home目录,并指定目录权限
[root@prd-db01 ~]$ mkdir -p /data/sftpuser_vivaki //-p 表示parents,即递归创建目录
[root@prd-db01 ~]$ usermod -d /data/sftpuser_vivaki sftpuser_vivaki // -d 表示修改用户home目录
#2.设置Chroot目录权限
[root@prd-db01 ~]$ chown root:sftpuser_vivaki /data/sftpuser_vivaki #文件夹所有者必须为root,用户组可以不是root=
[root@prd-db01 ~]$ chmod 755 /data/sftpuser_vivaki #权限不能超过755,否则会导致登录报错,可以是755
#3.设置sftp用户可以操作的目录
[root@prd-db01 ~]$ mkdir /data/sftpuser_vivaki/attr_analysis
[root@prd-db01 ~]$ chown sftpuser_vivaki:sftpuser_vivaki /data/sftpuser_vivaki/attr_analysis
[root@prd-db01 ~]$ chmod 755 /data/sftpuser_vivaki/attr_analysis
ps:
1. ChrootDirectory所指向的文件夹,属主必须是root,属组是sftp用户所属的用户组。
2. ChrootDirectory所指向的文件夹到系统根路径上的所有途径文件夹,属主都必须是root,且权限不允许有群组用户写入权限,即权限只能为750或755,如果任意一个是777,则会出现上述问题。
5、重启SSH
#1.重启sshd服务
[root@prd-db01 ~]$ systemctl restart sshd.service
#2.查看服务状态
[root@prd-db01 ~]$ systemctl status sshd.service
四、测试验证服务正确性
#1.在其他服务器上进行验证,sftp用户名@ip地址
sftp -P 22 sftpuser_vivaki@172.31.26.143
至此已经完成了sftp创建用户,并修改权限,限制根目录。
在用户登录测试过程中,可能会遇到如下错误:
Couldn't read packet: Connection reset by peer
是目录权限导致了该问题,具体解决方案,回看三步骤!
五、最快SFTP搭建
#1.创建相关目录
[root@prd-databridge001 ~]$ mkdir -p /data/sftpuser_cp
[root@prd-databridge001 ~]$ useradd sftpuser_cp -d /data/sftpuser_cp
[root@prd-databridge001 ~]$ chown -R sftpuser_cp:sftpuser_cp /data/sftpuser_cp
#2.导入用户密钥
1.这里采用亚马逊云生成ssh密钥,上传密钥
[root@prd-databridge001 ~]$ cd /tmp
[root@prd-databridge001 tmp]$ rz
2.切换用户登录
[root@prd-databridge001 tmp]$ su - sftpuser_cp
上一次登录:五 6月 18 17:24:43 CST 2021pts/0 上
3.转换密钥
[sftpuser_cp@prd-databridge001 ~]$ cd ~
[sftpuser_cp@prd-databridge001 ~]$ ssh-keygen -y
Enter file in which the key is (/data/sftpuser_cp/.ssh/id_rsa): /tmp/Stging-DataBridge-ContentPrism-SFTP.pem #这里填写密钥位置
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdSuN1X5LqDzW8a2HSCxWR+wjZO5pbAoOMcwEDIpLXVFv4pneoxzUH8+UQYtWIsMbDCEW*************************************************************************************************
4.复制密钥文件
[sftpuser_cp@prd-databridge001 ~]$ mkdir .ssh
[sftpuser_cp@prd-databridge001 ~]$ vi .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdSuN1X5LqDzW8a2HSCxWR+wjZO5pbAoOMcwEDIpLXVFv4pneoxzUH8+UQYtWIsMbDCEW*************************************************************************************************
5.修改ssh目录权限
[sftpuser_cp@prd-databridge001 ~]$ chmod -R 500 .ssh/
#6.测试登录略