Centos7搭建SFTP
一、Sftp配置:
1.、sftp简介:
1.1、sftp是Secure FileTransferProtocol的缩写,安全文件传送协议,可以为传输文件提供一种安全的加密方法。
(1)sftp 与 ftp 有着几乎一样的语法和功能
(2)SFTP 为 SSH的一部分,是一种传输文件至服务器的安全方式
(3)SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作
(4)SFTP安全性非常高
(5)SSH软件已经包含SFTP安全文件传输子系统
1.2、sftp和ftp是两种不同的文件传输协议,sftp是基于ssh协议的加密ftp传输协议,是作为SSH2的一个子服务工
作的,只要sshd服务器启动了它就可用。vsftpd是一款ftp服务器,支持ftp协议,不支持sftp协议。
1.3、基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,
如直接修改代码、系统配置等,希望能限制开发人员ssh登录机器,但是通过ftp/sftp上传代码文件。
1.4、Sftp参数说明:
在/etc/ssh/sshd_config配置文件末尾追加的配置:
Match User dev01
#匹配用户,如果要匹配多个用户,多个用户之间用逗号分割
ChrootDirectory /sftp/developer
#指定登陆用户到自己的用户目录
ForceCommand internal-sftp
#指定 sftp 命令
X11Forwarding no
AllowTcpForwarding no
#不允许用户能使用端口转发
PasswordAuthentication yes
#使用密码验证
1.5、常见问题:
如果你链接服务器的时候出现下面的提示:
错误: Network error: Software caused connection abort
错误: 无法连接到服务器
(1)这个问题的原因是ChrootDirectory的权限问题,所以请确保sftp用户从根目录开始一直往上到系统根目录
为止的目录权限是755,所有人是root,用户组可以不是 root。
(2)如果属组或者其他用户需要上传文件,可以在FTP的根目录下创建个上传文件夹,这个文件夹权限可以根据
实际情况修改。
2、需求:
有个开发组sftp,这个组中有两个用户,dev01、dev02。其中dev01对"/sftp/developer/upload_dir"文件夹中
的内容有所有的权限。dev02只能查看、下载"/sftp/developer/upload_dir"文件夹中的内容。不属于sftp组的用
户查看不到任何信息。
3、sftp软件安装:
#默认情况下linux操作系统安装了 ssh 后,就安装了openssh-server、openssh-clients软件包了。
[aaa@qq.com ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[aaa@qq.com ~]# rpm -qa openssh-server openssh-clients
openssh-clients-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
[aaa@qq.com ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
#注:openssh-server 版本至少得 4.8p1, 因为配置权限需要版本添加的新配置项 ChrootDirectory 来完成。
4、创建用户和ftp文件夹:
4.1、创建sftp组:
[aaa@qq.com ~]# groupadd sftp
4.2、创建dev01、dev02、用户:
[aaa@qq.com ~]# useradd -g sftp -M -s /bin/false dev01
[aaa@qq.com ~]# useradd -g sftp -M -s /bin/false dev02
#设置密码
[aaa@qq.com ~]# echo "dev01" | passwd --stdin dev01
[aaa@qq.com ~]# echo "dev02" | passwd --stdin dev02
4.3、创建"/sftp/developer/upload_dir/"目录并授权:
[aaa@qq.com ~]# mkdir -p /sftp/developer/upload_dir/
[aaa@qq.com ~]# chown dev01.sftp /sftp/developer/upload_dir/
[aaa@qq.com ~]# chmod 750 /sftp/developer/upload_dir/
[aaa@qq.com ~]# ls -ld /sftp/developer/upload_dir/
drwxr-x--- 3 dev01 sftp 20 5月 26 16:41 /sftp/developer/upload_dir/
5、配置Sftp:
[aaa@qq.com ~]# vim /etc/ssh/sshd_config
5.1、将"Subsystem sftp /usr/libexec/openssh/sftp-server"注释掉,在其下方重新添加一行
"Subsystem sftp internal-sftp"
说明:
(1)如果这行文字存在且没有被注释掉,那么SFTP已经开启,所有可使用ssh的用户都可使用SFTP,但是这
种方式有一个缺陷,就是用户在SFTP软件里面可以cd / 从而看到系统所有文件。
(2)使用internal-sftp的好处:
1)性能更好,在连接sftp的时候,系统不会fork出一个新的sftp进程,可使用ps -e | grep sftp命令查看sftp
进程。
2)可以在ssh的配置文件/etc/ssh/sshd_config中,使用ChrootDirectory,Match,ForceCommand等指
令来限制登录sftp用户的行为。
5.2、在配置文件的末尾追加如下内容:
(1)dev01用户:
Match User dev01
ChrootDirectory /sftp/developer
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
(2)dev02用户:
Match User dev02
ChrootDirectory /sftp/developer
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
5.3、解决ssh连接慢的问题:
GSSAPIAuthentication no
UseDNS no
#关闭ssh连接时的DNS解析
6、重启ssh服务(即重启Sftp服务):
[aaa@qq.com ~]# systemctl restart sshd.service
7、测试:
我这里使用ftp开源连接工具FileZilla进行测试。
7.1、使用dev01用户登陆:
(1)连接服务器:
(2)上传内容:
#在服务器中查看
[aaa@qq.com ~]# ls -l /sftp/developer/upload_dir/
总用量 0
drwxr-xr-x 2 dev01 sftp 150 5月 26 17:04 照片
(3)删除内容:
#删除内容成功
7.2、使用dev02用户登陆:
(1)连接服务器:
(2)内容操纵:
1)
2)
3)
上一篇: Linux体系结构
下一篇: Mac彻底卸载搜狗输入法,看这一篇就够了