Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ACL linux的意外行为_Linux_Bash_Acl - Fatal编程技术网

ACL linux的意外行为

ACL linux的意外行为,linux,bash,acl,Linux,Bash,Acl,在使用d开关使用acl时发现了最奇怪的行为: 用setfacl突击队中的d:进行测试 create directory: mkdir /var/tmp/tester create three users: useradd userA -d /tmp etc… remove the other permission of the directory: chmod 750 /var/tmp/tester grant acl permissions for userA: # file: setfacl

在使用d开关使用acl时发现了最奇怪的行为:

用setfacl突击队中的d:进行测试

create directory: mkdir /var/tmp/tester
create three users: useradd userA -d /tmp etc…
remove the other permission of the directory: chmod 750 /var/tmp/tester
grant acl permissions for userA: # file: setfacl -md:u:userA:rwx var/tmp/tester/
grant acl permissions for userB: setfacl -m d:u:userB:rx /var/tmp/tester
grant acl permissions for userC(not really needed): setfacl -m d:u:userC:rwx /var/tmp/tester
list the acl of the directory: getfacl /var/tmp/tester

       # owner: root
        # group: root
        user::rwx
        group::r-x
        other::---
        default:user::rwx
        default:user:userA:rwx
        default:user:userB:r-x
        default:user:userC:---
        default:group::r-x
        default:mask::rwx
        default:other::---

Become userA and navigate to the tester dir: ''su - userA cd /var/tmp''/tester
结果:-bash:cd:/var/tmp/tester:权限被拒绝

现在,在我的acl setfacl命令中使用相同的测试,但不使用d:

create directory: mkdir /var/tmp/tester
create three users: useradd userA -d /tmp etc…
remove the other permission of the directory: chmod 750 /var/tmp/tester
grant acl permissions for userA: # file: setfacl -m u:userA:rwx var/tmp/tester/
grant acl permissions for userB: setfacl -m u:userB:rx /var/tmp/tester
grant acl permissions for userC(not really needed): setfacl -m u:userC:rwx /var/tmp/tester
list the acl of the directory: getfacl /var/tmp/tester

       # owner: root
        # group: root
        user::rwx
        group::r-x
        other::---
        default:user::rwx
        default:user:userA:rwx
        default:user:userB:r-x
        default:user:userC:---
        default:group::r-x
        default:mask::rwx
        default:other::---

Become userA and navigate to the tester dir: ''su - userA cd /var/tmp''/tester
结果:成功

这是预期的行为吗? 为什么getfacl在测试中没有显示任何差异?

d:是default:的缩写,并指定目录的默认ACL,而不是真正的ACL。来自man 5 acl:

所以,是的:当不使用d:时,观察到不同的行为是正常的

但是请注意,您发布的getfacl的输出是错误的:在第二种情况下,当不使用d时:您应该在某些行前面加上user:userA、user:userB、user:userC,而不是在这些行前面加上default:。下面是一个简单的例子:

$ mkdir a b
$ setfacl -m u:nobody:rx a
$ setfacl -m d:u:nobody:rx b
$ diff -u <(getfacl a) <(getfacl b)
--- /dev/fd/63  2016-03-12 11:10:20.032239216 +0100
+++ /dev/fd/62  2016-03-12 11:10:20.024239117 +0100
@@ -1,9 +1,12 @@
-# file: a
+# file: b
 # owner: andrea
 # group: andrea
 user::rwx
-user:nobody:r-x
 group::rwx
-mask::rwx
 other::r-x
+default:user::rwx
+default:user:nobody:r-x
+default:group::rwx
+default:mask::rwx
+default:other::r-x

@桑德尔:使用d设置默认ACL,而不是真正的ACL。阅读我发布的手册页摘录以了解有关默认ACL的更多信息您是对的,我发布的输出不正确,我在将文本粘贴到此网站时遇到了一些问题。所以我的第二个问题不是一个正确的问题。但是我的第一次呢。我创建了一个目录chmodit,设置了acl,赋予用户一个完整的权限,并且在使用带有d:?的acl命令时无法访问/var/tmp/tester目录?。对我来说,使用默认的acl开关并没有授予它对directoy的奇怪访问权限,这使得我设置的acl无效,并且不使用d开关使acl按照我的预期工作。我希望你明白我的意思,当你使用我的commandos@Sander:同样,请务必阅读手册页摘录。默认ACL仅在创建新的对象文件、目录、fifo和设备时应用。它完全不影响目录本身的权限谢谢andrea,我看到那个人,他没有意识到这一点,如果我想将acl应用于当前文件、目录和未来文件,我应该执行两个acl命令,一个用于默认,一个用于当前。
$ mkdir a b
$ setfacl -m u:nobody:rx a
$ setfacl -m d:u:nobody:rx b
$ diff -u <(getfacl a) <(getfacl b)
--- /dev/fd/63  2016-03-12 11:10:20.032239216 +0100
+++ /dev/fd/62  2016-03-12 11:10:20.024239117 +0100
@@ -1,9 +1,12 @@
-# file: a
+# file: b
 # owner: andrea
 # group: andrea
 user::rwx
-user:nobody:r-x
 group::rwx
-mask::rwx
 other::r-x
+default:user::rwx
+default:user:nobody:r-x
+default:group::rwx
+default:mask::rwx
+default:other::r-x