• centos v7.0配置sftp


    需求:

    1.建立三个sftp帐号,admin,test1,test2
    2.三个帐号分别在/home/sftp下拥有相应的目录
    3.test1和test2只能进入自己的目录,admin可以进入三个目录(chown,chmod和ACL)
    4.各自目录所有者和所有者组权限继承
    5.test1和test2进入自己目录后可以进行读写操作,但是不能删除;admin进入三个目录都可以进行读写和删除操作(删除权限可以使用chattr +a或者设置sticky bit,但是并不能完全满足需求)

    首先要升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot
    1.查验openssh版本
    [root@localhost ~]# ssh -V
    OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

    2.建立相应目录
    [root@localhost ~]# mkdir /home/sftp
    [root@localhost ~]# mkdir /home/sftp/admin
    [root@localhost ~]# mkdir /home/sftp/test1
    [root@localhost ~]# mkdir /home/sftp/test2

    3.创建帐号和组,同时修改密码
    [root@localhost ~]# groupadd sftp
    [root@localhost ~]# useradd -d /home/sftp/test1 -M -s /sbin/false test1
    [root@localhost ~]# useradd -d /home/sftp/test2 -M -s /sbin/nologin test2
    [root@localhost ~]# useradd -d /home/sftp/admin -M -s /sbin/nologin -g sftp admin
    [root@localhost ~]# usermod -a -G sftp test1
    [root@localhost ~]# usermod -a -G sftp test2
    [root@localhost ~]# passwd admin
    [root@localhost ~]# passwd test1
    [root@localhost ~]# passwd test2

    -d是把用户目录限制的自定义的目录,-M是不自动创建用户目录,-s是进行登录shell指定(/bin/false和sbin/nologin的区别暂不得知)

    4.修改配置文件,同时重启ssh服务让其生效
    [root@localhost ~]# vim /etc/ssh/sshd_config
    Subsystem sftp internal-sftp
    Match User admin,test1,test2
    ChrootDirectory /home/sftp
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
    [root@localhost ~]# systemctl reload sshd.service

    5.设置/home/sftp的权限
    [root@localhost ~]# chown root:root /home/sftp
    [root@localhost ~]# chmod 755 /home/sftp

    6.为三个文件夹设置所有者和组,已经设置权限(使得admin可以访问三个文件夹,test1和test2只能访问各自文件夹)
    [root@localhost ~]# chown admin:sftp /home/sftp/test1
    [root@localhost ~]# chown admin:sftp /home/sftp/test2
    [root@localhost ~]# chown admin:sftp /home/sftp/admin
    [root@localhost ~]# chmod 770 /home/sftp/test1
    [root@localhost ~]# chmod 770 /home/sftp/test2
    [root@localhost ~]# chmod 700 /home/sftp/admin

    7.可以通过ACL限制权限(test2不能访问test1的文件夹,test1不能访问test2的文件夹)
    [root@localhost ~]#setfacl -m u:test2:- /home/sftp/test1
    [root@localhost ~]#setfacl -m u:test1:- /home/sftp/test2

    8.关于删除权限,不使用脚本的情况下,有以下两种方案,但是仍无法完全满足需求
    第一种方案(chattr +a)
    chattr +a 文件夹名:只能增加数据,而不能删除
    chattr +i 文件夹名:不能被删除、改名、设定连结也无法写入或新增数据

    第二种方案(chmod o+t)
    chmod o+t 文件夹名:添加sticky-bit,使得这个文件只可以由超级管理员,该目录的所有者,该文件的所有者删除

    9.如果需要实现admin可以对三个文件夹进行删除操作,test1和test2不能删除的话,需要使用脚本

    a.首先设置文件可执行
    chmod a+x test1.sh
    chmod a+x test1.sh

    b.然后分别设置脚本文件如下
    test1.sh
    #!/bin/sh
    while inotifywait -e create /home/sftp/test1;do
    chown -R admin:sftp /home/sftp/test1
    chmod -R 1770 /home/sftp/test1
    done

    test2.sh
    #!/bin/sh
    while inotifywait -e create /home/sftp/test2;do
    chown -R admin:sftp /home/sftp/test2
    chmod -R 1770 /home/sftp/test2
    done

    c.后台运行shell同时忽略shell退出
    nohup ./test1.sh &
    nohup ./test2.sh &

    10.使用inotify的方式,有个很致命的缺陷,无法监控子目录的任何操作,所以后面进行修改为如下脚本(定时执行chmod和chown)

    #!/bin/sh
    while [ true ]; do
    sleep 1
    chown -R admin:sftp /home/sftp/test1
    chmod -R 1770 /home/sftp/test1
    chown -R admin:sftp /home/sftp/test2
    chmod -R 1770 /home/sftp/test2
    done

  • 相关阅读:
    【iPhone开发】说说Xcode4中xib绑定的原理转
    转 IOS下的图片
    免证书调试Iphone程序(转)
    牛B的Python模块(转)
    6 个手机开发方面很有用的应用
    留个脚印!
    Android初学者入门PDF版
    IOS下的MVC
    android2.2源码编译-Ubuntu10.04 (X86) + android2.2 + JDK1.6
    10 款 Windows 下最佳的免费 PHP 编辑器
  • 原文地址:https://www.cnblogs.com/wolfinchina/p/4786261.html
Copyright © 2020-2023  润新知