一文看懂Linux访问控制列表

译文 精选
系统 Linux
本文介绍Linux访问控制列表(ACL),它相比标准的Linux权限提供了更大的灵活性。我将讨论为多个独立用户和多个用户组查看和配置ACL。你选择的Linux发行版很可能已经启用了ACL(ACL实际上是文件系统的一项功能)。

译者 | 布加迪

审校 | 重楼

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

经常在Linux与微软Windows之间快速切换的一些人认识到两者之间根本性的区别。其中一个区别是权限。标准的Linux权限非常简单:指定一个用户、一个用户组,然后指定其他任何用户或用户组(称为“others”),并根据需要授予读取、写入和执行等权限。Windows的权限则要复杂得多,有嵌套、更多的访问级别和共享(Share)权限组合。然而从许多方面来看,Windows权限在大规模环境下更灵活、更实用。

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

简要回顾标准的Linux权限

你可以使用chmod命令来配置标准的Linux权限。该命令可以设置以下三种访问级别的任意组合:读取、写入和执行。你可以将这些访问级别授予三种身份:

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

图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。

图2:tune2fs命令显示文件系统设置,包括是否启用了ACL

注意,如果针对资源配置了ACL,ls -l输出将显示+字符。在下面这个例子中,ACL被应用到file1.txt。

图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>

如果结合起来,这些设置允许管理员实现极其可靠而实用的权限配置。

下面的命令示例简要介绍了如何使用setfacl。后面会介绍更具体的示例。

如果为用户django配置ACL,将读取(r)权限授予sample.txt资源,请输入:

setfacl -m u:django:r sample.txt

针对用户组engineering的类似示例,如下所示:

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设置。

图4:getfacl命令显示标准设置和ACL设置

ACL用例

下面你将看到ACL的两个用例,包括场景和相关命令。考虑一下在你的环境中类似的情况会如何发生。

场景1

我将从一个简单的示例开始入手:sales组对于/sales目录需要拥有rwx权限,marketing组应该只有r-x权限。其他人不需要访问。(请记住,这些组需要执行权限才能cd到目录中。)

先向销售组授予标准的rwx权限:

chown –R : sales /sales
chmod – r 770 /sales

接下来,为marketing组设置ACL:

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

使用getfacl /sales确认设置。

请记住,ACL与标准权限协同工作,因此不要忘记使用ls -l命令用于这两个系统。除了显示ACL条目外,getfacl命令还显示标准权限。

场景2

想象另一种情况,你需要为不同的用户和组授予不同的访问级别。假设你有一个/dev-projects目录,需要满足以下要求:

  • 所有者:拥有全面访问权限(rwx)的root。
  • 用户组:拥有全面访问权限(rwx)的developers。
  • 额外用户:拥有只读取访问权限(r-x)的alex(代码审阅者)。
  • 额外用户:具有只读取访问权限(r-x)的silas(项目经理)。
  • 额外用户组:拥有只读取访问权限(r-x)的contract-dev-team。

标准权限无法满足这类需求,但ACL可以轻松满足。

先设置标准权限:

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

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

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

通过使用getfacl和ls -l显示设置来检查结果。

结语

访问控制列表(ACL)扩展了Linux权限的功能,允许对不同的用户和用户组授予不同的访问级别。虽然这使故障排查起来变得更复杂了,但为了增强灵活性是值得的。

ACL功能是文件系统的一项功能。今天的现代文件系统支持ACL,可能已经启用了它。确保创建一种根据访问需求组织资源、从而有效地利用ACL的目录基础设施。一般来说,销售团队所需的一切资源都应该存在于一个父目录中,营销团队所需的一切资源都存在于另一个父目录中。

ACL在大型部署环境中变得尤为重要,比如支持访问需求各异的许多用户和资源的主要文件服务器。现在仔细检查你的大型部署环境,看看ACL是否有助于更有效地控制资源访问。在排查看似神秘的访问问题时,别忘了考虑ACL。

原文标题:A Guide to Linux Access Control Lists,作者:Damon M. Garn

责任编辑:姜华 来源: 51CTO
相关推荐

2019-07-01 09:22:15

Linux操作系统硬件

2020-03-31 14:40:24

HashMap源码Java

2016-08-18 00:21:12

网络爬虫抓取网络

2020-06-30 08:27:56

Python开发工具

2024-08-12 12:30:27

2021-08-01 08:05:39

Linux信号原理

2019-05-22 09:50:42

Python沙箱逃逸网络攻击

2021-08-02 06:56:19

TypeScript编程语言编译器

2023-03-30 09:53:57

2022-03-29 08:02:01

数字孪生能源程序

2021-02-08 22:23:16

云计算办公硬件

2023-07-14 08:00:00

ORMRust ORMSQL

2021-05-12 15:16:17

JUCAQSJava

2019-02-13 15:38:09

存储虚拟化云计算

2023-04-10 11:35:31

评估模型业务流程

2021-02-21 11:25:17

云计算IaaSPaaS

2021-05-11 10:40:29

JUCAQSJava

2022-12-07 07:38:07

存储管理HSM

2022-04-26 13:41:16

区块链比特币数据库

2023-12-18 10:45:31

点赞
收藏

51CTO技术栈公众号