• SFTP+OpenSSH+ChrootDirectory设置


    账户设置

    SFTP的账户直接使用Linux操作系统账户,我们可以用useradd命令来创建账户。

    首先建立3个要管理的目录:

     
    1
    2
    3
    
    mkdir /home/sftp/homepage
    mkdir /home/sftp/blog
    mkdir /home/sftp/pay

    创建sftp组和www、blog、pay账号,这3个账号都属于sftp组:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    groupadd sftp 
    useradd -M -d /home/sftp -G sftp www
    useradd -M -d /home/sftp/blog -G sftp blog
    useradd -M -d /home/sftp/pay -G sftp pay
     
    # 将blog账户也加到apache组
    useradd -M -d /home/sftp/blog -G apache blog
     
    #设置3个账户的密码密码
    passwd www
    passwd blog
    passwd pay

    至此账户设置完毕。

    SSH设置

    首先要升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。

    设置sshd_config。通过Chroot限制用户的根目录。

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    vim /etc/ssh/sshd_config
    #注释原来的Subsystem设置
    Subsystem   sftp    /usr/libexec/openssh/sftp-server
    #启用internal-sftp
    Subsystem       sftp    internal-sftp
    #限制www用户的根目录
    Match User www
        ChrootDirectory /home/sftp
        ForceCommand    internal-sftp
    #限制blog和pay用户的根目录
    Match Group sftp
        ChrootDirectory %h
        ForceCommand    internal-sftp

    完成这一步之后,尝试登录SFTP:

     
    1
    2
    3
    4
    5
    6
    
    sftp www@abc.com
    #或者
    ssh www@abc.com
    #如果出现下面的错误信息,则可能是目录权限设置错误,继续看下一步
    #Connection to abc.com closed by remote host.
    #Connection closed

    权限设置

    要实现Chroot功能,目录权限的设置非常重要。否则无法登录,给出的错误提示也让人摸不着头脑,无从查起。我在这上面浪费了很多时间。

    目录权限设置上要遵循2点:

    1. ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
    2. ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。

    如果不能遵循以上2点,即使是该目录仅属于某个用户,也可能会影响到所有的SFTP用户。

     
    1
    2
    
    chown root.root /home/sftp /home/sftp/homepage /home/sftp/blog /home/sftp/pay
    chmod 755 /home/sftp /home/sftp/homepage /home/sftp/blog /home/sftp/pay

    由于上面设置了目录的权限是755,因此所有非root用户都无法在目录中写入文件。我们需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。以homepage目录为例:

     
    1
    2
    3
    
    mkdir /home/sftp/homepage/web
    chown www.sftp /home/sftp/homepage/web
    chmod 775 /home/sftp/homepage/web

    要实现web服务器与blog账户互删文件的权限需求,需要设置umask,让默认创建的文件和目录权限为775即可。将下面的内容写入.bashrc中:

     
    1
    
    umask 0002

    至此,我们已经实现了所有需要的功能。

    总结:

    1  ChrootDirectory 的所有父目录的权限最高只能是755 ,否则会抛出下述错误!

    Read from remote host 172.16.xx.xxx: Connection reset by peer

    Couldn't read packet: Connection reset by peer

    2 SFTP Permission denied处理

    com.jcraft.jsch.SftpException: Permission denied

    问题的原因是,SFTP服务器的SELINUX没关闭。

    解决办法:

    查看SELINUX的配置:getenforce

    关闭SELINUX:setenforce 0

    from: http://www.cnblogs.com/buffer/p/3191540.html

    from: http://www.oracleonlinux.cn/2016/11/how_to_config_sftp_on_linux/

  • 相关阅读:
    Long类型在前端丢失精度
    Spring Event事件通知
    el-drawer去除自带黑色边框、允许滚动
    XSS攻击
    入门1:nodejs类比Java中:JVM
    https的crt和key证书
    C#如何定制Excel界面并实现与数据库交互
    数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库
    写代码同写文章一样
    操作笔记
  • 原文地址:https://www.cnblogs.com/wish123/p/7071317.html
Copyright © 2020-2023  润新知