欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Centos7搭建SFTP

程序员文章站 2022-05-10 19:56:56
...

一、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)连接服务器:

Centos7搭建SFTP

Centos7搭建SFTP

Centos7搭建SFTP

 

(2)上传内容:

Centos7搭建SFTP

#在服务器中查看

[aaa@qq.com ~]# ls -l /sftp/developer/upload_dir/

总用量 0

drwxr-xr-x 2 dev01 sftp 150 5月  26 17:04 照片

 

(3)删除内容:

Centos7搭建SFTP

#删除内容成功

 

7.2、使用dev02用户登陆:

(1)连接服务器:

Centos7搭建SFTP

Centos7搭建SFTP

(2)内容操纵:

1)

Centos7搭建SFTP

2)

Centos7搭建SFTP

3)

Centos7搭建SFTP