'이렇게 되는구나'라고 답이 나올 줄 알았는데, 혹시 잘못하고 있는 건 아닌지 물어봐야겠다는 생각이 들었습니다.
내 계정의 기본 umask는 입니다 0077
. 나는 wheel
그룹에 속해 있습니다.
다음 ACL이 포함된 디렉터리가 있습니다.
# file: .
# owner: root
# group: wheel
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:wheel:rwx
default:mask::rwx
default:other::r-x
위의 ACL을 기반으로 파일을 생성하고 권한을 올바르게 설정했습니다.
$ touch z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rw-rw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z
이제 이것이 실행 파일이라고 확신하므로 권한을 변경했습니다. 이번에는 사실이에요아니요ACL 다음에는 umask를 따릅니다.
$ chmod +x z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rwxrw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z
a+x
이 작업을 수행하려면 지정해야 합니다 .
$ chmod a+x z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rwxrwxr-x+ 1 ehymowitz wheel 0 Aug 7 12:36 z
touch
왜 ACL을 기반으로 파일을 생성하는지 이해가 안가는 것 같은데 chmod
권한 조정을 위해 ACL을 무시합니다.
답변1
chmod의 명시적 기능
man chmod
ugoa 문자 조합은 파일에 대한 사용자의 액세스 권한이 변경되는 것을 제어합니다. 파일을 소유한 사용자(u), 파일 그룹의 다른 사용자(g), 파일 그룹에 속하지 않은 다른 사용자(o) 또는 모든 사용자(1명). 이것이 주어지지 않으면 (a)가 주어진 것과 같은 효과가 있지만 umask에 설정된 비트는 영향을 받지 않습니다.
ACL에 대한 몇 가지 관련 생각을 보려면 유익한 답변을 찾았습니다. 파일 권한을 설정하는 시스템 호출의 정확한 세부 정보를 볼 수 있습니다. (고마워요 slm!)
그러나 사용법을 자세히 소개하는 것이 반드시 좋은 것은 아닙니다. *nix 권한은 기본 ACL(또는 기존 set-GID)을 사용하기 시작하면 정말 이상해집니다. 현재 umask는 원하는 가장 일관된 동작을 지원하지 않는다는 제한이 있습니다.systemd를 사용하는 다중 사용자 워크스테이션 운영 체제에서(또한 udisks는 잘못된 권한 비트로 FAT 파일 시스템을 마운트합니다.)
기본 ACL은 Windows 워크스테이션의 Unix 파일 서버에서 사용될 수 있습니다. 어떤 경우에는 해킹된 Samba 구성을 사용하여효과적으로umask를 재정의하십시오. 물론 Linux는 Samba에 액세스할 수 있으므로 이 override hack^W 기능의 이점을 누릴 수 있습니다. FUSE 파일 시스템 "bindfs"를 사용하여 Linux에서 동일한 해킹을 구성할 수 있습니다.
(즉, mv
Linux는 마운트된 동일한 파일 시스템의 폴더 간에 서로 다른 기본 ACL을 절대 존중하지 않습니다. 노틸러스(GNOME 파일)도 이동 시 기본 ACL을 구현하지 않습니다. Windows 탐색기도 마찬가지입니다.
답변2
당신은 Unix/Linux 권한의 보다 미묘한 측면 중 하나를 목격하고 있습니다. touch
파일이 생성된 상위 디렉터리에서 명령을 호출 하면 ACL이 선택됩니다. ACL은 기존 권한(모드) + ACL을 결합합니다.
를 사용하면 chmod
작업 중인 파일이나 디렉터리의 MODE 비트만 조작할 수 있습니다. 서로 다르기 때문에 취급 시 주의가 필요하다는 점을 명심하세요.
예
를 사용하면 strace
어떻게 작동하는지 확인할 수 있습니다 chmod
. 먼저 파일을 만들어 보겠습니다 file_077
.
$ rm afile_077*; umask 077; strace -s 2000 touch afile_077 > afile_077.tr 2>&1
결과 보기:
$ ll afile_077
-rw------- 1 user1 user1 0 Aug 7 09:32 afile_077
파일의 권한을 다음으로 변경합니다 a+x
.
$ strace -s 2000 chmod a+x afile_077 > afile_077_chmod.tr 2>&1
생성된 로그를 봅니다.
$ cat afile_077_chmod.tr
...
umask(0) = 02
stat("afile_077", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
fchmodat(AT_FDCWD, "afile_077", 0711) = 0
...
여기서 우리는 MODE 비트가 chmod
요청 umask
되고 그에 따라 설정되는 것을 볼 수 있습니다. ACL에는 전혀 주의를 기울이지 않습니다.노트:이 질문은 해당 출력을 해당 작업에 chmod
통합하지 않는다는 점을 명심하세요 .umask