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软件包了。

[root@slavenode1 ~]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

[root@slavenode1 ~]# rpm -qa openssh-server openssh-clients

openssh-clients-7.4p1-16.el7.x86_64

openssh-server-7.4p1-16.el7.x86_64

[root@slavenode1 ~]# ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

#注:openssh-server 版本至少得 4.8p1, 因为配置权限需要版本添加的新配置项 ChrootDirectory 来完成。

 

4、创建用户和ftp文件夹:

4.1、创建sftp组:

[root@slavenode1 ~]# groupadd sftp

4.2、创建dev01、dev02、用户:

[root@slavenode1 ~]# useradd -g sftp -M -s /bin/false dev01

[root@slavenode1 ~]# useradd -g sftp -M -s /bin/false dev02

#设置密码

[root@slavenode1 ~]# echo "dev01" | passwd --stdin dev01

[root@slavenode1 ~]# echo "dev02" | passwd --stdin dev02

4.3、创建"/sftp/developer/upload_dir/"目录并授权:

[root@slavenode1 ~]# mkdir -p /sftp/developer/upload_dir/

[root@slavenode1 ~]# chown dev01.sftp /sftp/developer/upload_dir/

[root@slavenode1 ~]# chmod 750 /sftp/developer/upload_dir/

[root@slavenode1 ~]# ls -ld /sftp/developer/upload_dir/

drwxr-x--- 3 dev01 sftp 20 5月  26 16:41 /sftp/developer/upload_dir/

5、配置Sftp:

[root@slavenode1 ~]# 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服务):

[root@slavenode1 ~]# systemctl restart sshd.service

 

7、测试:

我这里使用ftp开源连接工具FileZilla进行测试。

7.1、使用dev01用户登陆:

(1)连接服务器:

 

(2)上传内容:

#在服务器中查看

[root@slavenode1 ~]# 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)

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值