美文网首页
sftp的简易配置及使用

sftp的简易配置及使用

作者: 冬日大草原的黄昏 | 来源:发表于2019-07-07 20:16 被阅读0次

    Sftp搭建与配置

    1. 介绍
      sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
    2. sftp搭建
      1.查看openssl的版本
    ssh -V
    *使用ssh –V命令来查看openssh的版本,版本必须大于4.8p1,低于这个版本需要升级。
    

    2.创建sftp组,用户管理

    groupadd sftp
    

    3.创建一个sftp用户,用户名为www,密码为123

    useradd –g sftp –s /bin/false www   //该用户不能通过sshd登陆到系
    统(禁止ssh  www@IP登录到主机)
    passwd www    //为用户修改密码,用户可在终端通过该用户名和密码登录到sftp。
    

    4.sftp组的用户的home目录统一指定到/sftp下,按用户名区分,这里先新建一个用于测试的目录,然后指定www的home为/sftp/www

    mkdir -p /sftp/www
    usermod –d /sftp/www  www
    

    5.配置sshd_config

    vim /etc/ssh/sshd_config
    

    找到如下这行,用#符号注释掉。

    # Subsystem      sftp    /usr/libexec/openssh/sftp-server
    在文件最后面添加如下几行内容,然后保存。
    Subsystem       sftp    internal-sftp
    //配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。值是一个子系###统的名字和对应的命令行(含选项和参数)。比如"sftp /usr/libexec/openssh/sftp-server"。这里配置为内部的
    Match Group sftp                      
    //限定只有sftp组的才能访问
    ChrootDirectory /sftp/%u
    //设定属于用户组sftp的用户访问的根文件夹,%u代表用户名 ,这样用户就只能在/sftp/%u下活动。
    ForceCommand    internal-sftp
    //为什么用 internal-sftp 而不用默认的 sftp-server,这是因为:这是一个进程内的 sftp 服务,当用户 ChrootDirectory 的时候,将不请求任何文件;更好的性能,不用为 sftp 再开一个进程。
    //强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录###shell执行(shell -c)。这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。###这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。
    AllowTcpForwarding no  
    //是否允许TCP转发,默认值为"yes", 禁止TCP转发并不能增强安全性,除非禁止了用户###对shell的访问,因为用户可以安装他们自己的转发器。
    X11Forwarding no        
    //是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。
    如果启用了 UseLogin ,那么X11转发将被自动禁止。
    

    6.设定Chroot目录权限

    chown root:sftp  /sftp  //主为root,属组为sftp,这是各个用户所在的第一级目录,即根目录,根目录的所有者应该为root,其他用户没有权限
    chmod 755 /sftp/www
    

    7.建立SFTP用户登入后可写入的目录
    照上面设置后,在重启sshd服务后,用户www已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供www用户上传文件。这个目录属主为www,属组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:

    mkdir /sftp/www/upload
    chown www:sftp /sftp/www/upload
    chmod 755 /sftp/www/upload
    

    8.重启sshd服务

    service sshd restart
    

    此后若需新建用户,按以下命令操作:

    mkdir  /sftp/用户名
    useradd -g  sftp  -d  /sftp/用户名/  -s /bin/false  用户名
    chown  用户名:sftp  /sftp/用户名
    chmod  755  /sftp/用户名
    

    注:修改sshd_config文件后重启 sshd,报错:Directive 'UseDNS' is not allowed within a Match block
    语法错误,原因未知,只需要把两段配置的位置互调就不报错了。
    修改前:

    Subsystem sftp internal-sftp
    UsePAM yes
    Match user sftpuser1
    ForceCommand internal-sftp
    ChrootDirectory /data/wwwroot/user1/
    ​
    UseDNS no
    AddressFamily inet
    PermitRootLogin yes
    SyslogFacility AUTHPRIV
    PasswordAuthentication yes
    

    修改后:

    UseDNS no
    AddressFamily inet
    PermitRootLogin yes
    SyslogFacility AUTHPRIV
    PasswordAuthentication yes
    ​
    Subsystem sftp internal-sftp
    UsePAM yes
    Match user sftpuser1
    ForceCommand internal-sftp
    ChrootDirectory /data/wwwroot/user1/
    

    连接方法

    客户端 :

    sftp  -o port=40022   www@IP  登录即可。
    

    浏览器:

    sftp://+IP:40022
    

    相关文章

      网友评论

          本文标题:sftp的简易配置及使用

          本文链接:https://www.haomeiwen.com/subject/nnuihctx.html