Loading

Sftp配置

5.1、sftp简介:

1、sftp是Secure FileTransferProtocol的缩写,安全文件传送协议,可以为传输文件提供一种安全的加密方法。

(1)sftp 与 ftp 有着几乎一样的语法和功能

(2)SFTP 为 SSH的一部分,是一种传输文件至服务器的安全方式

(3)SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作

(4)SFTP安全性非常高

(5)SSH软件已经包含SFTP安全文件传输子系统


2、sftp和ftp是两种不同的文件传输协议,sftp是基于ssh协议的加密ftp传输协议,是作为SSH2的一个子服务工

作的,只要sshd服务器启动了它就可用。vsftpd是一款ftp服务器,支持ftp协议,不支持sftp协议。


3、基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,

如直接修改代码、系统配置等,希望能限制开发人员ssh登录机器,但是通过ftp/sftp上传代码文件。


4、Sftp参数说明:

在/etc/ssh/sshd_config配置文件末尾追加的配置:

Match User dev01

#匹配用户,如果要匹配多个用户,多个用户之间用逗号分割

ChrootDirectory /sftp/developer

#指定登陆用户到自己的用户目录

ForceCommand internal-sftp

#指定 sftp 命令

X11Forwarding no

AllowTcpForwarding no

#不允许用户能使用端口转发

PasswordAuthentication yes

#使用密码验证


5、常见问题:

如果你链接服务器的时候出现下面的提示:

错误: Network error: Software caused connection abort

错误: 无法连接到服务器

(1)这个问题的原因是ChrootDirectory的权限问题,所以请确保sftp用户从根目录开始一直往上到系统根目录

为止的目录权限是755,所有人是root,用户组可以不是 root。

(2)如果属组或者其他用户需要上传文件,可以在FTP的根目录下创建个上传文件夹,这个文件夹权限可以根据

实际情况修改。


5.2、需求:

有个开发组sftp,这个组中有两个用户,dev01、dev02。其中dev01对"/sftp/developer/upload_dir"文件夹中

的内容有所有的权限。dev02只能查看、下载"/sftp/developer/upload_dir"文件夹中的内容。不属于sftp组的用

户查看不到任何信息。


5.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 来完成。


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

1、创建sftp组:

[root@slavenode1 ~]# groupadd sftp


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


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.5、配置Sftp:

[root@slavenode1 ~]# vim /etc/ssh/sshd_config


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用户的行为。


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


3、解决ssh连接慢的问题:

GSSAPIAuthentication no

UseDNS no

#关闭ssh连接时的DNS解析


5.6、重启ssh服务(即重启Sftp服务):

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


5.7、测试:

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

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)删除内容:


#删除内容成功


2、使用dev02用户登陆:

(1)连接服务器:



(2)内容操纵:

1)

2)

3)









posted @ 2021-04-26 13:02  云起时。  阅读(1868)  评论(0编辑  收藏  举报