zoukankan      html  css  js  c++  java
  • Linux(CentOS)上配置 SFTP(附解决Write failed: Broken pipe Couldn't read packet: Connection reset by peer)

    #创建sftp组:

    groupadd sftp

    #创建一个用户sftpuser:

    useradd -g sftp -s /bin/false sftpuser

    #提示:

    /etc/group      文件包含所有组
    /etc/shadow    /etc/passwd    系统存在的所有用户名

    #设置sftpuser用户的密码,会要求你输入两次密码确认:

    passwd sftpuser

    #创建一个sftp的上传目录:

    mkdir /datas/www

    #修改用户sftpuser所在的目录:

    usermod -d /datas/www sftpuser

    #配置sshd_config:

    vi /etc/ssh/sshd_config
    
    #找到如下这行,并注释掉
    #Subsystem sftp /usr/libexec/openssh/sftp-server
    #添加如下几行(如果添加之后出现问题,则添加到最后)
    Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp
    Match User sftpuser #这行用来匹配用户
    ChrootDirectory /datas/www  #用chroot将用户的根目录指定到/datas/www ,这样用户就只能在/datas/www下活动
    AllowTcpForwarding no
    ForceCommand internal-sftp #指定sftp命令
    为什么用 internal-sftp 而不用默认的 sftp-server,这是因为: 
    这是一个进程内的 sftp 服务,当用户 ChrootDirectory 的时候,将不请求任何文件;
    更好的性能,不用为 sftp 再开一个进程。
    

    #保存退出

    #设定Chroot目录权限:

    chown -R root:root /datas/www
    chmod 755 /datas/www

    #建立SFTP用户登入后可写入的目录:

    mkdir /datas/www/sftpuser
    chown -R sftpuser:sftp /datas/www/sftpuser/
    chmod 755 /datas/www/sftpuser/

    #重启sshd服务:

    service sshd restart

    #测试是否能正常登陆:

    sftp -P 22122 ftpuser@127.0.0.1    

    #关闭SElinux:

    vi /etc/sysconfig/selinux
    
    #找到如下这行 
    SELINUX=enforcing
    
    #修改为
    SELINUX=disabled

    #保存退出

    #这里讨论了为什么要关闭这功能:https://www.zhihu.com/question/20559538

     

    常见问题:

    1、修改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/

    参考资料:http://www.cnblogs.com/xjnotxj/p/6912471.html

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

    > Write failed: Broken pipe     
    > Couldn't read packet: Connection reset by peer

    这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:

    • 目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。

    • 目录开始一直往上到系统根目录为止都不可以具有群组写入权限 

    • 上面2点一定注意,仔细检查。我就是因为这个问题,导致一直有这个问题。仔细检查配置后,解决问题。

    参考资料:

    https://segmentfault.com/a/1190000008578734

    http://www.cnblogs.com/kgdxpr/p/3623369.html

    http://blog.csdn.net/xinxin19881112/article/details/46831311

  • 相关阅读:
    raise PDFEncryptionError('Unknown algorithm: param=%r' % param) pdfminer.pdfdocument.PDFEncryptionError: Unknown algorithm
    Hive与Hbase的区别
    HIVE—索引、分区和分桶的区别
    MapReduce编程之Semi Join多种应用场景与使用
    MapReduce编程之Map Join多种应用场景与使用
    MapReduce编程之Reduce Join多种应用场景与使用
    Mapreduce——视频播放数据分类统计
    Docker-compose实战——Django+PostgreSQL
    Docker基础教程
    1.node接口搭建--express搭建服务器
  • 原文地址:https://www.cnblogs.com/whatmiss/p/7068772.html
Copyright © 2011-2022 走看看