#1.FTP协议
FTP是一种文件传输协议,一般是为了方便数据共享的。包括一个FTP服务器和多个FTP客户端。FTP客户端通过FTP协议在服务器上下载资源。
#2.SFTP协议
sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口为22。
#建议:更高的效率使用FTP协议,更安全的通信使用SFTP协议。
sftp通过使用加密/解密技术来保障传输文件的安全性,因此sftp的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。
#1.查看openssh版本:版本需大于4.8
[root@prd-db01 ~]$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
#1.使用root用户创建用户组,组名为sftpuser_vivaki;创建sftp用户,用户名为sftpuser_vivaki,并设置密码
[root@prd-db01 ~]$ groupadd sftpuser_vivaki // 创建sftp组
[root@prd-db01 ~]$ useradd -g sftpuser_vivaki -M -s /sbin/nologin sftpuser_vivaki //-M 表示创建用户时不生成对应home目录,-s /sbin/nologin 表示sftp用户不能登录系统
[root@prd-db01 ~]$ passwd sftpuser_vivaki // 修改sftp用户密码
[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/%u
#指定sftp命令
ForceCommand internal-sftp
#这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
X11Forwarding no
AllowTcpForwarding no
#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
#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
是目录权限导致了该问题。
原文:https://www.cnblogs.com/jhno1/p/14805581.html