当前位置: 首页 > news >正文

Linux 访问控制列表(Access Control List)

在Linux中,目录或文件的权限是针对的所有者(owner),所属组(group),其他人(others)这3种类别来设置的。这种根据类别控制权限的方法无法精确控制每个用户的行为。为了解决这个问题,Linux引入了访问控制列表(Access Control Lists,简称 ACL),它可以进行精确的权限控制。

文章目录

  • 一、访问控制列表简介
  • 二、访问控制列表设置示例
    • 2.1 设置某个用户的ACL
    • 2.2 设置组或其他人的的ACL
    • 2.3 清除ACL
    • 2.4 设置掩码
    • 2.5 设置默认ACL

一、访问控制列表简介

访问控制列表的功能是由acl包实现的,其中包含了设置、修改、删除和查看ACL的工具。

ACL权限总共有2种:
1. access ACLs,可以设置在目录或文件上
2. default ACLs,仅可以设置在目录上
如果目录中的文件没有显式设置ACLs,那么则会继承目录的ACLs。

二、访问控制列表设置示例

ACL通过setfacl工具进行权限的设置、修改和删除。设置的类别有4种:
• 设置某个用户的ACL
• 设置某个组的ACL
• 设置其他人的ACL
• 设置ACL的掩码(权限上限)

设置完成后可以通过getfacl工具查看ACL的具体规则。

2.1 设置某个用户的ACL

这里用root用户在/tmp目录下新建一个file.txt,要求权限如下,所有者:rwx,所属组:rw,其他人:r

touch file.txt
chmod u=rwx,g=rwx,o=r file.txt
ls -l file.txt

在这里插入图片描述

现有一个用户userA,要求其没有任何权限。而此文件即使是others也有读的权限,即仅针对userA限制文件权限,此时只能通过ACL实现。使用setfacl命令为userA设置权限,其语法为:setfacl -m u:user:perms file

setfacl -m u:userA:--- file.txt 

在这里插入图片描述
命令的选项解释如下:

  • -m 代表修改/设置权限,常用的选项还有-x 删除ACL,-b清除所有ACL
  • u:userA:—,这是规则组合,u代表用户,userA是用户名,也可以用uid代替,—对应rwx权限,这里要求无任何权限,因此是—
  • file.txt 文件名

设置完成后可以使用getfacl file.txt来查看文件上的ACLs:

getfacls file.txt

在这里插入图片描述
红框处的userA:—代表userA对此文件没有任何权限

切换到userA测试一下

ls -l file.txt
cat file.txt

在这里插入图片描述
可以看到文件的所有者,所属组,其他人都有r的权限,但是userA却无法查看文件内容。同时文件权限的最后多了一个+号,这意味着文件设置了ACL。

2.2 设置组或其他人的的ACL

组的ACL设置和用户设置类似,只是影响范围由用户扩展到组,需要变化的部分只有规则组合,u:user:perms需要变为g:group:perms。其中g代表组,group为组名或gid,perms对应具体的rwx权限。例如:

setfacl -m g:root:rxw file.txt

设置其他人的ACL,只需要将规则组合部分变为o:perms,这里o代表others,perms代表具体的权限。

2.3 清除ACL

使用setfacl的-x选项可以清除指定ACL规则,其格式和设置的语法很像,只是没有了perms部分,例如清除userA在file.txt上的ACL:

setfacl -x u:userA file.txt
getfacl file.txt

在这里插入图片描述

通过getfacl可以看到ACL规则已经被清除

或者,使用-b选项清除指定文件或目录上所有的ACL规则:

setfacl -b file.txt

在这里插入图片描述

2.4 设置掩码

掩码可以看作ACL规则权限的上限设置,你设置所有的ACLs规则都会和掩码进行交集运算,只有在掩码范围内的权限才会生效。

首先我们将userA的属组修改为root

usermod -g root userA

在这里插入图片描述
我们设置ACLs属组的权限为rw:

setfacl -m g:root:rw file.txt
getfacl file.txt

在这里插入图片描述
注意此时root组的权限和mask都是rw-。

下面我们将mask修改为r,修改掩码的语法将规则部分修改为m:perms

setfacl -m m:r file.txt
getfacl file.txt

在这里插入图片描述
可以看到组的权限依然是rw,但是后面多了一行注释effective:r–,表示只有r生效,这是因为下面的mask被修改为r–,所以最高权限只能是r–。这个掩码规则会应用到所有的组和用户ACLs上(这里仅演示了组)。

2.5 设置默认ACL

设置默认的ACL规则,只需要将规则组合前面的字母替换为d,且只能应用在目录上,当在目录上设置ACL时,其下的文件都会继承,如果在文件上设置ACL,则会覆盖所属目录的ACL规则。对于目录,普通的目录权限一般就足够了,通常不会使用ACL控制。

新建一个目录acldir,默认其他人的权限设置为r-x:

mkdir acldir
setfacl -m d:o:r-x acldir

在这里插入图片描述
这里只是演示了设置方法,这里目录本身对于其他人的权限是other:—。即使设置default:other::r-x,依然是无法进入目录或查看内容的。这里列举的权限是从上到下依次生效的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Rancher 与 Kubernetes(K8s)的关系
  • 运维学习————Zabbix监控框架(1)
  • 【笔记】第一章 金属在单向静拉伸载荷下的力学性能
  • Mac视频vedio转成gif图
  • 【PPT学习笔记】使用PPT制作动画/手书/视频等作品的适配性和可能性?
  • 网络工程师学习笔记——无线通信网(二)
  • 用Python爬虫制作一个简易翻译器
  • SpringBoot自动装配中的Condition机制
  • 【kubernetes】配置管理中心Configmap运用
  • 使用左右指针方法解决最长无重复字符子串问题
  • 网络学习-eNSP配置路由器
  • 再遇“类和对象”
  • 杰发科技Bootloader(3)—— 基于7801的APP切到Boot
  • java设计模式day03--(结构型模式:代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、享元模式)
  • 常用 Excel 笔记
  • 收藏网友的 源程序下载网
  • angular学习第一篇-----环境搭建
  • canvas绘制圆角头像
  • MD5加密原理解析及OC版原理实现
  • PHP 的 SAPI 是个什么东西
  • React+TypeScript入门
  • vagrant 添加本地 box 安装 laravel homestead
  • 关于使用markdown的方法(引自CSDN教程)
  • 【干货分享】dos命令大全
  • C# - 为值类型重定义相等性
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​力扣解法汇总946-验证栈序列
  • # Panda3d 碰撞检测系统介绍
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #13 yum、编译安装与sed命令的使用
  • #传输# #传输数据判断#
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (算法设计与分析)第一章算法概述-习题
  • (一)插入排序
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ... 是什么 ?... 有什么用处?
  • .Net 6.0 处理跨域的方式
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net Redis的秒杀Dome和异步执行
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .考试倒计时43天!来提分啦!
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [2016.7 day.5] T2
  • [7] CUDA之常量内存与纹理内存
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • [Angular] 笔记 6:ngStyle
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [CP_AUTOSAR]_系统服务_DEM模块(一)功能及模块间依赖关系介绍
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理