Linux ACL 访问控制
今天给伙伴们分享一下Linux ACL 访问控制,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、ACL访问控制概述
-
基础权限
UGO、特殊权限,所有的权限是针对某一类用户设置的, 如果希望对文件进行自定义权限控制,就需要用到文件的访问控制列表ACL -
UGO设置基本权限: 只能一个用户,一个组和其他人
-
ACL设置基本权限: r、w、x 设定
acl只能是root管理员用户. 相关命令:getfacl,setfacl -
getfacl 命令用于查看文件或目录当前设定的 ACL 权限信息。该命令的基本格式为:
[root@edenluo.com ~]# getfacl 文件名
- setfacl 命令可直接设定用户或群组对指定文件的访问权限。此命令的基本格式为:
[root@edenluo.com ~]# setfacl 选项 文件名
- 命令可以使用的所用选项及功能
| 选项 | 功能 |
|---|---|
| -m | 设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 “u:用户名:权限” 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 “g:组名:权限” 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。 |
| -x | 删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。 |
| -b | 删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限。 |
| -d | 设定默认 ACL 权限,命令格式为 “setfacl -m d:u:用户名:权限 文件名”(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:st:rx /project 表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。 |
| -R | 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 “setfacl -m u:用户名:权限 -R 文件名”(群组使用 g:群组名:权限),例如 setfacl -m u:st:rx -R /project 表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。 |
| -k | 删除默认 ACL 权限。 |
acl基本使用方式
环境准备
[root@edenluo.com ~]# cp /etc/passwd /root/passwd文件在没有设定acl, 看到的和传统权限是一样
[root@edenluo.com ~]# ll passwd
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt
使用getacl查看权限
[root@edenluo.com ~]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw- //文件owner权限
group::r-- //文件拥有组权限
other::r-- //其他人权限
1、设定acl权限案例
要求
-rw-r--r-- 1 root root 1380 Feb 27 11:25 passwd
alice 拥有读写权限 rw
edenluo 没有任何权限 -
jack 组拥有读权限 r
匿名用户拥有读写权限 rw
1、建立相关用户
[root@edenluo.com ~]# useradd alice
[root@edenluo.com ~]# useradd edenluo
[root@edenluo.com ~]# useradd jack
增加用户 alice 权限
[root@edenluo.com ~]# setfacl -m u:alice:rw passwd
增加用户 edenluo 权限
[root@edenluo.com ~]# setfacl -m u:edenluo:- passwd
增加匿名用户权限
[root@edenluo.com ~]# setfacl -m o::rw passwd
增加组权限
[root@edenluo.com ~]# setfacl -m g:jack:r passwd
注意: 如果用户同时属于不同的两个组,并且两个组设定了acl访问控制
1、根据acl访问控制优先级进行匹配规则
2、如有用户拥有多个组的权限不同的权限,优先使用最高权限(模糊匹配)
2、查看acl权限
[root@edenluo.com ~]# ll passwd
-rw-rw-rw-+ 1 root root 1531 Jan 26 07:52 passwd
[root@edenluo.com ~]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw-
user:edenluo:---
user:alice:rw-
group::r--
group:jack:r--
mask::rw-
other::rw-
3、移除acl权限
移除jack组的acl权限
[root@edenluo.com ~]# setfacl -x g:jack passwd
移除edenluo.com用户的acl权限
[root@edenluo.com ~]# setfacl -x u:edenluo passwd
移除文件和目录所有acl权限
[root@edenluo.com ~]# setfacl -b passwd//移除默认的acl
[root@edenluo.com ~]# setfacl -k dir
4、查看acl帮助
EXAMPLES 示例
[root@edenluo.com ~]# man setfacl
复制 file1 的 ACL 权限给 file2
[root@edenluo.com ~]# setfacl -m u:alice:rw,u:edenluo:r,g:jack:rw file1
[root@edenluo.com ~]# getfacl file1 |setfacl --set-file=- file2
二、ACL高级特性MASK
mask用于临时降低用户或组的权限,但不包括文件的所有者和其他人。mask最主要的作用是用来决定用户的最高权限。mask默认不会对匿名用户降低权限,所以为了便于管理文件的访问控制,建议匿名用户的权限置为空
临时降低用户或组权限
[root@edenluo.com ~]# setfacl -m mask::rw filename
小结
1、mask会影响哪些用户,除了所有者和其他人。
2、mask权限决定了用户访问文件时的最高权限。(如何影响)
3、mask用于临时降低用户访问文件的权限。(mask做什么)
4、任何重新设置acl访问控制会清理mask所设定的权限。
三、ACL高级特性Default
-
default: 继承(默认)
-
alice能够对/opt目录以及以后在/opt目录下新建的文件有读、写、执行权限
赋予 alice 对/home 读写执行权限
[root@edenluo.com ~]# setfacl -R -m u:alice:rwX /opt
赋予 alice 对以后在/home 下新建的文件有读写执行权限(使 alice 的权限继承)
[root@edenluo.com ~]# setfacl -m d:u:alice:rwX /opt
检查对应的权限
[root@edenluo.com ~]# getfacl /opt/
getfacl: Removing leading '/' from absolute path names
# file: opt/
# owner: root
# group: edenluo.com
user::rwx
user:alice:rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:alice:rwx
default:group::rwx
default:mask::rwx
default:other::rwx
四、ACL访问控制实践案例
- 案例1: 将新建文件的属性修改
tom:admin, 权限默认为644要求:tom对该文件有所有的权限,mary可以读写该文件,admin组可以读写执行该文件,jack只读该文件, 其他人一律不能访问该文件
实验前, 建立几个普通用户
[root@edenluo.com ~]# useradd tom
[root@edenluo.com ~]# useradd bean
[root@edenluo.com ~]# useradd mary
[root@edenluo.com ~]# useradd jack
[root@edenluo.com ~]# useradd sutdent
[root@edenluo.com ~]# groupadd admin
[root@edenluo.com ~]# gpasswd -a mary admin
[root@edenluo.com ~]# gpasswd -a bean admin//检查用户属性
[root@edenluo.com ~]# id tom
uid=1004(tom) gid=1004(tom) groups=1004(tom)
[root@edenluo.com ~]# id mary
uid=1006(mary) gid=1006(mary) groups=1006(mary),1007(admin)
[root@edenluo.com ~]# id bean
uid=1005(bean) gid=1005(bean) groups=1005(bean),1007(admin)
[root@edenluo.com ~]# id jack
uid=1002(jack) gid=1002(jack) groups=1002(jack)
[root@edenluo.com ~]# id sutdent
uid=1007(sutdent) gid=1008(sutdent) groups=1008(sutdent)//准备相关文件
[root@edenluo.com ~]# cp /etc/passwd /root/
[root@edenluo.com ~]# chown tom:admin passwd
[root@edenluo.com ~]# chmod 644 passwd//检查设定前的acl列表
[root@edenluo.com ~]# getfacl passwd
# file: passwd
# owner: tom
# group: admin
user::rw-
group::r--
other::r--//设定acl权限
[root@edenluo.com ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd//检查acl权限
[root@edenluo.com ~]# getfacl passwd
# file: passwd
# owner: tom
# group: admin
user::rwx
user:jack:r--
user:mary:rw-
group::r--
group:admin:rwx
mask::rwx
other::---
-
acl的控制规则是从上往下匹配
-
1.
tom由于是文件的拥有者,所以直接按照user::rwx指定的权限去操作 -
2.
mary用户从上往下寻找匹配规则,发现user:mary:rw-能够精确匹配mary用户,尽管mary属于admin组,同时admin组有rwx的权限,但是由于mary用户的规则在前面,所有优先生效。 -
3.
bean由于找不到精确匹配的规则,而bean是属于admin组,根据文件的定义,该文件是属于admin组,所以bean的权限是按照group:admin:rwx的权限去操作。 -
4.
jack用户从上往下寻找匹配规则,发现user:jack:r--能够精确匹配jack用户。 -
5.
student用户找不到精确匹配的user定义规则, 也找不到相关组的定义规则,最后属于other。
-
-
案例2:
lab acl setup
controller组成员有:student
sodor组成员有:thomas,james
目录: /shares/steamies
文件: /shares/steamies/file
脚本: /shares/steamies/test.sh
controller属于该目录的所属组, 新建文件必须属于controller组
sodor组的成员对该目录拥有rwx权限
sodor组成员james对该目录及子目录(包括以后新建立的文件)没有任何权限
- 实际操作
准备用户
[root@edenluo.com ~]# groupadd controller
[root@edenluo.com ~]# groupadd sodor
[root@edenluo.com ~]# useradd student -G controller
[root@edenluo.com ~]# useradd thomas -G sodor
[root@edenluo.com ~]# useradd james -G sodor
准备目录
[root@edenluo.com ~]# mkdir /shares/steamies -p
[root@edenluo.com ~]# echo "file" >> /shares/steamies/file
[root@edenluo.com ~]# echo "echo 123" >> /shares/steamies/test.sh
[root@edenluo.com ~]# chmod 755 /shares/steamies/test.sh
[root@edenluo.com ~]# chown -R :controller /shares/steamies/
[root@edenluo.com ~]# chmod g+s /shares/steamies/
设定权限(X表示,如果原本有执行权限就保留,如果没有则不添加)
[root@edenluo.com ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies/
设定继承规则
[root@edenluo.com ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/
[root@edenluo.com steamies]# getfacl /shares/steamies/
getfacl: Removing leading '/' from absolute path names
# file: shares/steamies/
# owner: root
# group: controller
# flags: -s-
user::rwx
user:james:---
group::r-x
group:sodor:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:sodor:rwx
default:mask::rwx
default:other::r-x
如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。
相关文章:
Linux ACL 访问控制
今天给伙伴们分享一下Linux ACL 访问控制,希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步…...
hg transformers pipeline使用
什么是hg transformers pipeline? 在Hugging Face的transformers库中,pipeline是一个高级API,它提供了一种简便的方式来使用预训练模型进行各种NLP任务,比如情感分析、文本生成、翻译、问答等。通过pipeline,你可以在几行代码内…...
高性能内存对象缓存
Memcached概述 一套开源的高性能分布式内存对象缓存系统 所有的数据都存储在内存中 支持任意存储类型的数据 提高网站的访问速度 数据存储方式与数据过期方式 数据存储方式:Slab Allocation 按组分配内存,每次先分配一个Slab,相当于一个大小为1M的页&…...
文件上传-CMS文件上传分析
黑盒思路: 上传点抓包测试 个人用户中心是否存在文件上传功能后台管理系统是否存在文件上传功能字典目录扫描探针文件(eg:upload.php)构造地址字典目录扫描探针编辑器目录构造地址(编辑器目录一般是默认的)…...
云原生日志Loki
1. Loki简介 1.1 Loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签…...
初阶数据结构之直接选择排序和快速排序
直接选择排序 1.在元素集合 array[i]–array[n-1] 中选择关键码最⼤(⼩)的数据元素 2.若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后⼀个(第⼀个)元素 交换 3.在剩余的 array[i]–array[n-2](array[i1]–…...
Java语言程序设计——篇十三(4)
🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…...
低代码: 组件库测试之渲染和元素获取,触发事件,更新表单,验证事件以及异步请求
组件库测试步骤 渲染组件(怎样将一个组件渲染到测试用例里面) mount 和 shallowMount传递属性元素是否成功的显示 查找元素的不同写法get, getAllfind, findAllfindComponent 和 getComponent触发事件(是click也好,是input也好,让它触发对应的事件) trigger 方法观察测试界面…...
银河麒麟服务器操作系统Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤
银河麒麟服务器操作系统 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤 一、准备工作1. 下载ISO镜像2. 制作安装介质3. 设置BIOS 二、安装过程1. 启动系统2. 选择安装语言3. 选择安装配置4. 配置root密码与创建用户5. 开始安装6. 重启系统7. 同意许可协议 三、系…...
2024年电赛H题全开源
当题目出来的的那一刻,看到了M0芯片,我们实验室只有一块板子,并且我没有接触过M0,电赛只准备了TI的MSP430f5529。但是我并没有放弃,决然的选择了H题。基本上将四问全做出来,可是测试由于使用了感为科技的寻…...
Docker:宿主机可以ping通外网,docker容器内无法ping通外网之解决方法
问题描述 1、宿主机可以ping外网,docker容器内无法ping外网 ping www.baidu.com 提示:unknown host baidu.com 2、宿主机可以wget下载,docker容器内无法wget下载 wget www.baidu.com 提示:unknown host baidu.com 解决方法 1、…...
bootchart抓Android系统启动各阶段性能数据
最近在做Android系统启动优化,首要任务是找到启动过程中各阶段耗时点,进而有针对性地进行优化。主要用bootchart抓开机数据,本文主要记录下工具的使用方法。 1.抓开机数据 adb root adb shell ‘touch /data/bootchart/enabled’ adb rebo…...
使用 Node.js 和 Express 框架通过网页访问GPIO和嵌入式 Linux 系统中使用 GSM/3G/4G 模块
点击上方"蓝字"关注我们 01、前言 想要快速开发嵌入式 Linux 网络应用,控制硬件 GPIO,从而使得用户能够远程控制和监控系统。 主要目的是向读者展示开发使用文件系统控制 GPIO 的 Node 代码、创建用户有好的界面、以及运行基于 Express 框架使用 AJAX 通客户端进…...
IT 行业的就业情况
当前,IT 行业的就业情况呈现出以下特点: 1. 需求持续增长:随着数字化转型的加速,各个行业对信息技术的依赖程度不断提高,推动了对 IT 人才的持续需求。特别是在云计算、大数据、人工智能、物联网等新兴领域ÿ…...
如何快速获取麒麟操作系统版本信息
如何快速获取麒麟操作系统版本信息 一、桌面版系统1. 使用 /etc/kylin-build 文件2. 使用 /etc/.kyinfo 文件 二、服务器版系统1. 使用 /etc/.productinfo 文件2. 使用 nkvers 命令3. 使用 /etc/kylin-release 文件 三、总结 💖The Begin💖点点关注&…...
git提交规范检查husky
一、Eslint 尤雨溪推荐的 prettierrc 配置,句尾不带分号 单引号。 尤雨溪推荐配置:vue-next/.prettierrc lint lint 是最著名的 C 语言工具之一,是由贝尔实验室 SteveJohnson 于 1979 在 PCC(PortableC Compiler) 基础上开发的静态代码分…...
LeetCode 919. 完全二叉树插入器
完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。 设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作…...
C++密码管理器
先问一句 最近有几个关注我的原力等级为0或-1,文章全是转载,转载时间基本都在2021年,而且关注了很多人,这些是僵尸粉吗? 文末有投票,麻烦参与一下谢谢 实现功能列表 暂时还没做加密功能 打算用openssl/a…...
算法【Java】 —— 滑动窗口
滑动窗口 在上一篇文章中,我们了解到了双指针算法,在双指针算法中我们知道了前后指针法,这篇文章就要提到前后指针法的一个经典的使用 —— 滑动窗口,在前后指针法中,我们知道一个指针在前,一个指针在后&a…...
Spring Aware接口执行时机
一. 介绍 Spring Aware 接口的执行时机有两处,都在 getBean() 中的 initializeBean() 中; 下面我们分析这两处时机; // ----------------------- AbstractAutowireCapableBeanFactory --------------------- protected Object initializeB…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
