Access Control Lists

ls -l 最后的+就是ACL,是chmod的增强功能。有时候明明ls-l看着两个文件的权限完全相同,但是就是访问不了,可能就是ACL的原因了。尤其是从其他机器上scp传输的文件使用了-p保留了文件的属性的情况下,就更容易出现这样的情况了。

查看文件的acl权限

$ getfacl filename

设置文件的acl权限

$ setfacl -m u:username:rwx filename

设置新建文件的默认权限(-d 要写在-m前面,我也不知道为什么)

$ setfacl -d -m u:username:rwx filename

移除文件的ACL控制

$ setfacl -b filename

上面是针对单个文件的情况,如果是目录需要递归需要加上-R(-R要放在-d和-m的前面)

$ setfacl -R -m u:username:rwx filename

$ setfacl -R -d -m u:username:rwx filename

上面这些还不算完,如果你使用chmod更改了文件权限,比如改成了700,那么恭喜你,你的acl坏了。

如果你getacl,你会看到下面的样子(片段)

user:username:rwx        #effective:—

group::rwx                       #effective:—

mask::—

因为你的chmod导致你的mask变成了—,后面的#effective注释是在告诉你实际起作用的权限,也就是设置的权限和mask与之后的结果。由于mask是000,那与之后肯定也是000,那当然就是没有权限了。

这个时候你要么重新设置一下权限,要么修改一下mask。

所以一定要记住,chmod之后要修改acl权限。

拷贝文件夹的ACL的权限

 getfacl dir1 | setfacl -b -n -M - dir2

-b :清除dir2的ACL;-n不重新计算权限掩码;-从stdin读入

拷贝文件的ACL权限

getfacl file1 | setfacl --set-file=- file2

拷贝文件夹的ACL权限作为默认权限

 getfacl -a /path/to/dir | setfacl -d -M- /path/to/dir

https://wiki.archlinux.org/index.php/Access_Control_Lists

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

2 + 13 =