示例 8-11 ACL 继承模式设置为 Passthrough 时的 ACL 继承
将
aclinherit
属性设置为
passthrough
的文件系统会继承所有可继承 ACL 项,并且继承 ACL 项时不会对其进行任何修改。当此属性设置为
passthrough
时,会使用由可继承 ACE
确定的权限模式来创建文件。如果不存在影响权限模式的可继承 ACE,则会根据应用程序要求的模式设置权限模式。
以下示例使用缩写 ACL 语法来说明如何通过将
aclinherit
模式设置为
passthrough
来继承权限位。
在本示例中,对
test1.dir
设置了 ACL 以强制继承。该语法会为新创建的文件创建
owner@
、
group@
和
everyone@
ACL 项。新创建的目录会继承
@owner
、
group@
和
everyone@
ACL 项。
# zfs set aclinherit=passthrough tank/cindy
# pwd
/tank/cindy
# mkdir test1.dir
# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow test1.dir
# ls -Vd test1.dir
drwxrwx---+ 2 root root 2 Jun 23 16:10 test1.dir
owner@:rwxpdDaARWcCos:fd----:allow
group@:rwxp----------:fd----:allow
everyone@:--------------:fd----:allow
在此示例中,新创建的文件会继承指定继承到新创建的文件的 ACL。
# cd test1.dir
# touch file.1
# ls -V file.1
-rwxrwx---+ 1 root root 0 Jun 23 16:11 file.1
owner@:rwxpdDaARWcCos:------:allow
group@:rwxp----------:------:allow
everyone@:--------------:------:allow
在本示例中,新创建的目录会继承用于控制此目录访问权限的 ACE 以及将来传播到新创建目录的子项的 ACE。
# mkdir subdir.1
# ls -dV subdir.1
drwxrwx---+ 2 root root 2 Jun 23 16:13 subdir.1
owner@:rwxpdDaARWcCos:fd----:allow
group@:rwxp----------:fd----:allow
everyone@:--------------:fd----:allow
fd----
项用于传播继承,在访问控制期间不会被考虑。在本示例中,在不存在继承 ACE 的另一目录中使用普通 ACL 创建了一个文件。
# cd /tank/cindy
# mkdir test2.dir
# cd test2.dir
# touch file.2
# ls -V file.2
-rw-r--r-- 1 root root 0 Jun 23 16:15 file.2
owner@:rw-p--aARWcCos:------:allow
group@:r-----a-R-c--s:------:allow
everyone@:r-----a-R-c--s:------:allow
示例 8-12 ACL 继承模式设置为 Passthrough-X 时的 ACL 继承
如果启用
aclinherit=passthrough-x
,对于
owner@
、
group@
或
everyone@
设置,将使用执行 (
x
) 权限创建文件,但是只有在文件创建模式以及影响该模式的可继承 ACE 中设置执行权限才行。
以下示例说明了如何通过将
aclinherit
模式设置为
passthrough-x
来继承执行权限。
# zfs set aclinherit=passthrough-x tank/cindy
在
/tank/cindy/test1.dir
上设置了以下 ACL,以便为
owner@
的文件提供可执行 ACL 继承。
# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow test1.dir
# ls -Vd test1.dir
drwxrwx---+ 2 root root 2 Jun 23 16:17 test1.dir
owner@:rwxpdDaARWcCos:fd----:allow
group@:rwxp----------:fd----:allow
everyone@:--------------:fd----:allow
使用请求的权限
0666
创建文件 (
file1
),但生成的权限为
0660
。没有继承执行权限的原因是,创建模式未请求该权限。
# touch test1.dir/file1
# ls -V test1.dir/file1
-rw-rw----+ 1 root root 0 Jun 23 16:18 test1.dir/file1
owner@:rw-pdDaARWcCos:------:allow
group@:rw-p----------:------:allow
everyone@:--------------:------:allow
接下来,在
testdir
目录下使用
cc
编译器来生成名为
t
的可执行文件。
# cc -o t t.c
# ls -V t
-rwxrwx---+ 1 root root 7396 Dec 3 15:19 t
owner@:rwxpdDaARWcCos:------:allow
group@:rwxp----------:------:allow
everyone@:--------------:------:allow
生成的权限为
0770
,这是因为
cc
请求了权限
0777
,这导致从
owner@
、
group@
和
everyone@
条目继承了执行权限。