cp가 ACL을 존중하지 않는 이유는 무엇입니까?


15

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

$ 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 또는 그룹 소유권을 존중하지 않지만 이유를 이해할 수 있습니다. 파일 이름을 변경하여 파일의 권한이 변경되지 않기를 원할 수 있습니다.)


serverfault.com/a/452678/46333 이 답변에는 좋은 설명이 포함되어 있습니다.
Kaan

답변:


11

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

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

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


글쎄, 그것은 적어도 그것에 대한 동기를 설명합니다. (그러나 그룹 소유권이 "felles"로 변경되어 잠재적으로 더 많은 사람들이 파일에 대한 읽기 액세스 권한을 부여하는 것이 이상합니다.)
bhm

3

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이 손실됩니다.


1

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


0

당신은 사용에 필요 -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.

1
정확히. 그는 파일이 대상 폴더와 동일한 권한을 갖기를 원합니다.
luckytaxi

0

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

setfacl -dm m::rwX foo

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


그것은 효과가 없었다. foo의 ACL (명령 전후)은 # 파일입니다 : foo # owner : bhm # group : felles # flags : -s- user :: rwx group :: rwx group : felles : rwx mask :: rwx 기타 : : rx 기본값 : 사용자 :: rwx 기본값 : 그룹 :: rwx 기본값 : 그룹 : felles : rwx 기본값 : 마스크 :: rwx 기본값 : 기타 :: rx
bhm

-1

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

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

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

mount -o remount /wherefolderislocated

acl 옵션으로 마운트되었습니다 (예).
bhm

-1

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


아마도 불분명했을 것입니다. 그룹 ( "felles")이 파일을 읽고 쓸 수 있기를 원합니다.
bhm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.