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

Linux ACL权限策略

Linux ACL权限策略详细介绍

1. 什么是ACL?

ACL,全称 Access Control List,是Linux 文件系统中一种比传统Unix权限模式(用户-组-其他的 rwx 权限)更细粒度的权限管理机制。通过ACL,可以为单个文件或目录设置多个用户或组的访问权限,实现更灵活的访问控制。


2. 传统权限的限制

Linux传统的权限模型只有三类用户:文件所有者(User)、所属组(Group)、其他用户(Others),每类可以设置读(r)、写(w)、执行(x)权限。这种模型简单但有限,不能满足复杂多变的权限需求,例如:

  • 同一文件对不同用户需要不同的访问权限。
  • 一个用户可能需要获得特殊权限但不属于文件所属组。

为了解决这些问题,Linux引入了ACL。


3. ACL的组成和结构

ACL分为两大类条目:

  • 基本ACL条目(Base ACL) :包含了传统Unix权限的用户、组、其他用户权限,是ACL的基础部分。
  • 扩展ACL条目(Extended ACL) :允许为指定用户或组独立设置权限。

每个ACL条目包含以下信息:

  • 条目类型(用户、组或其他)
  • 目标对象(指定用户名或组名,可为“mask”)
  • 权限掩码(读、写、执行权限的组合)

4. Linux ACL的主要条目类型

条目类型含义
user::文件所有者的权限(基础ACL条目)
user:用户名:为特定用户设置权限(扩展ACL条目)
group::文件所属组的权限(基础ACL条目)
group:组名:为特定组设置权限(扩展ACL条目)
mask::访问权限掩码,限制扩展ACL条目和所属组的最大权限,生效范围包括 user:xxx 和 group:xxx 条目
other::其他用户的权限(基础ACL条目)

5. 查看ACL权限

使用命令:

getfacl <文件或目录路径>

示例输出:

# file: example.txt
# owner: alice
# group: staff
user::rw-
user:bob:r--
group::r--
mask::r--
other::---
  • 表示所有者alice有读写权限
  • 用户bob有只读权限
  • 所属组staff有只读权限
  • mask限制扩展ACL权限最大为读权限
  • 其他用户没有权限

6. 设置和修改ACL权限

使用命令:

  • 添加或修改权限
setfacl -m u:bob:rw- example.txt

为用户bob添加读写权限。

  • 移除特定ACL权限
setfacl -x u:bob example.txt

移除用户bob的ACL权限。

  • 给目录设置默认ACL
setfacl -d -m g:developers:rwx /project

为目录/project设置默认ACL,表示此目录下新创建的文件或目录继承该权限。

  • 清除文件所有ACL
setfacl -b example.txt

7. mask的作用

mask 是一个重要条目,用于限制扩展ACL条目(具体用户和组)的最大权限。设置mask时,扩展条目的权限会与mask做“与”操作,实际权限可能会被限制。例如:

  • 若给用户Bob设置 rwx 权限,但mask为 r-x,则Bob实际权限为 r-x。

8. ACL的实际应用场景

  • 多用户共享文件时,灵活分配读写权限。
  • 不改变文件所属组的情况下,给额外用户权限。
  • 设置项目组成员对特定文件夹的特殊访问权限。
  • 配合NFS共享中细粒度权限控制。

9. 常用ACL命令总结

命令作用
getfacl <文件/目录>显示当前文件或目录的ACL权限
setfacl -m u:<用户>:<权限> <文件>添加或修改用户权限
setfacl -m g:<组>:<权限> <文件>添加或修改组权限
setfacl -x u:<用户> <文件>删除指定用户的ACL权限
setfacl -b <文件>移除所有ACL,只保留基础权限
setfacl -d -m g:<组>:rwx <目录>设置目录的默认ACL权限
setfacl -R -m u:<用户>:rwx <目录>递归修改目录及其文件的ACL权限

10. 注意事项

  • 不是所有文件系统都支持ACL,ext3/ext4等主流文件系统支持,但需确保挂载时启用了ACL选项。
  • 过度使用ACL可能会使权限管理复杂,应合理规划权限策略。
  • ACL权限与传统权限共存,ACL权限对传统权限的扩展,需要理解其交互关系

11. 权限优先级

  • 文件拥有人>用户ACL>文件拥有组>组ACL>其他人
http://www.xdnf.cn/news/15512.html

相关文章:

  • 分享三个python爬虫案例
  • Docker搭建Redis分片集群
  • 【PTA数据结构 | C语言版】字符串连接操作
  • Kotlin集合接口
  • 【数据同化案例1】ETKF求解参数-状态联合估计的同化系统(完整MATLAB实现)
  • 问题记录:Fastjson序列化-空值字段处理
  • 跨域中间件通俗理解
  • 日记-生活随想
  • LVS负载均衡集群概述
  • C++--List的模拟实现
  • 【时时三省】(C语言基础)通过指针引用数组元素2
  • 20250711_Sudo 靶机复盘
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers
  • 串口学习和蓝牙通信HC05(第八天)
  • es里的node和shard是一一对应的关系吗,可以多个shard分配到一个node上吗
  • Pandas-数据清洗与处理
  • 构建可落地的企业AI Agent,背后隐藏着怎样的技术密码?
  • redis汇总笔记
  • 什么时候需要用到 multiprocessing?
  • 基于 CentOS 7 的 LVS+DR+Web+NFS 旅游攻略分享平台部署
  • 【RA-Eco-RA6E2-64PIN-V1.0 开发板】ADC 电压的 LabVIEW 数据采集
  • 【读书笔记】《Effective Modern C++》第六章 Lambda Expressions
  • Windows 常用命令
  • vue防内存泄漏和性能优化浅解
  • 如何自动化处理TXT日志,提升工作效率新方式
  • RabbitMQ队列的选择
  • 03.Python 字符串中的空白字符处理
  • Springboot实现一个接口加密
  • 华为交换机 undo negotiation auto功能(华为交换机端口接光纤两端起不来)
  • 【Complete Search】-基础完全搜索-Basic Complete Search