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 

  • 相关阅读:
    SqlServer事务日志满的解决方案
    关于.net反射和metadata加载致Jeffray Zhao等几位和firelong
    Context Root选/的原则
    [继续讨论]关于Windows PE和.net assembly的加载
    有趣的重写GetType()方法
    对Wintercn关于函数式编程的文章评论
    The experience to config Cisco 2811 for VOIP
    关于c#静态方法和实例方法的辨析和应用
    防止刷新时,密码输入框中的信息丢失
    计算百分比 JS
  • 原文地址:https://www.cnblogs.com/lpfuture/p/5602644.html
Copyright © 2011-2022 走看看