cp는 다음을 사용하여 파일을 복사할 때 기본 권한 설정을 덮어씁니다: cp -r --no-preserve=all

cp는 다음을 사용하여 파일을 복사할 때 기본 권한 설정을 덮어씁니다: cp -r --no-preserve=all

내 기본 umask는 입니다 077. 디렉토리를 만들면 권한이 있습니다 700.

mkdir AA
$ stat -c'%A %n' AA/               
drwx------ AA/

이제 기본 권한을 재귀적으로 750으로 설정하고 싶습니다.

setfacl -R --default --modify g::rx,o::--- AA

그리고 예상대로 작동하는지 확인합니다.

$ touch AA/zz
$ stat -c'%A %n' AA/zz
-rw-r----- AA/zz

ZZ이제 새 디렉토리 안에 다른 기존 디렉토리를 복사 하고 싶습니다 AA.

$ stat -c'%A %n' ZZ ZZ/zz 
drwx------ ZZ
-rw------- ZZ/zz

기존 디렉토리에는 권한이 있고 700내부 파일에는 600.

$ cp -r --no-preserve=all ZZ/ AA/

$ stat -c'%A %n' AA/ZZ AA/ZZ/zz 
drwx------ AA/ZZ
-rw------- AA/ZZ/zz

--no-preserve=all그러나 내 umask는 기존의 umask가 아닌 경우에도 존중되지 않습니다 ZZ.

cp새 파일을 생성하는 데 사용할 때와 동일한 동작을 만들려면 어떻게 해야 합니까 ? touch원래 권한에 관계없이 기본 umask/setfacl 설정을 유지하면서 기존 디렉터리 구조를 복사하고 싶습니다.

답변1

해결책: Debian 11.5/cp(GNU coreutils) 8.32 사용

1) 이것은 사용자 umask를 사용합니다:

$ cp -r --no-preserve=all ZZ/ AA/

2) 대상 디렉터리의 유효한 umask를 사용합니다.

$ cp -r ZZ/ AA/

3) 이것은 umask를 사용하지 않습니다.

$ cp -r --preserve=all ZZ/ AA/

당신은 (AA 디렉터리에 파일을 생성할 수 있는 사용자)에는 생성한 파일의 기본 모드를 재정의하는 데 제한이 없습니다. 여기에는 유틸리티를 사용할 때도 포함됩니다.CP. 쓰기 권한이 있는 한 Acl은 파일 권한 생성을 제한하지 않습니다.

결론: 모든 것이 예상대로 작동합니다. 실용적인 사항CP또한 사용자 umask 및 acl(있는 경우)을 사용하는 옵션도 필요합니다.

#================================================ = == ========

이것은 "acl" 매뉴얼의 일부입니다:

파일 유틸리티 변경

ACL을 지원하는 시스템에서 파일 유틸리티 ls(1), cp(1) 및 mv(1)는 다음과 같이 동작을 변경합니다.

• ls -l에 의해 생성된 긴 형식의 ls(1) 유틸리티는 기본 ACL 또는 3개 이상의 필수 ACL 항목이 포함된 액세스 ACL이 있는 파일에 대한 권한 문자열 뒤에 더하기 기호(+)를 표시합니다.

-p 플래그가 지정된 경우 cp(1) 유틸리티는 ACL도 보존합니다. 이것이 불가능할 경우 경고가 발행됩니다. ...

#------------------------------------------------ - ---------------

기준

IEEE 1003.1e Draft 17("POSIX.1e") 문서는 IEEE 1003.1 표준에 대한 여러 보안 확장을 설명합니다. 1003.1e에 대한 작업은 중단되었지만 많은 UNIX 스타일 시스템은 POSIX.1e 초안 17 또는 이전 초안의 일부를 구현합니다.

Linux 액세스 제어 목록은 POSIX.1e의 액세스 제어 목록에 대해 정의된 전체 기능 및 유틸리티 세트와 일부 확장을 구현합니다. 이 구현은 POSIX.1e 초안 17을 완벽하게 준수합니다. 액세스 제어 목록 조작 기능은 ACL 라이브러리(libacl, -lacl)에 정의되어 있습니다. POSIX 호환 인터페이스는 <sys/acl.h> 헤더에 선언됩니다. 이러한 함수에 대한 Linux 관련 확장은 <acl/libacl.h> 헤더에 선언됩니다.

관련 정보