여러 사용자가 공유하는 프로젝트가있는 특정 디렉토리가 있습니다. 이 사용자는 SSH를 사용하여이 디렉토리에 액세스하고 파일을 수정 / 작성합니다.
이 프로젝트는 특정 사용자 그룹 만 쓸 수 있어야합니다. “mygroup”이라고합니다. SSH 세션 중에 현재 사용자가 만든 모든 파일 / 디렉토리는 기본적으로 “mygroup”그룹이 소유하고 그룹 쓰기 가능 권한을 가져야합니다.
다음과 같은 권한 문제를 해결할 수 있습니다 umask
.
$ cd project
$ umask 002
$ touch test.txt
“test.txt”파일은 이제 그룹 쓰기 가능하지만 “mygroup”이 아닌 기본 그룹 ( “mislav”, 사용자 이름과 동일)에 속합니다. 내가 할 수 chgrp
재귀 원하는 그룹을 설정합니다,하지만 난 umask를이 세션 동안 기본 권한을 변경 같은 암시 적으로 일부 그룹을 설정하는 방법이 알고 싶어.
이 특정 디렉토리는 작업 사본과 함께 공유 자식의 repo 내가 원하는 git checkout
과 git reset
작업은 작업 복사본에서 만든 새 파일에 대한 올바른 마스크와 그룹을 설정할 수 있습니다. OS는 Ubuntu Linux입니다.
업데이트 : 동료는 POSIX ACL 의 getfacl / setfacl을 살펴 봐야한다고 제안 하지만 umask 002
현재 세션에서 아래 솔루션을 결합하면 나에게 충분하며 훨씬 간단합니다.
답변
지정된 디렉토리 아래의 모든 파일이 그룹 권한을 상속 받으려면 디렉토리에서 setgid 비트를 사용해야합니다. 이 링크를 참조하십시오 .
$ mkdir test
$ sudo chown raphink.staff test
$ ls -lhd test
drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
$ sudo chmod g+s test # Set the setgid bit
$ ls -lhd test
drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
$ touch test/foo
$ ls -lh test
total 0
-rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo
답변
기존 폴더를 사용하여이 작업을 수행하려면 모든 하위 폴더에 대해 setgid 비트가 활성화되어 있는지 확인해야합니다. 그러나 파일에는 필요하지 않으며 파일에도 필요하지 않을 수 있습니다. 다음은 모든 하위 폴더에 대해 재귀 적으로 설정하는 방법입니다.
find /path/to/base/dir -type d -exec chmod g+s {} +
답변
소스를 찾을 수 없지만 setgid
베어 git 리포지토리에 대한이 문제를 해결하는 데 사용 합니다. 귀하의 경우는 더 이상 사용되지 않으며 경우에 따라 문제가 발생할 수 있습니다.
힘내는 core.sharedRepository
깃발을 통해이 모든 것을 처리 할 수 있습니다 . 나는 같은 문제가 있었고 다음과 같이 해결했다.
가정 repogroup
이 그룹이고 cd
repo 디렉토리에 있어야 합니다.
먼저 공유 플래그를 group
다음으로 변경하십시오 .
git config core.sharedRepository group
참고 : 여기서는 group
그룹 이름이 아닌 키워드를 사용해야합니다 . 이것은 옵션을 사용하여 Bare 저장소를 작성하는 것과 같습니다 --shared=group
.
그런 다음 전체 저장소의 그룹을 변경하십시오.
chgrp -R repogroup .
기존 디렉토리를 그룹 쓰기 가능 ( g+w
)하고 기존 실행 파일도 그룹 실행 파일 ( g+X
)이되도록하려면 다음을 수행해야합니다.
chmod -R g+wX .
이 작업을 수행하면 git은 shared=group
플래그 를 존중하고 기존 및 새 파일 모두에 대해 다음과 같은 그룹 권한을 관리하므로 다시 umask
또는에 다시는 필요하지 않습니다 chgrp
.
내가 찾은 소스를 주석에 넣을 것이다.
답변
답변
ACL을 사용하지 않고 Linux / UNIX에서 상위 디렉토리 권한을 상속하는 것은 어렵습니다. 그러나 기본 파일 권한을 할당하는 방법이 있습니다.