0

0

Linux访问控制列表指南

看不見的法師

看不見的法師

发布时间:2025-07-21 08:38:01

|

808人浏览过

|

来源于php中文网

原创

本文介绍了 linux 访问控制列表 (acl),它提供了比标准 linux 权限更大的灵活性。

对于我们在 Linux 和 Microsoft Windows 之间快速切换的人来说,会发现两者在权限方面的根本差异。标准的 Linux 权限非常简单:指定一个用户、一个组,以及所有其他人(称为“其他人”),并根据需要授予读、写和执行权限。相比之下,Windows 权限要复杂得多,涉及嵌套、更多访问级别以及共享权限的混合。在许多方面,Windows 权限在规模上也更灵活、更实用。

本文介绍了 Linux 访问控制列表 (ACL),它提供了比标准 Linux 权限更灵活的功能。我将讨论如何查看和配置多个个人用户和多个组的 ACL。很有可能,您选择的 Linux 发行版 已经启用了 ACL(ACL 实际上是文件系统的功能)。

简要回顾标准 Linux 权限,您可以使用 chmod 命令配置标准 Linux 权限。该命令设置三种访问级别的任意组合:读、写和执行。您可以将这些访问级别分配给三个身份:

用户(所有者):拥有该文件的单个用户帐户(默认情况下,这是文件创建者)。组:/etc/group 文件中显示的一个用户组。其他:任何不是用户或分配组成员的人。

Linux访问控制列表指南图 1:ls -l 命令显示标准权限、所有权和组关联。

这种方法在用户和组较少的独立系统上已经足够了。然而,在共享系统、启用了文件共享功能的系统或具有大量 SSH 远程访问的设备上,这种方法会变得更加繁琐。

这就是文件系统 ACL 功能派上用场的地方。它允许您为多个用户和/或组配置不同的访问级别。

ACL 如何提供帮助?ACL 允许您指定多个用户帐户并为它们提供不同的访问级别。这也意味着您不必将其中一个用户的拥有权授予该文件。它对组提供了相同的灵活性。

ACL 仍然识别读、写和执行这三个标准访问级别,因此您不必重新学习您已经了解的关于 Linux 权限的所有内容。实际上,ACL 与标准权限协同工作,因此您仍然可以使用基本的用户 (u)、组 (g) 和其他 (o) 身份。您是在补充常规权限,而不是替换它们。

验证您的发行版是否支持 ACL,当今的现代 Linux 发行版通常开箱即用地支持 ACL。请记住,ACL 是 文件系统 的功能,因此从那里开始。标准文件系统是 ext4、XFS 和 Btrfs。这些都支持 ACL。

您可能不需要检查您的 Linux 发行版是否支持 ACL,但如果您想确认,可以使用以下命令:

tune2fs -l /dev/sda1 | grep -i "Default mount options"

预计在输出中看到 acl。

Linux访问控制列表指南图 2:tune2fs 命令会显示文件系统设置,包括是否启用了 ACL。

请注意,如果在资源上配置了 ACL,则 ls -l 输出将显示一个 + 字符。在以下示例中,ACL 应用于 file1.txt。

Linux访问控制列表指南图 3:请注意 file1.txt 的权限字符串末尾有一个 + 字符,表示已应用 ACL。

使用 setfacl 命令

ACL 配置命令是 setfacl。它依赖于标准的 Linux 命令语法:

command -options argument

参数将是您要应用访问控制的文件或目录。

setfacl 命令有许多选项。以下列表包含一些最常见的选项:

m : 修改指定的 ACL。x : 从 ACL 中删除条目。b : 从 ACL 中删除所有条目。d : 为给定目录配置默认 ACL。R : 将 ACL 递归应用于所有目录内容。然而,setfacl 还依赖于其他参数来定义新的访问控制是应用于用户还是组。

u:<username>g:<groupname></groupname></username>

结合起来,这些设置允许管理员实施更强大、更实用的权限配置。

以下命令示例简要介绍了如何使用 setfacl。更具体的示例将在下一节中介绍。

GForge5.7.1
GForge5.7.1

GForge是一个基于Web的协同开发平台。它提供一组帮助你的团队进行协同开发的工具,如论坛,邮件列表等。用于创建和控制访问源代码管理库(如CVS,Subversion)的工具。GForge将自动创建一个源代码库并依据项目的角色设置进行访问控制。其它工具还包括:管理文件发布,文档管理,新闻公告,缺陷跟踪,任务管理等。

下载

要为用户 django 配置 ACL,授予其对 sample.txt 资源的读 (r) 权限,请键入:

setfacl -m u:django:r sample.txt

类似的组工程示例如下:

setfacl -m g:engineering:r sample.txt

配置完 ACL 设置后,您需要检查它们是否正确。这就是 getfacl 命令发挥作用的地方。

使用 getfacl 命令管理 ACL 的另一个相关命令是 getfacl,它显示当前的 ACL 设置。

基本语法是 getfacl 和您要查看的文件或目录名称:

getfacl /dev-projects

但是,与大多数 Linux 命令一样,getfacl 支持许多有用的选项来修改其输出。这些包括:

-c:仅显示 ACL 条目,并丢弃额外的标题信息。 -R:递归显示目录内容。 -t:以更易读的表格格式显示输出。在审核或配置访问控制时,使用 getfacl 来查看 ACL 设置。

Linux访问控制列表指南图 4:getfacl 命令显示标准 ACL 和 ACL 设置。

ACL 使用案例下面您将找到 ACL 的两个使用案例,包括一个场景和相关的命令。考虑类似的情况可能在您的环境中发生。

场景 1我将从一个简单的例子开始:一个销售团队需要对 /sales 目录具有 rwx 权限,而一个营销团队应该只有 r-x 权限。其他人不需要访问。(请记住,这些组需要执行权限才能进入目录。)

首先,将标准 rwx 权限授予销售团队:

chown -R :sales /saleschmod -R 770 /sales

接下来,为营销团队设置 ACL:

setfacl -m g:marketing:r-x /sales

使用 getfacl /sales 确认您的设置。

请记住,ACL 与标准权限一起工作,因此不要忘记使用 ls -l 命令来考虑这两个系统。但是,getfacl 命令除了 ACL 条目外,还会显示标准权限。

场景 2想象一下另一种情况,您需要向不同的用户和组授予不同级别的访问权限。假设您有一个 /dev-projects 目录,具有以下要求:

所有者:root 具有完全访问权限(rwx)。组:developers 具有完全访问权限(rwx)。额外用户:alex(代码审查者)具有只读访问权限(r-x)。额外用户:silas(项目经理)具有只读访问权限(r-x)。额外组:contract-dev-team 具有只读访问权限(r-x)。标准权限无法满足这种要求,但 ACL 可以轻松地处理它。

首先设置标准权限:

chown -R root:developers /dev-projectschmod -R 770 /dev-projects

接下来,为额外的用户和组配置 ACL 条目:

setfacl -R u:alex:r-x /dev-projectssetfacl -R u:silas:r-x /dev/projectssetfacl -R g:contract-dev-team:r-x /dev/projects

使用 getfaclls -l 检查结果以显示设置。

总结访问控制列表 (ACL) 扩展了 Linux 权限的功能,允许不同的用户和组具有不同的访问级别。虽然这确实使故障排除更加复杂,但额外的灵活性是值得的。

ACL 功能是文件系统的一部分。当今的现代文件系统支持 ACL,并且可能已经启用了它。请务必创建一个有效利用 ACL 的目录基础结构,通过根据访问要求组织资源。一般来说,销售团队的所有内容都应该存在于一个父目录中,而营销团队所需的所有内容都应该存在于另一个目录中。

ACL 在大型部署中变得尤为重要,例如支持许多用户和资源(具有不同的访问要求)的主要文件服务器。今天检查您的大型部署,看看 ACL 是否可以更有效地控制资源访问。在排查看似神秘的访问问题时,不要忘记考虑 ACL。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

163

2026.02.04

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号