第一个命令将更改任何现有文件/目录的权限。-d
第二个命令中的in对设置所有目录的默认权限至关重要,这将为这些目录中的所有文件提供默认的ACL集。
注意:在这两种情况下,命令都将通过-R
开关递归运行。
关于-d
开关,从setfacl
手册页:
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
此节选也很好地说明了这一点:
有两种类型的ACL:访问ACL和默认ACL。访问ACL是特定文件或目录的访问控制列表。默认ACL只能与目录关联;默认ACL只能与目录关联。如果目录中的文件没有访问ACL,它将使用目录的默认ACL规则。默认ACL是可选的。
资料来源:8.2。设置访问ACL。
例
说我有这个目录结构。
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
现在,让我们使用问题中的第一个setfacl
命令来设置权限:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
结果如下:
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
如果不在-dR
此处运行命令,则ACL不会覆盖新目录:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
但是,如果我们删除此目录并运行setfacl -dR ...
命令并在上面重复此操作:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
现在权限看起来很不一样:
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
现在,我们新创建的目录将获取以下“默认”权限:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
拥有这些权限dir2
现在还将对其中的文件强制执行以下权限dir2
:
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
app/cache
包含名为的目录的目录dev
,则将第一个命令应用于该目录,但不对第二个命令应用?如果以后再添加另一个目录(例如prod
),第二个命令将设置权限?如果不是这种情况,我应该能够跳过第二条命令吗?