Linux 系统配置使用 SFTP

编辑
  • 文档创建者:Vic.zhang
  • 浏览次数:1178次
  • 编辑次数:9次
  • 1. 前言

    SFTP 是 Secure File Transfer Protocol 的缩写,中文名为”安全文件传送协议“,可以为文件传输提供一种安全的加密方法,与 FTP 有着几乎一样的语法和功能。SFTP 为 SSH 的一部分,其本身并没有单独的守护进程,它必须使用 sshd 守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP 并不像一个服务器程序,而更像是一个客户端程序。SFTP 同样是使用加密传输认证信息和传输数据,所以,使用 SFTP 是非常安全的。

    注意:由于 SFTP 的传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多。

    2. 配置 SFTP

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

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

    2.2 建立用户组和用户

    建立一个专门管理 SFTP 用户的用户组,方便我们管理权限(如果 root 用户可用,则 SFTP 只需要保证 22 端口可用即可)

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

    然后连续两次输入你要给该用户设置的密码即可。

    #如果该用户已存在,但是不在 sftp-users 组中,可以移动用户到该组:usermod –g sftp_users admin #

    2.3 配置 SSH 和权限

    1)打开/etc/ssh/sshd_config 文件

    vi /etc/ssh/sshd_config

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

    3)修改Subsystem sftpinternal-sftp

    Subsystem sftp /usr/libexec/openssh/sftp-server
    # 或者
    Subsystem sftp /usr/lib/openssh/sftp-server

    现在修改为:

    internal-sftp /usr/libexec/openssh/sftp-server
    # 或者
    internal-sftp /usr/lib/openssh/sftp-server

    4)在文件末尾增加内容:

    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,现在来修改权限.

    1)修改权限为 root 用户拥有

    chown root /home/admin

    2)修改权限为 root 可读写执行,其它用户可读

    chmod 755 /home/admin

    3)重启 SSH,登录 SFTP

    sudo service sshd restart

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

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

    4)在用户目录下建立子目录,让 sftp-users 中的用户可读写文件

    /home/admin目录下新建一个 upload 文件夹

    cd /home/admin/
    mkdir upload

    5)授权 upload 文件夹读写

    chown admin /home/admin/upload #让子文件夹 upload 属于 admin
    chmod 755 /home/admin/upload #让子文件夹 upload 被 admin 读写

    6)重启 SSH,登录 SFTP,现在全部都配置完了,如果在上面第 3 步没有重启 SSH 的话,现在重启后即可以登录使用了

    sudo service sshd restart

    CentOS7.x 的系统如果执行上面这个命令提示不存在,执行

    sudo systemctl restart sshd

    3. 使用 SFTP

    3.1 拷贝 WEB-INF

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

    在平台开启文件服务器时,选择 SFTP,并且 SFTP 路径填写/upload/WEB-INF。(注意路径写对)

    3.2 测试是否成功

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

    4.运维知识

    4.1 常用命令

    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 的操作,即可解决。

    附件列表


    主题: 部署集成
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]