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,依然是无法进入目录或查看内容的。这里列举的权限是从上到下依次生效的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424224.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat 17 新特性 | 聚焦 MongoDB

随着 Navicat 17 的盛大发布,其一系列创新特性赢得了广大用户的热烈反响。它不仅在模型设计上实现了突破性优化,提升了查询与配置的效率,还大幅优化了用户界面的交互体验,原生支持国产平台与操作系统,同时增强 BI 能力…

JAVA毕业设计170—基于Java+Springboot+vue3+小程序的房屋租赁小程序系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的房屋租赁小程序系统(源代码数据库)170 一、系统介绍 本项目前后端分离(可以改为ssm版本),分为用户、房东、管理员三种角色 1、用户&am…

Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装

音频解析 音频解码是指将压缩的音频数据转换为可以再生的PCM(脉冲编码调制)数据的过程。 FFmpeg音频解码的基本步骤如下: 初始化FFmpeg解码器(4.0版本后可省略): 调用av_register_all()初始化编解码器。 调用avcodec_register_all()注册所有编解码器。 打开输入的音频流:…

Idea springboot项目热部署

使用 spring-boot-devtools spring-boot-devtools 是 Spring Boot 提供的开发工具模块,它可以自动检测到代码的变化并重启应用,实现热部署。 配置步骤: 添加依赖: 在项目的 pom.xml 中加入 spring-boot-devtools 依赖&#xff1…

Redis(主从复制、哨兵模式、集群)概述及部署测试

目录 一、Redis 主从复制 1.1、Redis 主从复制概念 1.2、主从复制的作用 1.3、主从复制流程 1.4、搭建Redis 主从复制 二、Redis 哨兵模式 2.1、Redis 哨兵模式概念 2.2、哨兵模式原理 2.3、哨兵模式的作用 2.4、哨兵模式的结构 2.5、故障转移机制 2.6、主节点的选…

Node.js 多版本安装与切换指南

一.使用nvm的方法 1. 卸载nodejs 如果你的电脑有安装nodejs,需要先卸载掉;若没有请直接下一步。 2. 前往官网下载nvm nvm:一个nodejs版本管理工具! 官网地址:nvm文档手册 - nvm是一个nodejs版本管理工具 - nvm中文…

MySQL详解:数据类型、约束

MySQL 1. 数据类型1.1 数值类型1.1.1 bit 位类型1.1.2 整数数据类型1.1.3 小数类型floatdecimal 1.2 字符类型1.2.1 char1.2.2 varchar 可变长字符串1.2.3 日期和时间类型datedatetimetimestamp 1.2.4 enum1.2.5 set集合查询函数 find_in_set 2. 表的约束2.1 NULL 空属性2.2 默…

基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标: 当我的手指在设备左方进行上下移动的时候,可以进行屏幕亮度的调节,在调节的同时,有实时的调节进度条显示 步骤: 界面逻辑:使用Stack() 组件,完成音量图标和进度条的组合显示&#xff0c…

Linux echo,printf 命令

参考资料 【Linux】ハイフンをいっぱい出したかっただけなのに【printfコマンド】 目录 一. echo命令1.1 -n 选项1.2 -e 选项1.3 配合扩展实现批量换行输出1.3.1 xargs -n 11.3.2 tr \n1.3.3 xargs printf "%s\n"1.4 ANSI转义序列1.5 彩色文本输出 二. printf 命令…

C# System.BadImageFormatException问题及解决

C# System.BadImageFormatException问题 出现System.BadImageFormatException 异常有两种情况:程序目标平台不一致&引用dll文件的系统平台不一致。 异常参考 BadImageFormatException 程序目标平台不一致: 项目>属性>生成:x86 …

【吊打面试官系列-Redis面试题】使用过 Redis 做异步队列么,你是怎么用的?

大家好,我是锋哥。今天分享关于【使用过 Redis 做异步队列么,你是怎么用的?】面试题,希望对大家有帮助; 使用过 Redis 做异步队列么,你是怎么用的? 一般使用 list 结构作为队列,rpus…

【Redis】redis5种数据类型(list)

目录 基本介绍 命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LLEN LREM LTRIM LSET 阻塞版本的命令 BLPOP 内部编码 基本介绍 list相当于c的双端队列deque 区分获取和删除的区别 lindex能获取到元素的值lrem也能返回被删除元素的值 命…

828华为云征文 | 华为云FlexusX实例下的Kafka集群部署实践与性能优化

前言 华为云FlexusX实例,以创新的柔性算力技术,为Kafka集群部署带来前所未有的性能飞跃。其灵活的CPU与内存配比,结合智能调度与加速技术,让Kafka在高并发场景下依然游刃有余。在828华为云企业上云节期间,FlexusX实例携…

手机玩机常识____展讯芯片刷机平台ResearchDownload的一些基本常识与问题解决

展讯ResearchDownload工具 展讯芯片的刷机工具--ResearchDownload下载工具"是一款专为用户设计的高效、便捷的下载管理软件,它能够帮助用户快速、稳定地从互联网上获取各种文件。这款工具以其强大的功能和良好的用户体验,在众多展讯芯片下载工具中脱…

git-describe获取不到新创建的标签

一、问题描述 1、新建的分支 2、git-describe 失败 二、查询资料 (1)git-describe - 根据可用的ref给对象一个人类可读的名称 (2)该命令查找可从提交访问的最新标记。如果标记指向提交,则仅显示标记。否则&#xf…

S-Procedure的基本形式及使用

理论 Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- \textbf{Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- } Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- tions w.r.t. x ∈ C M 1 \mathbf{x}\in\mathbb{C}^M\times1 x…

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据,我们首先会想到typenumber,设置完type为number时会限制我们输入的内容只能为数字,不能为字符/汉字等非数字类型的数值&…

Leetcode面试经典150题-148.排序链表

题目比较简单,使用链表的归并排序 解法都在代码里,不懂就留言或者私信 合并链表部分没怎么加注释,时间实在是不充裕,看不懂的看一下这篇专门讲解合并链表的 Leetcode面试经典150题-21.合并两个有序链表-CSDN博客 /*** Definit…

Brave编译指南2024 Windows篇:安装Visual Studio 2022(二)

1.引言 在编译Brave浏览器之前,安装和配置合适的开发工具是至关重要的一步。Visual Studio 2022是编译Brave浏览器所需的重要开发环境,它提供了一整套工具和服务,以支持多种编程语言和技术。作为一款功能强大的集成开发环境(IDE&…

【vue-media-upload】一个好用的上传图片的组件,注意事项

一、问题 media 的saved 数组中的图片使用的是location 相对路径&#xff0c;但是我的业务需要直接根据图片链接展示图片&#xff0c;而且用的也不是location 相关源代码 <div v-for"(image, index) in savedMedia" :key"index" class"mu-image-…