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 / 问题 / 675695
Accepted
gjvatsalya
gjvatsalya
Asked: 2021-11-02 08:21:48 +0800 CST2021-11-02 08:21:48 +0800 CST 2021-11-02 08:21:48 +0800 CST

为什么我为目录所有者设置了 acl 的目录被拒绝权限(在删除所有标准 posix 权限之后)?

  • 772

我正在尝试在ls对目录的所有者和组具有 acl 权限的目录上执行命令(没有标准的 posix 权限集)。即使getfacl说用户应该能够这样做,这也会导致 Permission Denied。

这就是我正在做的事情:

  1. 在其中创建一个目录和一个文件。

mkdir /tmp/mydir && touch /tmp/mydir/myfile

  1. 检查我是否可以ls在此目录上执行。
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwxr-x  2 jgazula jgazula   4096 Nov  1 11:57 .
drwxrwxrwt 25 root    root    909312 Nov  1 11:57 ..
-rw-rw-r--  1 jgazula jgazula      0 Nov  1 11:57 myfile
  1. 现在,让我们删除此目录上的所有标准 posix 权限。

chmod 000 /tmp/mydir

  1. 验证权限。
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---------  2 jgazula jgazula   4096 Nov  1 11:57 mydir
  1. 我们现在应该做不到ls。
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied
  1. 设置jgazula用户和组的 acl 权限。

sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/

  1. 验证 acl 权限。
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::---
user:jgazula:rwx        #effective:rwx
group::---          #effective:---
group:jgazula:rwx       #effective:rwx
mask::rwx
other::---
  1. 既然acl权限(包括有效权限)看起来不错,应该可以ls在目录上执行吧?
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied

但我不能,我不明白为什么。

  1. 有趣的是,当我检查标准 posix 权限时,组权限位已设置?不确定我是否理解为什么只更新了组权限。
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---rwx---+  2 jgazula jgazula   4096 Nov  1 12:13 mydir
  1. 让我们为所有者和组设置 acl 权限(即,从命令中省略所有者/组)。

sudo setfacl --mask -Rm u::rwx,g::rwx /tmp/mydir/

  1. 再次验证 acl 权限。
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::rwx
user:jgazula:rwx        #effective:rwx
group::rwx          #effective:rwx
group:jgazula:rwx       #effective:rwx
mask::rwx
other::---
  1. 检查我ls现在是否可以执行。
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwx---+  2 jgazula jgazula   4096 Nov  1 11:57 .
drwxrwxrwt  25 root    root    909312 Nov  1 11:57 ..
-rwxrwxr--+  1 jgazula jgazula      0 Nov  1 11:57 myfile

为什么步骤#6 不能单独工作?我正在为用户和组显式设置 acl 权限。为什么我需要执行步骤 #11?

permissions acl
  • 1 1 个回答
  • 996 Views

1 个回答

  • Voted
  1. Best Answer
    Nick Matteo
    2021-11-02T09:36:53+08:002021-11-02T09:36:53+08:00

    运行时sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/,您正在为 user 创建一个ACL_USER条目jgazula。但是ACL_USER_OBJ对于文件的所有者来说仍然是---. getfacl(您可以在步骤 7的输出中看到这一点。)

    根据man ACL,访问检查算法如下:

    1.   If the effective user ID of the process matches the user ID of the file object owner, then
               if the ACL_USER_OBJ entry contains the requested permissions, access is granted,
               else access is denied.
    
    2.   else if the effective user ID of the process matches the qualifier of any entry of type ACL_USER, then
               if the matching ACL_USER entry and the ACL_MASK entry contain the requested permissions, access is granted,
               else access is denied.
    

    因此,该ACL_USER条目甚至从未被检查过。

    关于 serverfault 基本上有同样的问题:ACL:giving - - permissions for the owner of the file。(但看起来那里的答案是ACL_USER相反ACL_USER_OBJ的。)

    • 2

相关问题

  • 组权限如何工作?

  • Redis日志文件权限错误,但是权限已经是777

  • 以 root 权限启动 zypper 命令

  • 以非特权用户身份运行时,meld 无法访问 /dev/fd/* 的可能原因是什么?

  • 另一个用户的非空子目录是否可以安全地从我的目录中删除?

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 5 个回答
  • Marko Smith

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

    • 3 个回答
  • 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
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +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

热门标签

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