부모 디렉토리에서 새 파일 권한을 상속받는 방법은 무엇입니까?


85

라는 디렉토리가 data있습니다. 그런 다음 사용자 ID 'robot'에서 스크립트를 실행 중입니다. 로봇은 data디렉토리에 쓰고 파일을 업데이트합니다. 아이디어는 data나와 로봇 모두에게 열려 있습니다.

이렇게 권한과 소유자 그룹을 설정했습니다.

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

여기서 나와 로봇은 모두 'robot-grp'에 속합니다. 권한과 소유자 그룹을 부모 디렉토리처럼 재귀 적으로 변경합니다.

나는를 data사용하여 정기적으로 새 파일을 디렉토리에 업로드합니다 rsync. 불행히도, 업로드 된 새 파일은 원하는대로 부모 디렉토리의 권한을 상속받지 않습니다. 대신에 이렇게 보입니다

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

로봇이 업데이트하려고 할 때 new-file.txt파일 권한이 없기 때문에 실패합니다.

umask 설정이 도움이되는지 확실하지 않습니다. 어쨌든 새로운 파일은 실제로 그것을 따르지 않습니다.

$ umask -S
u=rwx,g=rx,o=rx

나는 종종 유닉스 파일 허가에 혼란을 느낍니다. 올바른 계획이 있습니까? 데비안 레니를 사용하고 있습니다.

답변:


53

시스템의 기본 umask를 변경하지 않으려는 것은 보안 위험입니다. sticky bit 옵션은 어느 정도 작동하지만 ACL을 사용하는 것이 가장 좋습니다. 생각보다 쉽습니다. 기본 ACL의 문제점은 기본적으로 재귀 적이 지 않다는 것입니다. 디렉토리에 ACL을 설정하면 해당 디렉토리 내의 파일 만 ACL을 상속합니다. 서브 디렉토리를 작성하면 ACL이 재귀로 설정되지 않으면 상위 ACL을 얻지 못합니다.

먼저, 디렉토리가있는 볼륨에 ACL이 사용 가능한지 확인하십시오. 이있는 경우 tune2fs다음을 수행 할 수 있습니다.

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

이 없으면 tune2fs다음을 검사하십시오 fstabs.

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

"defaults"라고 표시된 네 번째 열은 내 시스템 (CentOS 5.5)에서 ACL이 켜져 있음을 의미합니다. 확실하지 않은 경우 기본값으로 두십시오. ACL을 설정하려고 시도하고 오류가 발생하면 기본값으로 돌아가서 / etc / fstab에 acl 옵션을 추가하십시오 defaults,acl.

내가 이해 한 바에 따르면 사용자 그룹의 모든 사람이 데이터 디렉토리에 대한 쓰기 권한을 갖기를 원합니다. 이는 다음에 의해 달성됩니다.

setfacl -Rm g:users:rwX,d:g:users:rwX data/

이 명령을 사용했지만 문제가 해결되지 않았습니다.이 명령을 어떻게 취소 할 수 있습니까?
Itai Ganot

와 우분투 트릭을 했어 sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. PHPUnit 테스트에 문제가있었습니다. 테스트 실행에서 로그 파일을 작성한 후 Apache 사용자 www-data가 로그 파일을 쓰거나 읽을 수 없습니다.
s3m3n

2
@Itai Ganot -에 따라 setfaclman 페이지 , -b또는 --remove-all확장 ACL을 제거합니다.
jww

그래서, 당신은 setfacl -Rm g:users:rwX,d:g:users:rwX data/끝에 끝에 추가 할 것 /etc/fstab입니까?
425nesp

@ piña no. / etc / fstab에 대한 유일한 변경은로 변경 defaults하는 것 defaults,acl입니다. setfacl터미널에서 실행해야하는 명령입니다. data/변경하려는 디렉토리의 경로로 바꿔야합니다.
Segfault

32

디렉토리 setgid ( g+s)를 표시하면 새 파일이 디렉토리의 그룹 소유권을 상속하지만 -grsync 옵션이이를 무시하려고합니다.


11
setgid 비트는 생성 된 파일 만 / if / 그룹을 상속받습니다. 새 파일을 생성 한 사람은 해당 그룹의 구성원입니다. 작성하는 사용자는 소유자이지만 그룹의 구성원은 아니거나 디렉토리에 쓰기 가능한 경우 setgid 비트는 아무 작업도 수행하지 않습니다. 그리고 모든 파일 작성 사용자에 대한 umask는 여전히 적절한 그룹 액세스를 허용하도록 설정되어야합니다.
dannysauer

1
@dannysauer "만들기 사용자가 소유자이지만 그룹의 구성원이 아닌 경우 setgid 비트는 아무것도하지 않습니다"-감사합니다. 이제는 의미가 있지만 rsync의 피드백이 없으면 왜 작동하지 않는지 궁금했습니다.
user12345

4

다른 답변이 일반적인 경우에 적용되지만 rsync가 문제의 원인이라고 언급 할 때 호출을 조정해야 할 수도 있습니다.

처음에 대중적인 -a플래그는 rsync 복사 권한을 만듭니다. (권한 동기화 없음) 및 (그룹 동기화 없음 ) -r대신 -a또는 추가를 사용 하십시오 . 또한 rsync는 새로 만든 파일에 대한 권한을 변경 하는 플래그를 지원 합니다.-no-p-no-g--chmod


3

원하는 권한에 대한 umask가 잘못되었습니다. umask는 002입니다. 현재 umask는 022입니다. 또한 setgid 디렉토리를 만드는 방법에 대한 의견은 정확하지만 파일 그룹 소유권이 변경하려는 것인지 확실하지 않습니다.

유닉스 파일 권한은 실제로 매우 간단한 모델입니다. ACL이 자신을 혼란스럽게합니다. :-)


4
"유닉스 파일 권한은 실제로 매우 간단한 모델입니다. ACL이 자신을 완전히 혼란스럽게합니다." -나는 정반대라고 생각합니다 (그러나 어쨌든 +1). ACL (및 ACE 허용 / 거부)은 간단하며 Unix 권한은 의미가 없습니다. 그러나 그것은 Postfix / Dovecot / Clam / SpamAssassin 설치를 겪고있는 사람에게서 나왔습니다.
jww
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.