Shell:setfacl缩小普通用户的权限

  • 简介

  • 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现用户无法正常登陆,并且可能会影响某些需要普通用户权限运行的程序,后发现通过setfacl可准确无误的实现该需求,安全可靠;另外,如果想保留普通用户下载文件的权限,可以在如下脚本中去除sz命令的控制,尽让普通用户使用sz下载相关文件,从而实现更严格的控制;现在将实现脚本分享给大家,希望对小伙伴们有所帮助。
  • 效果展示

  • 修改权限后的sftp-server服务的acl权限查看

  • xftp已经无法打开相关文件夹

  • 脚本setCommonSetFacl-comm.sh

    cat > setCommSetFacl-comm.sh <<"EOF"
    #!/bin/bash
    # 
    # 用法:将需要去除普通用户权限的命令写到comgroup,以:分割,comgroup,sergroup同样
    # 使用ansible批量修改,例如: ansible all -m script -a "setCommSetFacl-comm.sh"
    #
    #用户列表
    usergroup=dev:dba:test
    #命令列表
    comgroup=wget:scp:ftp:sftp:sfdp:rz:sz:curl:rcp:rsync
    #服务列表
    sergroup=sftp-server
     
    #用户个数
    declare -i numOfUser=`echo $usergroup | awk -F: '{ print NF }'`
    #命令个数
    declare -i numOfCom=`echo $comgroup | awk -F: '{ print NF }'`
    #服务个数
    declare -i numOfSer=`echo $sergroup | awk -F: '{ print NF }'`
     
    #遍历每一个用户
    for J in `seq 1 $numOfUser`; do
        user=`echo $usergroup | cut -d: -f$J`
         
        #遍历每一个命名
        for I in `seq 1 $numOfCom`; do
            comm=`echo $comgroup | cut -d: -f$I`
            Dir=`which $comm`
            #使用setfacl,限制该用户的访问权限
            setfacl -m u:$user:r $Dir
        done
         
        #遍历每一服务
        for I in `seq 1 $numOfSer`; do
                ser=`echo $sergroup | cut -d: -f$I`
            #关闭服务
            pkill $ser
                Dir=`find / -name $ser`
            #使用setfacl,限制该服务访问权限
                setfacl -m u:$user:r $Dir
        done
    done
    EOF
  • 调用方法,这里使用ansible

    ansible all -m script -a "setCommSetFacl-comm.sh"
posted @ 2018-05-18 16:18  Williams_Guozi  阅读(569)  评论(0编辑  收藏  举报
本站总访问量 本站总访客量人次 本博客总访问量