파일 및 디렉토리에 ACL을 상속하거나 상속하지 않는 방법을 결정할 수 있습니다. 기본적으로 ACL은 전파되지 않습니다. 디렉토리에 복잡한 ACL을 설정하면 ACL이 후속 디렉토리에서 상속되지 않습니다. 파일 또는 디렉토리에 ACL의 상속을 지정해야 합니다.
aclinherit 등록 정보는 파일 시스템에 전역적으로 설정할 수 있습니다. 기본적으로 aclinherit는 restricted로 설정됩니다.
자세한 내용은 ACL 상속을 참조하십시오.
예 7-6 기본 ACL 상속 부여기본적으로 ACL은 디렉토리 구조를 통해 전파되지 않습니다.
다음 예에서 read_data/write_data/execute의 복잡한 ACE가 test.dir의 사용자 joe에 적용됩니다.
# chmod A+user:joe:read_data/write_data/execute:allow test.dir # ls -dv test.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:53 test.dir 0:user:joe:list_directory/read_data/add_file/write_data/execute:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
test.dir 하위 디렉토리를 만들 경우 사용자 joe에 대한 ACE가 전파되지 않습니다. 사용자 joe는 자신에게 부여된 sub.dir 권한이 파일 소유자, 그룹 구성원 또는 everyone@으로 액세스하는 경우 sub.dir에만 액세스할 수 있습니다.
# mkdir test.dir/sub.dir # ls -dv test.dir/sub.dir drwxr-xr-x 2 root root 2 Jul 20 14:54 test.dir/sub.dir 0:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 2:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow예 7-7 파일 및 디렉토리에 ACL 상속 부여
다음 일련의 예는 file_inherit 플래그를 설정할 때 적용되는 파일 및 디렉토리 ACE를 식별합니다.
다음 예에서 사용자 joe에 대해 test2.dir 디렉토리의 파일에 대한 read_data/write_data 권한이 추가되므로 이 사용자가 새로 만든 파일에 읽기 액세스할 수 있습니다.
# chmod A+user:joe:read_data/write_data:file_inherit:allow test2.dir # ls -dv test2.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:55 test2.dir 0:user:joe:read_data/write_data:file_inherit:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
다음 예에서 사용자 joe의 권한이 새로 만든 test2.dir/file.2 파일에 적용됩니다. 부여된 ACL 상속 read_data:file_inherit:allow로 인해 사용자 joe가 새로 만든 파일의 내용을 읽을 수 있습니다.
# touch test2.dir/file.2 # ls -v test2.dir/file.2 -rw-r--r--+ 1 root root 0 Jul 20 14:56 test2.dir/file.2 0:user:joe:read_data:inherited:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
이 파일 시스템에 대한 aclinherit 등록 정보가 기본 모드 restricted로 설정되므로 사용자 joe에 file.2에 대한 write_data 권한이 없습니다(파일의 그룹 권한이 허용하지 않음).
file_inherit 또는 dir_inherit 플래그를 설정할 때 적용되는 inherit_only 권한을 사용하여 디렉토리 구조를 통해 ACL을 전파할 수 있습니다. 따라서 사용자 joe는 파일 소유자이거나 파일 그룹 소유자의 구성원이 아닌 한, everyone@에서만 권한이 부여되거나 거부됩니다. 예를 들면 다음과 같습니다.
# mkdir test2.dir/subdir.2 # ls -dv test2.dir/subdir.2 drwxr-xr-x+ 2 root root 2 Jul 20 14:57 test2.dir/subdir.2 0:user:joe:list_directory/read_data/add_file/write_data:file_inherit /inherit_only/inherited:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
다음 일련의 예는 file_inherit 및 dir_inherit 플래그를 설정할 때 적용되는 파일 및 디렉토리 ACL을 식별합니다.
다음 예에서 사용자 joe에 대해 새로 만든 파일/디렉토리에 상속되는 읽기, 쓰기, 실행 권한이 부여됩니다.
# chmod A+user:joe:read_data/write_data/execute:file_inherit/dir_inherit:allow test3.dir # ls -dv test3.dir drwxr-xr-x+ 2 root root 2 Jul 20 15:00 test3.dir 0:user:joe:list_directory/read_data/add_file/write_data/execute :file_inherit/dir_inherit:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
아래 출력에서 inherited 텍스트는 ACE가 상속되었음을 나타내는 정보 메시지입니다.
# touch test3.dir/file.3 # ls -v test3.dir/file.3 -rw-r--r--+ 1 root root 0 Jul 20 15:01 test3.dir/file.3 0:user:joe:read_data:inherited:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
# touch test3.dir/file.3 # ls -v test3.dir/file.3 -rw-r--r--+ 1 root root 0 Jun 23 15:25 test3.dir/file.3 0:user:joe:read_data:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
# mkdir test3.dir/subdir.1 # ls -dv test3.dir/subdir.1 drwxr-xr-x+ 2 root root 2 Jun 23 15:26 test3.dir/subdir.1 0:user:joe:list_directory/read_data/execute:file_inherit/dir_inherit :allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/read_attributes /write_attributes/read_acl/write_acl/write_owner/synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
위 예에서 group@ 및 everyone@에 대한 부모 디렉토리의 권한 비트가 쓰기 및 실행 권한을 거부하므로 사용자 joe에 쓰기 및 실행 권한이 거부됩니다. 기본 aclinherit 등록 정보는 restricted이며, write_data 및 execute 권한이 상속되지 않습니다.
다음 예에서 사용자 joe에 대해 새로 만든 파일에 상속되는 읽기, 쓰기, 실행 권한이 부여되지만 후속 디렉토리 내용으로 전파되지 않습니다.
# chmod A+user:joe:read_data/write_data/execute:file_inherit/no_propagate:allow test4.dir # ls -dv test4.dir drwxr--r--+ 2 root root 2 Mar 1 12:11 test4.dir 0:user:joe:list_directory/read_data/add_file/write_data/execute :file_inherit/no_propagate:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/read_attributes/read_acl /synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/read_attributes/read_acl /synchronize:allow
다음 예에 나타난 것처럼, joe의 read_data/write_data/execute 권한이 소유 그룹의 권한에 따라 축소됩니다.
# touch test4.dir/file.4 # ls -v test4.dir/file.4 -rw-r--r--+ 1 root root 0 Jul 20 15:09 test4.dir/file.4 0:user:joe:read_data:inherited:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow예 7-8 ACL 상속 모드를 Pass Through로 설정한 채 ACL 상속
tank/cindy 파일 시스템의 aclinherit 등록 정보가 passthrough로 설정된 경우 사용자 joe가 새로 만든 file.5에 대해 test4.dir에 적용된 ACL을 상속합니다.
# zfs set aclinherit=passthrough tank/cindy # touch test4.dir/file.5 # ls -v test4.dir/file.5 -rw-r--r--+ 1 root root 0 Jul 20 14:16 test4.dir/file.5 0:user:joe:read_data/write_data/execute:inherited:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow예 7-9 ACL 상속 모드를 Discard로 설정한 채 ACL 상속
파일 시스템의 aclinherit 등록 정보가 discard로 설정된 경우 디렉토리의 권한 비트가 변경될 때 ACL이 잠재적으로 무시될 수 있습니다. 예를 들면 다음과 같습니다.
# zfs set aclinherit=discard tank/cindy # chmod A+user:joe:read_data/write_data/execute:dir_inherit:allow test5.dir # ls -dv test5.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:18 test5.dir 0:user:joe:list_directory/read_data/add_file/write_data/execute :dir_inherit:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
나중에 디렉토리의 권한 비트를 축소하기로 결정하면 복잡한 ACL이 무시됩니다. 예를 들면 다음과 같습니다.
# chmod 744 test5.dir # ls -dv test5.dir drwxr--r-- 2 root root 2 Jul 20 14:18 test5.dir 0:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:list_directory/read_data/read_xattr/read_attributes/read_acl /synchronize:allow 2:everyone@:list_directory/read_data/read_xattr/read_attributes/read_acl /synchronize:allow예 7-10 ACL 상속 모드를 Noallow로 설정한 채 ACL 상속
다음 예에서 2개의 복잡한 ACL이 파일 상속과 함께 설정됩니다. 한 ACL은 read_data 권한을 허용하고, 한 ACL은 read_data 권한을 거부합니다. 이 예는 동일한 chmod 명령에서 두 ACE를 지정하는 방법을 보여줍니다.
# zfs set aclinherit=noallow tank/cindy # chmod A+user:joe:read_data:file_inherit:deny,user:lp:read_data:file_inherit:allow test6.dir # ls -dv test6.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:22 test6.dir 0:user:joe:read_data:file_inherit:deny 1:user:lp:read_data:file_inherit:allow 2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 3:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 4:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
다음 예에 나타난 것처럼, 새 파일을 만들 때 read_data 권한을 허용하는 ACL이 무시됩니다.
# touch test6.dir/file.6 # ls -v test6.dir/file.6 -rw-r--r--+ 1 root root 0 Jul 20 14:23 test6.dir/file.6 0:user:joe:read_data:inherited:deny 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow