cp가 ACL을 존중하지 않는 이유는 무엇입니까? umask 0022 $ echo hi > foo/bar $ ls -l

그룹 내에서 파일 공유를위한 디렉토리를 설정하는 일반적인 방법은 다음과 같습니다.

$ mkdir foo
$ chgrp felles foo
$ chmod g+ws foo
$ setfacl -m group:felles:rwx foo
$ setfacl -dm group:felles:rwx foo

이렇게하면 foo그룹 에서 작성된 모든 파일을 읽고 쓸 수 있습니다 felles.

$ umask
0022
$ echo hi > foo/bar
$ ls -l foo
total 4
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar

그러나 파일을에 복사 foo하면 기본 ACL이 적용되지 않습니다.

$ echo you > baz
$ cp baz foo/
$ ls -l foo
total 8
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
-rw-r--r--+ 1 bhm felles 4 2010-09-23 00:19 baz
$ getfacl foo/baz
# file: foo/baz
# owner: bhm
# group: felles
user::rw-
group::rwx          #effective:r--
group:felles:rwx        #effective:r--
mask::r--
other::r--

왜 이런 일이 발생하며 그 주위에 방법이 있습니까?

( 파일을 디렉토리로 옮기는 것은 ACL 또는 그룹 소유권을 존중하지 않지만 이유를 이해할 수 있습니다. 파일 이름을 변경하여 파일의 권한이 변경되지 않기를 원할 수 있습니다.)



답변

경우 cp대상 파일을 생성하고, 그것을 umask에 설정되는 비트를 제외한, 소스 파일의 권한을 복제. 이것은 표준 동작입니다 (예 : Single Unix v3 (POSIX 2001) 사양의 3.b 단계 참조 ) .

왜 cp가 이런 식으로 설계 되었습니까? 예를 들어, 원래 권한이 제한적일 때 파일의 개인 정보를 보호하고 실행 가능성을 유지하는 것이 거의 항상 옳은 일입니다. 그러나 불행하게도 GNU cp조차도이 동작을 해제 할 수있는 옵션이 없습니다.

대부분의 복사 도구 (예 : pax, rsync)는 같은 방식으로 동작합니다. 소스를 대상에서 분리하여 파일을 기본 권한으로 작성하도록 할 수 있습니다 (예 🙂 cat <baz >foo/baz.


답변

3 살짜리 질문이지만 여전히 관련성이 있습니다. 향후 독자들을 위해 mv, cp 명령이 대상 디렉토리의 ACL을 따르지 않을 것으로 예상됩니다. Gilles의 답변은 모두 마지막 문장입니다. 대상의 ACL을 복사 / 이동 된 파일에 적용하는 더 좋은 방법은 다음과 같습니다.

http://www.commandlinefu.com/commands/view/4281/copy-acl-of-one-file-to-another-using-getfacl-and-setfacl

나중에 링크가 끊어 질 경우 여기에 내용을 붙여 넣습니다.

getfacl <file-with-acl> | setfacl -f - <file-with-no-acl>

getfacl 및 setfacl을 사용하여 한 파일의 ACL을 다른 파일로 복사

경고 : 기존 ACL이 손실됩니다.


답변

대상 하위 디렉토리에 적절한 기본 ACL이없는 rsynced 파일과 비슷한 문제가있었습니다. Cp에는 대상에 대한 권한을 설정하는 방법이 없습니다. 그러나 rsync는 --chmod=ugo=rwx플래그를 사용하여 수행합니다 . 여기에 내 대답을 참조 하십시오 .


답변

당신은 사용에 필요 -p하거나 --preserve함께 cp.

보낸 사람 man 5 acl:

파일 유틸리티 변경

 On a system that supports ACLs, the file utilities ls(1), cp(1), and
 mv(1) change their behavior in the following way:

 ·   For files that have a default ACL or an access ACL that contains more
     than the three required ACL entries, the ls(1) utility in the long
     form produced by ls -l displays a plus sign (+) after the permission
     string.

 ·   If the -p flag is specified, the cp(1) utility also preserves ACLs.
     If this is not possible, a warning is produced.

 ·     The mv(1) utility always preserves ACLs. If this is not possible, a
     warning is produced.

 The effect of the chmod(1) utility, and of the chmod(2) system call, on
 the access ACL is described in CORRESPONDENCE BETWEEN ACL ENTRIES AND
 FILE PERMISSION BITS.

답변

ACL이 올바르게 전파되고 있지만 기본 마스크가 올바르지 않은 것 같습니다. 기본 마스크가 rwX가되기를 원할 것입니다.

setfacl -dm m::rwX foo

그래도 작동하지 않으면 foo에 대한 ACL을 게시하십시오.


답변

“ACL”옵션을 사용하여 파일 시스템을 마운트 했습니까?

/dev/sda4        /wherefolderislocated         ext3        defaults,acl     1   2

그렇지 않은 경우 변경 한 후 다시 마운트하십시오.

mount -o remount /wherefolderislocated


답변

내가 본 것에서 cp 전후의 파일 소유자 (bhm)입니다. 디렉토리 목록에서 소유자가 읽기 및 쓰기 권한을 가지고 있음을 보여줍니다!