AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 475698
Accepted
arif
arif
Asked: 2018-10-16 15:29:42 +0800 CST2018-10-16 15:29:42 +0800 CST 2018-10-16 15:29:42 +0800 CST

文件系统 ACL 中“掩码”的确切用途是什么?

  • 772

当我在目录中应用默认 ACL 时,我看到default:mask或只是mask在以下两种情况下。

方案 1

-bash-4.2$ ls -ld test/
 drwxr-x---. 2 test test 4096 Oct 15 19:12 test/

-bash-4.2$ setfacl -d -m u:arif:rwx test/

-bash-4.2$ getfacl --omit-header test
 user::rwx
 group::r-x
 other::---
 default:user::rwx
 default:user:arif:rwx
 default:group::r-x
 default:mask::rwx
 default:other::---

方案 2

-bash-4.2$ ls -dl dir/
 drwxr-x---. 2 test test 4096 Oct 15 18:17 dir/

-bash-4.2$ getfacl dir
 # file: dir
 # owner: test
 # group: test
 user::rwx
 group::r-x
 other::---

-bash-4.2$ setfacl -m user:arif:rwx dir

-bash-4.2$ getfacl --omit-header dir
 user::rwx
 user:arif:rwx
 group::r-x
 mask::rwx
 other::---

那么mask这里的目的是什么?

linux permissions
  • 1 1 个回答
  • 5416 Views

1 个回答

  • Voted
  1. Best Answer
    JdeBP
    2018-10-17T04:43:59+08:002018-10-17T04:43:59+08:00

    什么

    这个 3 位 ACL 系统起源于 TRUSIX。其他 ACL 系统,例如 FreeBSD、MacOS、AIX、Illumos 和 Solaris 中的 NFS4 风格的系统,工作方式不同,并且不存在掩码访问控制条目的概念。

    顾名思义,掩码是一个掩码,用于屏蔽用户和组的访问控制条目授予的权限。它是任何访问控制条目可能授予的最大权限,除了文件所有者或“其他”条目。它and的 3 位与这些其他条目的 3 位一起编辑。

    因此,例如,如果用户被rw-访问控制条目授予,但掩码是r--,则该用户实际上只有r--访问权限。相反,如果用户仅--x通过访问控制条目授予,则掩码rwx不会授予额外的权限,并且用户只有--x访问权限。

    父目录上的默认掩码是应用于在其中创建的内容的掩码设置。它是一种继承形式。

    为什么

    遗憾的是 IEEE 1003.1e 从未成为标准并于 1998 年被撤销。实际上,19 年过去了,它是一个广泛的操作系统——从Linux到FreeBSD到Solaris(以及 NFS4 风格的 ACL)后一种情况)——实际执行。

    IEEE 1003.1e 工作草案 #17 读起来很有趣,我推荐它。在附录 B § 23.3 中,工作组提供了详细的 8 页基本原理,说明 POSIX ACL 相对于旧S_IRWXG组权限标志的工作方式有些复杂。(值得注意的是,TRUSIX 人十年前提供了大致相同的分析。)这涵盖了面具的存在理由,我将在这里仅进行简要介绍。

    • 传统的 Unix 应用程序希望能够拒绝对文件、命名管道、设备或目录的所有访问chmod(…,000)。在存在 ACL 的情况下,如果存在掩码并且旧映射到掩码,这只会关闭所有用户和组权限。S_IRWXG如果没有这个,将旧文件权限设置为000不会影响任何非所有者user或group条目,并且令人惊讶的是,其他用户仍然可以访问该对象。

      暂时将文件的权限位更改为无访问权限,chmod 000然后再将其更改回来是一种旧的文件锁定机制,在 Unix 获得建议锁定机制之前使用,正如您所见,即使在 21 世纪人们仍在使用。setlock(自 1990 年代后期以来,建议锁定已经很容易从带有便携式知名工具的脚本中使用。)

    • 传统的 Unix 脚本期望能够运行chmod go-rwx并最终只有对象的所有者才能访问该对象。S_IRWXG同样,除非有掩码并且旧的权限映射到它,否则这不起作用;因为否则该chmod命令不会关闭任何非所有者user或group访问控制条目,从而导致所有者和非所有者组以外的用户保留对预期只能由所有者访问的内容的访问权限。

      再一次——正如你所看到的——这种chmod命令在12 年后仍然是公认的智慧。理由仍然成立。

    • 其他没有掩码机制的方法存在缺陷。
    • 在大多数情况下,权限位与 ACL 分开并and与 ACL 一起编辑的替代系统将需要文件权限标志rwxrwxrwx,这会使许多 Unix 应用程序在看到他们认为的世界时抱怨的事情感到困惑 -可写的东西。
    • 另一个系统,如果权限位与 ACL 分开并 or与 ACL 一起编辑,则会chmod(…,000)出现前面提到的问题。

    因此,一个带有掩码的 ACL 系统。

    进一步阅读

    • 克雷格鲁宾 (1989-08-18)。 为 Unix 系统选择访问控制列表功能的基本原理。NCSC-TG-020-A。黛安出版。国际标准书号 9780788105548。
    • IEEE 计算机协会便携式应用标准委员会(1997 年 10 月)。 信息技术标准草案 - 便携式操作系统接口 (POSIX) - 第 1 部分:系统应用程序接口 (API) - 修订号:保护、审计和控制接口 [C 语言] IEEE 1003.1e。草案 17。
    • 温弗里德·特朗普 (1999-02-28)。 关于 Posix.1e 的总结
    • https://unix.stackexchange.com/a/406545/5132
    • https://unix.stackexchange.com/a/235284/5132
    • 应用 POSIX ACL 时如何授予拥有组权限?
    • 在 bash 中的文件中执行原子写入操作
    • 9

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve