历史版本14 :Linux系统配置使用SFTP 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

SFTP 是 Secure File Transfer Protocol 的缩写,中文名为安全文件传送协议,可以为文件传输提供一种安全的加密方法,与 FTP 有着几乎一样的语法和功能。

SFTP 为 SSH 的一部分,其本身并没有单独的守护进程,它必须使用 sshd 守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP 并不像一个服务器程序,而更像是一个客户端程序。注意:由于 SFTP 的传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多。

2. 配置 SFTP编辑

2.1 使用 root 用户查看 OpenSSH 的版本

输入命令:

ssh -V  # 版本需大于 4.8p1,如果版本过低,需要及时进行更新

如下图所示:

1592448740572912.png

2.2 建立用户组和用户

1)建立一个专门管理 SFTP 用户的用户组,方便管理权限(如果 root 用户可用,则 SFTP 只需要保证 22 端口可用即可),语法如下所示:

sudo groupadd sftp-users   # 建立一个名为sftp-users的 SFTP 用户组
sudo useradd -g sftp-users -m admin   # 在该组建立需要登录 SFTP 的用户,新建用户名为 admin 的用户
passwd admin   # 设置 admin 的密码

如下图所示:

1592449125920156.png

2)连续两次输入要给该用户设置的密码即可。

如果该用户已存在,但是不在 sftp-users 组中,可以移动用户到该组,执行命令:

usermod –g sftp_users admin

2.3 配置 SSH 和权限

打开 /etc/ssh/sshd_config 文件,命令如下所示:

vi /etc/ssh/sshd_config

2.3.1 修改配置

1)修改X11Forwarding的值为no

原来可能是:X11Forwarding yes,现在修改为 X11Forwarding no ,如果 X11Forwarding 不存在,就在文件最后添加上面的代码。

修改AllowTcpForwarding的值为no

原来可能是 AllowTcpForwarding yes,现在修改为 AllowTcpForwarding no,如果 AllowTcpForwarding 不存在,就在文件最后添加上面的代码。

修改 Subsystem sftp /usr/libexec/openssh/sftp-server 为 Subsystem sftp internal-sftp ,如下图所示:

337.png

2)在文件末尾增加内容并保存文件:

Match Group sftp-users  #这一行是指定以下的子行配置是匹配 sftp-users 用户组的,多个用户组用英文逗号分隔
ChrootDirectory %h  #该行指定 Match Group 行指定的用户组验证后用于 chroot 环境的路径,%h是默认的用户目录,
比如/home/admin;也可写明确路径,例如/data/www
ForceCommand internal-sftp #该行强制执行内部 SFTP,并忽略任何 ~/.ssh/rc 文件中的命令

特别注意,因为 ChrootDirectory %h 模式,所以要设置 sftp-users 中的所有用户的用户目录权限为 root 拥有,否则 sftp-users 组中的用户无法用 SFTP 登录。

2.4 修改 sftp-users 用户组用户目录权限

因为使用了ChrootDirectory %h,因此需要修改权限。

2.4.1 设置 sftp-users 用户组登录权限

设置 sftp-users 中的所有用户目录权限为 root 拥有,此时用户组中用户能用 SFTP 登录。

1)修改权限为 root 用户拥有,如下所示:

chown root /home/admin

2)修改权限为 root 可读写执行,其它用户可读,如下所示:

chmod 755 /home/admin

3)重启 SSH 并登录 SFTP,如下所示:

sudo service sshd restart

如下图所示:

1592454427768619.png

现在就可以使用 SFTP 登录,但是此时不能上传文件,因为登录后默认是用户目录,比如/home/admin,但是该目录是 root 用户拥有,因此还要修改权限。

注:CentOS7 重启 SSH 的命令是 sudo systemctl restart sshd.service,另外可以设置 SSH 为开机启动,命令是 sudo systemctl enable sshd.service。

2.4.2 授予 sftp-users 中用户可读写权限

1)在用户目录下建立子目录,让 sftp-users 中的用户可读写文件,在/home/admin目录下新建一个 upload 文件夹,如下所示:

cd /home/admin/
mkdir upload

2)授权 upload 文件夹读写,让子文件夹 upload 属于 admin ,如下所示:

chown admin /home/admin/upload

3)让子文件 upload 被 admin 读写,如下图所示:

chmod 755 /home/admin/upload

4)重启 SSH,登录 SFTP ,配置完成,如果在 2.4.1 节第 3 步没有重启ssh的话,现在重启后即可以登录使用,重启命令:

sudo service sshd restart

如下图所示:

1592458861313059.png

注:Centos7.x 的系统如果执行 sudo service sshd restart 命令提示不存在,可执行:sudo systemctl restart sshd。

3. 使用 SFTP编辑

3.1 拷贝文件夹

给正式环境 Web 工程里的 WEB-INF 文件夹配置读写权限并拷贝文件夹,粘贴到/home/admin/upload目录下。

注:用户可根据实际情况填写对应的路径。

3.2 填写数据决策系统文件服务器路径

在数据决策系统开启文件服务器时,选择 SFTP,并且 SFTP 路径填写/upload/WEB-INF,如下图所示:

44.png

注:用户可根据实际情况填写对应的路径。

用 ftp 工具连接,比如 Xftp 之类的进行登录 SFTP 用户。新建和删除文件夹确认有读写权限,则表明 SFTP 部署成功,如果测试报错,查看第 5 节 FAQ 文档。

4. 运维知识编辑

service sshd status #查看 sftp 的状态
service sshd start #启动服务
service sshd stop #停止服务
service sshd restart #重启 sftp

注:SFTP 默认是随系统启动而启动的,更多运维知识参见:集群运维手册-Linux 版 。

5. FAQ 文档编辑

5.1 无法上传文件或者无法重启 sshd 服务

参考 Linux 系统安装配置 FTP 中 5.1 关闭 SELinux 的操作,即可解决。