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

news/2024/7/8 11:45:38
  • 简介

  • 我们在使用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"

转载于:https://www.cnblogs.com/William-Guozi/p/Shell_setfacl.html


http://www.niftyadmin.cn/n/3280957.html

相关文章

git 使用(二)

查看文件diff git diff # 比较当前文件和暂存区文件差异 git diff git diff # 比较两次提交之间的差异 git diff .. # 在两个分支之间比较 git diff –staged # 比较暂存区和版本库差异 git diff –cached # 比较暂存区和版本库差异 git diff –stat # 仅仅比较统计信息查…

Flask 快速入门

基于Python2.7的web框架&#xff0c;可以快速搭建后台服务器实现一些命令模拟操作 我之前用的命令 sudo pip install flask-login https://blog.csdn.net/u011054333/article/details/70151857转载于:https://www.cnblogs.com/-WML-/p/9057241.html

QtConcurrent Qt处理多线程

先学下单词&#xff0c;&#xff1a; concurrent 并发 有道词典结果n. [数] 共点&#xff1b;同时发生的事件 adj. 并发的&#xff1b;一致的&#xff1b;同时发生的 这个QtConcurrent的命名控件提供了可以用来实现程序多线程的高级api&#xff0c; 而不用使用低级的线程的原始…

(1)线程的常用方法 (2)线程的同步机制 (3)网络编程的常识

1.线程的常用方法 static void sleep(long millis) - 用于使得当前正在执行的线程进入休眠状态&#xff0c;休眠参数指定的毫秒(重点)。 static void sleep(long millis, int nanos) - 用于休眠参数指定的毫秒纳秒&#xff0c;1秒1000毫秒 1毫秒1000微秒 1微秒1000纳秒 int g…

QFuture 类 Qt 控制线程

QFuture类能够获取一个一步计算的结果。 通过使用这个 Qt Concurrent 框架内的一个api来开始一次计算。 它可以用允许多个线程同步一个或多个结果在稍后的一段时间内计算完成。这个结果可以是任意一种类型&#xff0c;这个类型有默认的构造函数和拷贝构造函数。如果通过调用…

QFutureWatcher

QFutureWatcher 可以用来监测 QFuture 正在使用的信号和槽. QFutureWatcher 提供了关于 QFuture的信息和通知. 通过使用setFuture() 就可以开始监测 QFuture. future() 将会返回 future. 为了方便使用, 一些 QFuture 的函数也还是可以访问的。 QFutureWatcher: progressVal…

Java并发(零)教程目录

上网看博客的时候无意中发现了有一个Java并发的教程还不错&#xff0c;有20多篇讲并发的&#xff0c;一天翻译1篇似乎也不太难。Lets go!原文地址&#xff1a;http://tutorials.jenkov.com/java-concurrency/index.html下面是目录&#xff1a;Java Concurrency / Multithreadin…

记一次计算机网络作业

Telnet远程登录计算机网络实验 实验设备和环境&#xff1a; Win10 64位PC 安装了Wireshark软件和VMware软件&#xff0c;VMware中有Red Hat Linux虚拟机。相当于有两台主机&#xff0c;为了区分两台主机下文中称Windows宿主机为Windows&#xff0c;称虚拟机Red Hat为Linux。 实…