我有一个部署脚本(基于 capifony),它在特定服务器上为 Symfony2 安装设置权限。它包含以下两个命令来为多个目录执行此操作:
setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache
Run Code Online (Sandbox Code Playgroud)
这两个命令在 Symfony2 站点上作为修复权限的一种方式,但是,它们看起来与我惊人地相似。因此,我查看了 的联机帮助页setfacl
,据我所知,第二个命令的作用与第一个命令的作用完全相同,但有一个附加选项(我不太明白)。我的问题是,我的假设是否正确?如果是这样,如果我删除第一个命令会产生相同的效果吗?
slm*_*slm 15
第一个命令将更改任何预先存在的文件/目录的权限。将-d
在第二指令对设置的默认权限前进的任何目录,这反过来将提供访问控制列表的一组默认为这些目录内的任何文件的关键。
注意:在这两种情况下,命令都将通过-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).
Run Code Online (Sandbox Code Playgroud)
这段摘录也很好地解释了它:
ACL 有两种类型:访问 ACL 和默认 ACL。访问 ACL 是特定文件或目录的访问控制列表。默认 ACL 只能与目录相关联;如果目录中的文件没有访问 ACL,它将使用该目录的默认 ACL 规则。默认 ACL 是可选的。
资料来源:8.2。设置访问 ACL。
假设我有这个目录结构。
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
Run Code Online (Sandbox Code Playgroud)
现在让我们使用问题中的第一个setfacl
命令设置权限:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
Run Code Online (Sandbox Code Playgroud)
结果如下:
$ 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--
Run Code Online (Sandbox Code Playgroud)
如果没有在-dR
此处运行命令,您的 ACL 将不会覆盖新目录:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
Run Code Online (Sandbox Code Playgroud)
但是如果我们删除这个目录并运行setfacl -dR ...
命令并重复上面的操作:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
Run Code Online (Sandbox Code Playgroud)
现在权限看起来完全不同:
$ 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--
Run Code Online (Sandbox Code Playgroud)
现在我们新创建的目录将获得这些“默认”权限:
$ 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
Run Code Online (Sandbox Code Playgroud)
拥有这些权限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--
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20737 次 |
最近记录: |