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

  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/whatmiss/p/7068772.html
Copyright © 2011-2022 走看看