Linux ACL 权限详解与多场景实践

这里写目录标题

      • Linux ACL 权限详解与多场景实践
    • 一、什么是 ACL?
      • ACL 的两种类型
    • 二、启用 ACL 功能
      • 1. 确认文件系统支持 ACL
      • 2. 挂载文件系统启用 ACL
    • 三、ACL 常用命令
      • 1. **设置 ACL**
      • 2. **查看 ACL**
      • 3. **删除 ACL**
      • 4. **复制 ACL**
    • 四、ACL 实战场景
      • 场景 1:为特定用户增加权限
        • 需求:
        • 操作:
      • 场景 2:目录的继承权限
        • 需求:
        • 操作:
      • 场景 3:临时增加访问权限
        • 需求:
        • 操作:
      • 场景 4:备份与恢复 ACL
        • 需求:
        • 操作:
    • 五、注意事项
    • 六附录:
    • 1、`setfacl` 参数说明及示例
      • 1. **`-m` 或 `--modify=acl`**
      • 2. **`-M` 或 `--modify-file=file`**
      • 3. **`-x` 或 `--remove=acl`**
      • 4. **`-X` 或 `--remove-file=file`**
      • 5. **`-b` 或 `--remove-all`**
      • 6. **`-k` 或 `--remove-default`**
      • 7. **`--set=acl`**
      • 8. **`--set-file=file`**
      • 9. **`-n` 或 `--no-mask`**
      • 10. **`-R` 或 `--recursive`**
      • 11. **`--restore=file`**
    • 2、`getfacl` 参数说明及示例
      • 1. **`-a` 或 `--access`**
      • 2. **`-d` 或 `--default`**
      • 3. **`-c` 或 `--omit-header`**
      • 4. **`-R` 或 `--recursive`**
      • 5. **`-n` 或 `--numeric`**
      • 6. **`-p` 或 `--absolute-names`**
      • 7. **`-t` 或 `--tabular`**
      • 8. **`-e` 或 `--all-effective`**
      • 9. **`-E` 或 `--no-effective`**
    • 3、实际综合案例
      • 1. 备份和恢复 ACL
        • 操作步骤:
      • 2. 多用户权限管理
        • 场景:
        • 操作:
      • 3. 默认 ACL 应用
        • 场景:
        • 操作:

Linux ACL 权限详解与多场景实践

在传统的 Linux 文件权限模型中(rwx 权限和所有者、所属组、其他用户),我们可以实现基本的访问控制。但是,对于复杂场景,如需要为多个用户或用户组设置不同权限时,传统模型可能显得力不从心。这时,ACL(Access Control List,访问控制列表) 就能提供更细粒度的权限管理。

本文将详细介绍 Linux ACL 的原理、常用命令,并结合多种实际应用场景进行演示。


一、什么是 ACL?

ACL 是文件系统扩展权限的一部分,它允许为文件或目录设置额外的权限规则,超越传统的 rwx 权限限制。通过 ACL,我们可以:

  • 为单个用户设置权限。
  • 为用户组设置权限。
  • 为多个用户或组分别设置不同权限。

ACL 的两种类型

  1. 访问 ACL(Access ACL):用于文件或目录,定义具体用户或组的权限。
  2. 默认 ACL(Default ACL):仅对目录有效,定义新创建文件或子目录的继承权限。

二、启用 ACL 功能

大多数现代 Linux 文件系统(如 ext4、xfs)默认支持 ACL。如果需要确认或启用 ACL,请按照以下步骤:

1. 确认文件系统支持 ACL

使用以下命令检查挂载选项是否包含 acl

mount | grep acl

2. 挂载文件系统启用 ACL

如果没有启用 ACL,可以通过重新挂载开启:

mount -o remount,acl /dev/sdX /your/mountpoint

也可以在 /etc/fstab 中添加 acl 参数:

/dev/sdX  /your/mountpoint  ext4  defaults,acl  0  2

然后重新挂载:

mount -o remount /your/mountpoint

三、ACL 常用命令

Linux 提供了多种工具来管理和查看 ACL:

1. 设置 ACL

使用 setfacl 设置 ACL:

setfacl -m [规则] [文件或目录]

示例:

setfacl -m u:john:rwx myfile      # 为用户 john 设置 rwx 权限
setfacl -m g:developers:rx myfile # 为组 developers 设置 rx 权限

2. 查看 ACL

使用 getfacl 查看 ACL:

getfacl [文件或目录]

3. 删除 ACL

  • 删除特定 ACL 条目:
    setfacl -x [规则] [文件或目录]
    
    示例:
    setfacl -x u:john myfile # 删除 john 用户的 ACL 权限
    
  • 删除所有 ACL:
    setfacl -b [文件或目录]
    

4. 复制 ACL

将一个文件的 ACL 复制到另一个文件:

getfacl source_file | setfacl --set-file=- target_file

四、ACL 实战场景

场景 1:为特定用户增加权限

需求:

某项目文件 project.txt,其所有者为用户 admin,默认只允许同组成员访问。但需要让用户 john 拥有写权限。

操作:
  1. 检查文件权限:

    ls -l project.txt
    

    输出:

    -rw-r----- 1 admin developers 1024 Nov 27 12:00 project.txt
    
  2. 为用户 john 设置写权限:

    setfacl -m u:john:rw project.txt
    
  3. 验证 ACL:

    getfacl project.txt
    

    输出:

    # file: project.txt
    # owner: admin
    # group: developers
    user::rw-
    user:john:rw-
    group::r--
    mask::rw-
    other::---
    

场景 2:目录的继承权限

需求:

创建目录 team_folder,要求所有新文件或子目录都继承组 team 的写权限。

操作:
  1. 创建目录并设置默认 ACL:

    mkdir team_folder
    setfacl -m d:g:team:rw team_folder
    
  2. 验证默认 ACL:

    getfacl team_folder
    

    输出:

    # file: team_folder
    # owner: admin
    # group: admin
    user::rwx
    group::r-x
    group:team:rw-
    mask::rwx
    other::r-x
    default:user::rwx
    default:group::r-x
    default:group:team:rw-
    default:mask::rwx
    default:other::r-x
    
  3. 测试继承效果:
    创建新文件:

    touch team_folder/newfile.txt
    getfacl team_folder/newfile.txt
    

    输出:

    # file: team_folder/newfile.txt
    # owner: admin
    # group: admin
    user::rw-
    group::r--
    group:team:rw-
    mask::rw-
    other::r--
    

场景 3:临时增加访问权限

需求:

需要临时给用户 alice 访问项目文件 data.log 的权限,访问结束后撤销。

操作:
  1. 增加访问权限:

    setfacl -m u:alice:r data.log
    
  2. 访问结束后删除权限:

    setfacl -x u:alice data.log
    

场景 4:备份与恢复 ACL

需求:

备份文件的 ACL 并应用到新环境。

操作:
  1. 导出 ACL:

    getfacl -R /project > acl_backup.txt
    
  2. 恢复 ACL:

    setfacl --restore=acl_backup.txt
    

五、注意事项

  1. ACL 的优先级

    • ACL 权限优先于传统权限,但受制于文件的「掩码权限(mask)」。
    • 如果掩码权限(mask)设置为 r--,即使用户的 ACL 是 rwx,也只能读。
  2. 性能问题

    • ACL 是文件系统的扩展特性,可能会增加 I/O 操作的复杂性,建议谨慎使用在性能敏感的场景。
  3. 工具兼容性

    • 部分旧工具可能不支持 ACL,使用前需确认工具是否兼容 ACL。

六附录:

以下是 setfaclgetfacl 的参数详细说明及实际使用示例。ACL 管理是 Linux 中实现精细权限控制的重要手段,通过熟练使用这些参数,您可以灵活地设置和查看文件的访问控制列表。


1、setfacl 参数说明及示例

setfacl 用于设置或修改文件和目录的 ACL 权限,以下是主要参数的功能和示例:

1. -m--modify=acl

修改文件的 ACL 条目。

setfacl -m u:john:rw file.txt  # 为用户 john 添加读写权限
setfacl -m g:developers:r file.txt  # 为组 developers 添加只读权限

2. -M--modify-file=file

从文件中读取 ACL 条目并应用到目标文件。

echo "u:john:rw" > acl_rules.txt
setfacl -M acl_rules.txt file.txt  # 根据 acl_rules.txt 文件设置 ACL

3. -x--remove=acl

移除指定的 ACL 条目。

setfacl -x u:john file.txt  # 删除用户 john 的 ACL 权限

4. -X--remove-file=file

从文件中读取要移除的 ACL 条目。

echo "u:john" > acl_remove.txt
setfacl -X acl_remove.txt file.txt  # 从 acl_remove.txt 中删除指定 ACL

5. -b--remove-all

移除文件或目录的所有扩展 ACL。

setfacl -b file.txt  # 删除 file.txt 的所有扩展 ACL

6. -k--remove-default

移除目录的默认 ACL。

setfacl -k dir/  # 删除 dir 的默认 ACL

7. --set=acl

替换文件的现有 ACL 条目。

setfacl --set u:john:rw,g:developers:r,o::--- file.txt  # 设置完整 ACL

8. --set-file=file

从文件中读取 ACL 条目,并替换现有 ACL。

echo "u:john:rw" > acl_set.txt
setfacl --set-file=acl_set.txt file.txt  # 设置 file.txt 的 ACL

9. -n--no-mask

不重新计算有效权限掩码。

setfacl -m u:john:rwx -n file.txt  # 为 john 设置 rwx 权限,不修改掩码

10. -R--recursive

递归设置目录及其子目录和文件的 ACL。

setfacl -m g:team:rw -R dir/  # 为目录 dir 下的所有文件和子目录设置组 team 的 rw 权限

11. --restore=file

恢复文件的 ACL(通常与 getfacl -R 配合使用)。

getfacl -R /mydir > acl_backup.txt  # 备份 ACL
setfacl --restore=acl_backup.txt  # 恢复 ACL

2、getfacl 参数说明及示例

getfacl 用于查看文件和目录的 ACL,以下是常用参数的功能和示例:

1. -a--access

仅显示文件的访问 ACL。

getfacl -a file.txt

2. -d--default

仅显示目录的默认 ACL。

getfacl -d dir/

3. -c--omit-header

忽略头部的注释信息。

getfacl -c file.txt

默认输出示例:

# file: file.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

使用 -c 后仅输出:

user::rw-
group::r--
other::r--

4. -R--recursive

递归获取目录及其子目录和文件的 ACL。

getfacl -R /mydir

5. -n--numeric

以数字形式显示用户和组的标识符(UID 和 GID)。

getfacl -n file.txt

6. -p--absolute-names

保留路径的绝对路径信息。

getfacl -p /path/to/file.txt

7. -t--tabular

以表格格式输出 ACL 信息。

getfacl -t file.txt

8. -e--all-effective

显示所有有效权限。

getfacl -e file.txt

9. -E--no-effective

不显示有效权限信息。

getfacl -E file.txt

3、实际综合案例

1. 备份和恢复 ACL

操作步骤:
  1. 备份 /project 目录及其内容的 ACL:
    getfacl -R /project > acl_backup.txt
    
  2. 恢复 ACL:
    setfacl --restore=acl_backup.txt
    

2. 多用户权限管理

场景:

用户 johnalice 都需要访问 data.txt 文件,john 需要写权限,alice 仅需要读权限。

操作:
  1. 设置权限:
    setfacl -m u:john:rw,u:alice:r data.txt
    
  2. 验证:
    getfacl data.txt
    
    输出:
    # file: data.txt
    user::rw-
    user:john:rw-
    user:alice:r--
    group::r--
    mask::rw-
    other::r--
    

3. 默认 ACL 应用

场景:

创建目录 /shared,要求所有新文件都具有组 team 的写权限。

操作:
  1. 设置默认 ACL:
    mkdir /shared
    setfacl -m d:g:team:rw /shared
    
  2. 验证继承:
    touch /shared/testfile
    getfacl /shared/testfile
    
    输出:
    # file: /shared/testfile
    user::rw-
    group::r--
    group:team:rw-
    mask::rw-
    other::r--
    

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

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

相关文章

『VUE』elementUI dialog的子组件created生命周期不刷新(详细图文注释)

目录 1. 测试代码分析令人迷惑的效果 分析原因解决方法 如何在dialog中反复触发created呢?总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 主要是在做表单的时候想要有一个编辑表单在dialog弹窗中出现,同时dialog调用的封装的…

深入探讨 Redis 持久化机制:原理、配置与优化策略

文章目录 一、引言二、Redis持久化概述三、RDB(Redis DataBase)持久化1、RDB概念与工作原理2、RDB的配置选项3、RDB优化配置项4、RDB的优势与劣势 三、AOF(Append-Only File)持久化1、AOF概念与工作原理2、AOF的三种写回策略3、Re…

使用爬虫时,如何确保数据的准确性?

在数字化时代,数据的准确性对于决策和分析至关重要。本文将探讨如何在使用Python爬虫时确保数据的准确性,并提供代码示例。 1. 数据清洗 数据清洗是确保数据准确性的首要步骤。在爬取数据后,需要对数据进行清洗,去除重复、无效和…

(计算机网络)期末

计算机网络概述 物理层 信源就是发送方 信宿就是接收方 串行通信--一次只发一个单位的数据(串行输入) 并行通信--一次可以传输多个单位的数据 光纤--利用光的反射进行传输 传输之前,要对信源进行一个编码,收到信息之后要进行一个…

111. UE5 GAS RPG 实现角色技能和场景状态保存到存档

实现角色的技能存档保存和加载 首先,我们在LoadScreenSaveGame.h文件里,增加一个结构体,用于存储技能相关的所有信息 //存储技能的相关信息结构体 USTRUCT(BlueprintType) struct FSavedAbility {GENERATED_BODY()//需要存储的技能UPROPERT…

Js-对象-04-Array

重点关注:Array String JSON BOM DOM Array Array对象时用来定义数组的。常用语法格式有如下2种: 方式1: var 变量名 new Array(元素列表); 例如: var arr new Array(1,2,3,4); //1,2,3,4 是存储在数组中的数据&#xff0…

【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序

DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 1. 窗口的划分 1.1 窗口分为:基于时间的窗口 和 基于数量的窗口 基于时间的窗口:基于起始时间戳 和终止时间戳来决定窗口的大小 基于数量的窗口:根据固定的数量定义窗口 的大小 这…

Java代码操作Zookeeper(使用 Apache Curator 库)

1. Zookeeper原生客户端库存在的缺点 复杂性高:原生客户端库提供了底层的 API,需要开发者手动处理很多细节,如连接管理、会话管理、异常处理等。这增加了开发的复杂性,容易出错。连接管理繁琐:使用原生客户端库时&…

linux系统下如何将xz及ISO\img等格式压缩包(系统)烧写到优盘(TF卡)

最近用树莓派做了个NAS,效果一般,缺少监控及UI等,详细见这篇文章: https://blog.csdn.net/bugsycrack/article/details/135344782?spm1001.2014.3001.5501 所以下载了专门的基于树莓派的NAS系统直接使用。这篇文章是顺便复习一…

带有悬浮窗功能的Android应用

android api29 gradle 8.9 要求 布局文件 (floating_window_layout.xml): 增加、删除、关闭按钮默认隐藏。使用“开始”按钮来控制这些按钮的显示和隐藏。 服务类 (FloatingWindowService.kt): 实现“开始”按钮的功能,点击时切换增加、删除、关闭按钮的可见性。处…

MD5算法加密笔记

MD5是常见的摘要算法。 摘要算法: 是指把任意⻓度的输⼊消息数据转化为固定⻓度的输出数据的⼀种密码算法. 摘要算法是 不可逆的, 也就是⽆法解密. 通常⽤来检验数据的完整性的重要技术, 即对数据进⾏哈希计算然后⽐ 较摘要值, 判断是否⼀致. 常⻅的摘要算法有: MD5…

C#变量和函数如何和unity组件绑定

1.Button On_click (1)GameObject通过Add component添加上Script (2)Button选GameObject组件而不是直接选Script,直接选Script出现不了Script中的函数 2.RawImage 上面是错的 3.Text 上面是错的,应该是直接在GameObject里面填上对应的值 总结: …

开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序源码助力品牌共建:价值、策略与实践

摘要:在当今数字化商业环境下,品牌构建已演变为企业与消费者深度共建的过程。本文聚焦于“开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序源码”,探讨其如何融入品牌建设,通过剖析品牌价值构成,阐述该技术工具在助力…

介绍一下atol(arr);(c基础)

hi , I am 36 适合对象c语言初学者 atol(arr)&#xff1b;是返回整数(long型)&#xff0c;整数是arr数组中字符中数字 格式 #include<stdio.h> atol(arr); 返回值arr数组中的数字 未改变arr数组 #include<stdio.h> //atol(arr); 返 <stdlib> int main…

数据结构C语言描述5(图文结合)--广义表讲解与实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

鸿蒙学习使用本地真机运行应用/元服务 (开发篇)

文章目录 1、前提条件2、使用USB连接方式3、使用无线调试连接方式4、运行 1、前提条件 在Phone和Tablet中运行HarmonyOS应用/元服务的操作方法一致&#xff0c;可以采用USB连接方式或者无线调试的连接方式。两种连接方式是互斥的&#xff0c;只能使用一种&#xff0c;无法同时…

48-基于单片机的LCD12864时间调控和串口抱站

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机的公交报站系统&#xff0c;可以手动报站&#xff0c;站名十个。 在lcd12864上显示时间&#xff08;年月日时分秒&#xff09;和站名&#xff0c;时间可以设置&#xff0c; 仿真中可以…

【汽车制动】汽车制动相关控制系统

目录 1.ABS (Anti-lock Brake System&#xff0c;防抱死制动系统) 2.EBD&#xff08;Electronic Brake-force Distribution&#xff0c;电子制动力分配系统&#xff09; 3.TCS&#xff08;Traction Control System&#xff0c;牵引力控制系统&#xff09; 4.VDC&#xff08…

DDR3与MIG IP核详解(一)

一、ddr3(全称第三代双倍速率同步动态随机存储器)&#xff1a; 1、特点&#xff1a;1&#xff1a;掉电无法保存数据&#xff0c;需要周期性的刷新。2:时钟上升沿和下降沿都会传输数据。 3&#xff1a;突发传输&#xff0c;突发长度 Burst Length一般为…

【算法 python A*算法的实现】

- 算法实现&#xff1a; import heapqclass Node:def __init__(self, position, g0, h0):self.position position # 节点的位置self.g g # 从起点到当前节点的成本self.h h # 从当前节点到终点的启发式估计成本self.f g h # 总成本self.parent None # 父节点def __…