zoukankan      html  css  js  c++  java
  • 用ChrootDirectory限制SFTP登录的用户只能访问指定目录且不能进行ssh登录

    创建不能ssh登录的用户sftpuser1,密码用于sftp登录: 
    sudo adduser sftpuser1 --home /sftp/sftpuser1 --shell /bin/false 
    sudo nano /etc/ssh/sshd_config (执行man sshd_config查看配置说明) 
    Ubuntu/Debian上把Subsystem sftp /usr/lib/openssh/sftp-server 
    Redhat/CentOS上把Subsystem sftp /usr/libexec/openssh/sftp-server 
    修改为 Subsystem sftp internal-sftp 
    并加入: 
    Match User sftpuser1 
        ChrootDirectory /sftp/sftpuser1 
        ForceCommand internal-sftp 
        AllowTcpForwarding no 
        X11Forwarding no 
    注意ChrootDirectory设置的目录/sftp/sftpuser1的所有者必须是root,并且该目录的上级目录/sftp的所有者也必须是root. 
    而且只有所有者拥有写权限,/sftp/sftpuser1和/sftp的权限最大设置只能是755. 
    sudo chown root:root /sftp/sftpuser1 
    sudo service ssh reload 

    由于上面设置了目录的权限是755, 
    因此所有非root用户都无法在目录中写入文件. 
    我们需要在ChrootDirectory指定的目录下建立子目录比如data,重新设置属主和权限. 
    mkdir /sftp/sftpuser1/data 
    chown sftpuser1:sftpuser1 /sftp/sftpuser1/data 
    chmod 755 /sftp/sftpuser1/data 
    这样就可以在读写data目录了. 

    配置好后,用户sftpuser1只能通过sftp访问指定目录,而且不能进行ssh登录: 
    sftp sftpuser1 @127.0.0.1 登录成功,执行 ls -lha / 可见根目录为 /sftp/sftpuser1, 执行cd ..可见无法进入上一层目录. 
    ssh sftpuser1 @127.0.0.1 提示: 
    Could not chdir to home directory /sftp/sftpuser1: No such file or directory 
    This service allows sftp connections only. 
    Connection to 127.0.0.1 closed. 

    把 AllowTcpForwarding no 改为 AllowTcpForwarding yes 表示允许用户进行端口转发, X11Forwarding 含义类似. 
    上面已经实现了端口转发和禁止登录,如果要禁止读写,执行 chmod 000 /sftp/sftpuser1 

  • 相关阅读:
    jdk8:垃圾收集器
    Young GC和Full GC分别在什么情况下会发生?
    GC之Minor/Young/Major GC的区别
    Java的JJWT实现JWT
    什么是 JWT -- JSON WEB TOKEN
    Spring的两种动态代理:Jdk和Cglib 的区别和实现
    java对象结构 对象头 Markword
    偏向锁跟可重入性有什么区别
    C# 加密算法[汇总]
    Java语言:JAVA8 十大新特性详解(zz)
  • 原文地址:https://www.cnblogs.com/lpfuture/p/5602644.html
Copyright © 2011-2022 走看看