ACL 掩码如何让您在 Linux 中微调文件权限ACL 掩码如何让您在 Linux 中微调文件权限ACL 掩码如何让您在 Linux 中微调文件权限ACL 掩码如何让您在 Linux 中微调文件权限
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

ACL 掩码如何让您在 Linux 中微调文件权限

发表 admin at 2025年2月28日
类别
  • 未分类
标签

ACL 掩码允许您设置 Linux 上文件允许的最大权限。了解它们的含义以及它们为何如此重要。

要点

  • 访问控制列表 (ACL) 掩码确保与不支持 ACL 的程序兼容,将 ACL 条目转换为 POSIX 权限。
  • ACL 掩码表示非所属用户、组或“其他”类的任何用户或组对象所允许的最大权限。
  • 添加新的 ACL 条目时,掩码会自动调整以反映所有指定用户或组允许的最大权限。

您是否正在使用访问控制列表 (ACL),但对掩码的概念感到困惑?你不是一个人。让我们通过了解它们是什么以及它们如何与 Linux 文件系统权限交互来深入探讨这个重要概念。

什么是 ACL 掩码?

ACL 掩码是一种确保与不支持 ACL 的程序和实用程序进行权限互操作的方法。

文件或目录上的 ACL 掩码等于允许任何用户或组对象(不是用户/组/其他类的所有者用户、组或“其他”类)的最大权限范例。换句话说,为了向后兼容,它将 ACL 条目转换为 POSIX 权限。

让我们看一下我们将在本文中使用的新创建的文件 mysupersecretfile.txt:

ls -l mysupersecretfile.txt

对于如此敏感的文档来说,权限非常简单,对吧?

请注意权限设置后面的点 (.)。这表示 SELinux 上下文,与 ACL 或 ACL 掩码无关。

为了清楚起见,我们还使用 getfacl 命令检查文件的 ACL 条目:

getfacl mysupersecretfile.txt

拥有用户和组条目的当前 ACL 条目直接映射到文件的实际 POSIX 拥有用户和拥有组。对于任何没有扩展 ACL 条目的文件来说,这是正常的,称为“最小 ACL”。

假设我们收到一个请求,将名为 manager 的用户添加为该文件的 ACL 条目,并具有读取权限。我们将使用 setfacl 命令来完成此操作。然后,让我们使用 ls 和 getfacl 命令检查新的 ACL 权限:

setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt

您现在会注意到 ls 命令中权限条目旁边的“+”号,表示存在与该文件关联的 ACL 条目。

您现在在 getfacl 命令的输出中看到 mask 行了吗?除了管理员用户的扩展 ACL 条目外,还自动分配了此掩码条目。这是必要的;它代表任何指定用户或组对象允许的最大权限(同样,除了所有者用户和拥有组对象之外)。现在,读取权限等于现有掩码的读取权限。

现在,我们将第二个请求中的另一个用户(承包商)添加到我们文件的 ACL 中。然而,这一次我们需要授予他们读写权限。让我们看看这对遮罩有何影响:

setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt

现在,除了管理者 (r) ACL 条目之外,我们还看到承包商 (rw) 条目。但为什么掩码条目变成了读写呢?

当我们添加具有读写权限的承包商用户时,它会影响 ACL 掩码,因为正如我上面提到的,掩码与 ACL 用户和组条目允许的最大权限相关。由于我们向承包商用户的 ACL 条目添加了写入权限,因此掩码也获得了写入权限。

使用 ACL 时,您将看到组类权限的角色(例如 ls -l 命令的输出)被重新调整以反映 ACL 掩码。不过不用担心,组所有者权限仍然反映为“拥有组”ACL 条目。

请记住,如果您添加另一个具有较少权限(例如只读)的用户,他们不会继承掩码权限,就像我们添加承包商用户的 ACL 条目时经理用户没有获得写入权限一样。

有效权限

我们可以使用setfacl命令手动设置掩码条目权限。这将允许我们同时过滤文件上设置的任何指定用户和/或组权限,或者过滤文件的现有用户的 ACL 条目,以达到最低公分母。这称为有效权限。

让我们将文件的掩码设置为只读,然后重新查看 ACL 条目:

setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt

显示承包商用户有效权限的注释让我们知道,即使他们被授予了读写权限,但实际上他们只有读权限。修改掩码导致了这种情况。如果我们使用ls -l再次查看该文件,我们将看到组类权限(再次重新调整以反映掩码)已更改:

ls -l mysupersecretfile.txt

如果您想要添加指定用户或组 ACL 条目,但不想重新计算掩码,可以将 -n 与 setfacl 一起使用。这会将您添加的 ACL 限制为掩码允许的最大权限(由条目的有效权限显示)。但这不是默认设置;请记住,掩码不是强制访问控制的一种形式。让我们尝试一下:

setfacl -n -m u:milton:rwx mysupersecretfile.txt
getfacl mysupersecretfile.txt

默认掩码

当您使用 ACL 时,默认掩码的概念与默认 ACL 条目非常相似。例如,当您向目录添加默认掩码时,其中所有新创建的文件和子目录将继承相同的掩码(以及默认掩码条目)。只需将 -d 参数与 setfacl 命令一起使用即可应用默认掩码:

mkdir mysupersecretdirectory
setfacl -d -m m::rX mysupersecretdirectory/
getfacl mysupersecretdirectory/
mkdir mysupersecretdirectory/mysupersecretsubdirectory/
getfacl mysupersecretdirectory/mysupersecretsubdirectory/

默认掩码和默认 ACL 条目仅适用于目录,因为它们是唯一可以在其中包含文件和/或其他目录以应用这些可继承条目的对象。


ACL 掩码是一种确保正确处理 ACL 安全性的方法,无论操作它们的程序的功能如何。

随着技术、软件和安全概念的不断快速发展,重要的是要记住,向后兼容性对于我们许多人来说至关重要,并且必须与新的进步一起得到尊重。当然,这并不意味着你不能有新的花哨功能,而只是意味着这些新的花哨功能应该遵守现有的标准。

©2015-2025 Norria support@norria.com