Linux의 디렉토리 아래 새로 생성 된 파일 및 하위 디렉토리에 대한 기본 권한을 설정 하시겠습니까?


99

몇 명의 사용자가 공유하는 디렉토리에 출력 결과를 저장하는 장기 실행 스크립트와 응용 프로그램이 많이 있습니다. 이 공유 디렉토리 아래에 생성 된 모든 파일과 디렉토리에 자동으로 u=rwxg=rwxo=r권한 이 있는지 확인하는 방법을 원합니다 .

umask 006다양한 스크립트에서 머리에 사용할 수 있다는 것을 알고 있지만 많은 사용자가 자신의 스크립트를 작성하고 umask를 직접 설정하는 것을 잊을 수 있기 때문에 이러한 접근 방식이 마음에 들지 않습니다.

파일 시스템이 특정 폴더에있는 경우 특정 권한으로 새로 생성 된 파일과 디렉토리를 설정하기를 원합니다. 이것이 가능합니까?

업데이트 : 기본 ACL 기능을 사용하여 POSIX ACL 로 수행 할 수 있다고 생각 하지만 현재로서는 머리가 조금 이상합니다. 누구든지 기본 ACL을 사용하는 방법을 설명 할 수 있다면 아마도이 질문에 멋지게 대답 할 것입니다.


1
POSIX ACL은 좋지만 배포에 따라 특정 파일 시스템에 대해 사용하는 머신의 60 %는이를 활성화하지 않습니다. 다음은 아주 좋은 소개와 예입니다. suse.de/~agruen/acl/linux-acls/online
Tim Post

1
당신은 내가 링크 한 동일한 문서를 의미합니다 :) 나는 그것을 아직 읽을 변경이 없었지만 가용성 문제에 대한 머리에 감사드립니다.
David Dean

1
Tim Post의 댓글에있는 링크는 죽은 것처럼 보이지만 Internet Archive 덕분에이를보고 vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html 에 똑같은 문서가 포함되어 있는지 확인할 수 있었습니다 . 링크를 업데이트하기 위해 질문을 편집하겠습니다.
rmunn

답변:


78

올바른 소유권을 얻으려면 다음을 사용하여 디렉토리에서 그룹 setuid 비트를 설정할 수 있습니다.

chmod g+rwxs dirname

이렇게하면 디렉토리에 생성 된 파일이 그룹이 소유하게됩니다. 그런 다음 모든 사람이 umask 002 또는 007 또는 그 성격의 어떤 것으로 실행되는지 확인해야합니다. 이것이 Debian 및 기타 많은 Linux 시스템이 기본적으로 사용자 별 그룹으로 구성되는 이유입니다.

사용자의 umask가 너무 강한 경우 원하는 권한을 강제하는 방법을 모르겠습니다.


23
이것은 실제로 해결책을 제공하지 않습니다. 그는 소유권이 아닌 권한에 대해 묻고 있으며이를 수행하는 유일한 방법은 ACL을 사용하는 것입니다
Yarin

3
"... 모든 사람이 umask 002 또는 007 또는 그 성격의 무언가로 실행되는지 확인하십시오."-약간의 확장입니다 .... Postfix, Dovecot, Clam 및 Spam Assassin이 모두이 작업을 수행하도록하려면 어떻게해야합니까?
jww 2014

2
뭐라고합니까 +s부분은 무엇입니까? 감사.
tommy.carstensen

1
이 경우 설정된 그룹 ID를 의미합니다. 즉, SGID 비트를 설정하기 위해 g + s를 사용합니다. 그룹을 위해 + s가 g와 결합 되었기 때문에 "이 경우"라고 말합니다. + s는 SUID 비트 (setuid) 설정에도 사용할 수 있습니다.
Bastion

57

최소한 Linux에서 기본 ACL을 사용하여 수행하는 방법은 다음과 같습니다.

먼저 파일 시스템에서 ACL 지원을 활성화해야 할 수 있습니다 . ext4를 사용하는 경우 이미 활성화되어 있습니다. 다른 파일 시스템 (예 : ext3)은 acl옵션 으로 마운트해야합니다 . 이 경우 옵션을 /etc/fstab. 예를 들어, 디렉토리가 루트 파일 시스템에있는 경우 :

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

그런 다음 다시 마운트하십시오.

mount -oremount /

이제 다음 명령을 사용하여 기본 ACL을 설정합니다.

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

의 모든 새 파일 /shared/directory은 이제 원하는 권한 을 가져야합니다. 물론 파일을 만드는 응용 프로그램에 따라 다릅니다. 예를 들어, 대부분의 파일은 umask를 사용할 때와 마찬가지로 처음부터 누구도 실행할 수 없습니다 (open (2) 또는 creat (2) 호출에 대한 mode 인수에 따라 다름). 일부 유틸리티 좋아 cp, tarrsync소스 파일 그룹에 쓰기 권한이 없습니다 인 경우 기본 ACL을 마스크 할 소스 파일 (들)의 권한을 유지하려고합니다.

도움이 되었기를 바랍니다!


이것은 여전히 umask모든 사용자에게 적절한 것을 요구하는 것 같습니다 . = / unix.stackexchange.com/questions/71743/...
아나톨리 techtonik

1
@techtonik 내가 쓴 것처럼 파일을 만드는 응용 프로그램에 따라 다릅니다. 예를 들어, 사용 cp하면 소스 파일의 권한을 복사하려고 시도합니다. 를 umask사용할 때도 도움이 되지 않습니다 cp. 에서 동일한 문제를 보았습니다 tar. 이 질문을 참조하십시오 .
PELLE

@techtonik 지금 내 대답에 이것에 대한 문장을 추가했습니다.
PELLE

1
예, 문제는 내 ACL 및 POSIX 권한 설정이 모두 664 일 때 강제로 권한을 644로 설정하는 응용 프로그램에서 발생한 것 같습니다. 문제를 해결하는 사람들을 위해 이러한 대체 메커니즘을 명확히하는 것이 좋습니다. 많은 사람들이 umask.
anatoly techtonik

나는 마운트 플래그가 올바르게 설정되지 않았는지 확인하는 데 시간을 낭비했다는 의미입니다 (그리고 ext4에서는 자동으로 작동하는 것처럼 보이기 때문에 설정할 수 없습니다). 확인하는 방법에 대한 정보가 없습니다. setfacl works correctly실패해야한다고 생각하지만 대답이 그 점을 놓치기 때문에 확실하지 않습니다.
anatoly techtonik

4

추악하지만 setfacl 명령을 사용하여 원하는 것을 정확하게 얻을 수 있습니다.

Solaris 시스템에는 사용자 및 그룹에 대한 acl이 포함 된 파일이 있습니다. 불행히도 모든 사용자를 나열해야합니다 (적어도이 작업을 수행 할 수있는 방법을 찾을 수 없습니다).

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

파일 이름을 acl.lst로 지정하고 user_X 대신 실제 사용자 이름을 입력합니다.

이제 다음 명령을 실행하여 디렉토리에 해당 acl을 설정할 수 있습니다.

setfacl -f acl.lst /your/dir/here

사용자가 모두 같은 그룹의 구성원 인 경우 사용자 목록에서 제외하고 그룹 권한 만 사용할 수 있습니까?
David Dean

나도 같은 질문을하고 있었다. 이걸 설정 한 지 오래되었습니다. 그러나 새로운 사용자 (다른 사용자와 같은 그룹에 있음)를 얻을 때마다 목록을 업데이트하는 것을 잊고 새 사용자가 파일을 쓰거나 삭제할 수 없다는 불만을 받게됩니다. 그래서 대답은 : 아니요, 할 수 없습니다.
innaM

4

쉘 스크립트 (또는 .bashrc)에서 다음과 같은 것을 사용할 수 있습니다.

umask 022

umask 새로 생성 된 파일에 대한 파일 권한 설정 방법을 제어하는 ​​마스크 설정을 결정하는 명령입니다.


1
umask가 권한을 추가 할 수없는 권한을 제한하기 때문에 이것은 올바르지 않습니다
ACV

@ACV에 대해 자세히 설명해 주시겠습니까? 이것은 나를 위해 작동하며 새로 생성 된 파일을 사용하면 umask 002.bashrc에서 할 때 그룹 구성원이 rw 권한을 가질 수 있습니다 .
Arthur Dent 2018

3
@ArthurDent umask 002는 다른 사람에 대한 액세스를 제한하여 그룹을 변경하지 않습니다. 기억하세요. 그것은 ugo다른 사용자 그룹입니다. 또한 umask는 기본적으로 기본값에서 빼는 것을 의미합니다. 파일의 경우 : 666 - 002그룹이 영향을받지 않음을 의미하는 664를 의미합니다.
ACV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.