여러 그룹을 디렉토리 소유자로 설정


31

내 서버에는 directory가 /srv/svn있습니다.

그것이 가능 예를 들어 다수의 그룹 소유권을 가지고이 디렉토리를 설정 devFirmA, devFirmB그리고 devFirmC?

요점은 subversion여러 리포지토리에 대해 여러 사용자 를 버전 제어로 관리하고 리포지토리 의 루트 디렉토리 인 권한 을 병합 하는 방법을 모른다 /srv/svn는 것입니다. 나는 예, 세 회사를 위해,이 FirmA, FirmB그리고 FirmC. 내부 지금, /srv/svn나는 세 개의 디렉토리, 만든 FirmA, FirmB, FirmC그들 내부에서 나는 각 프로젝트에 대한 저장소를 만들었습니다 지금은 모든 elementes가 내부에 있기 때문에 권한 체계 구축하는 방법을 모른다 /srv/svn가 소유 root:root, 확인하지 않은를, 또는 내가 잘못된?


1
회사 그룹이 서로 파일에 액세스합니까? 아니면 부모 디렉토리를 공유하는 것 외에 완전히 분리되어 있습니까?
JM Becker

@TechZilla 회사 그룹은 서로의 파일에 액세스 할 수 없으며, 반드시 분리되어야하며 모든 디렉토리에 액세스 할 수 있어야합니다.
KernelPanic

OK, 나는 정답을 올렸으므로 ACL을 사용해서는 안됩니다. 그들은 최후의 수단 옵션입니다.이 문제는 여전히 매우 일반적인 것입니다.
JM Becker

답변:


16

내가 정확하게 이해하고 끊임없이 문제가 발생하면 이것은 매우 일반적인 문제입니다. 모든 사소한 그룹화 문제에 ACL을 사용했다면 관리 할 수없는 수많은 시스템이 필요할 것입니다. 이 상황이 아닌 다른 방법으로는 할 수 없을 때 모범 사례를 사용하고 있습니다. 이것이 제가 강력하게 추천하는 방법입니다.

먼저 umask를 002로 설정해야합니다. 이것은 그룹이 자신과 공유 할 수 있도록하기위한 것입니다. 나는 보통과 같은 파일 /etc/profile.d/firm.sh을 만든 다음 umask로 테스트 명령을 추가합니다.

[ $UID -gt 10000 ] && umask 002

다음으로 디렉토리를 해당 그룹으로 설정해야합니다.

chgrp -R FirmA /srv/svn/FirmA 
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC

마지막으로 SGID 비트를 올바르게 설정해야 그룹이 항상 설정 한대로 유지됩니다. 이렇게하면 기록 된 파일이 기록기의 GID로 설정되지 않습니다.

find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775

find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664

마지막으로 다른 사용자가 디렉토리에 액세스하지 못하게하려는 경우.

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC

2
경고 : 이것은 작동하지만 모든 파일에서 실행 권한 비트를 제거합니다. 디렉토리 트리에 문서 만있는 경우에는 괜찮습니다. 실행 파일이 포함되어 있으면 실행이 차단되어 설정이 손상 될 수 있습니다.
Stéphane Gourichon

1
이것은 좋은 생각 일 수도 있지만 질문에 전혀 대답하지는 않습니다.
11

여기에 설명 된대로 세 회사의 폴더 만 분할하여 각 회사의 구성원 만 해당 파일 만 수정할 수 있습니다. 'svn'에 필요한 액세스 권한을 부여하지 않습니다.
리치 p

그러나 이것은 매우 가깝습니다. 빠진 것은 모든 그룹에 액세스 할 있도록하는 것입니다. 로그인이 svnadmin다음 과 같다고 가정하면이 단계를 추가하십시오 . sudo usermod -a -G FirmA,FirmB,FirmC svnadmin 이렇게하면이 svnadmin모든 그룹에 추가 됩니다. 이 모든 그룹의 파일에는 '그룹 쓰기'가 활성화 chmod 664되어 있으므로 (이 작업을 수행 했으므로) firmX는 firmX가 소유 한 파일의 유일한 작성자입니다.
리치 p

1
더 낫다-더하기 / 빼기를 ​​원하는 것을 더하거나 빼기위한 권한 변경-예를 들어find /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
rich

25

하나의 그룹 만 소유자 로 가질 수 있습니다 .

그러나 액세스 제어 목록 을 사용하면 다른 그룹에 대한 권한을 정의 할 수 있습니다.

명령을 실행하여 ACL이 설치되어 있는지 확인하십시오 getfacl. 시스템에 ACL이 설치되어 있지 않은 경우 다음 과 같이 acl패키지 에있는 명령 행 도구를 설치하십시오 .sudo apt-get install acl

함께 getfacl사용하면 디렉토리 나 다른 파일의 ACL 정보를 읽을 수 있습니다 setfacl파일로 그룹을 추가 할 수 있습니다.

예를 들면 다음과 같습니다.

setfacl -m g:devFirmB:rwx /srv/svn/  

그룹 추가 devFirmBr에 EAD, w 의식, 전자 X 디렉토리에 ecute 권한을 /srv/svn.

해당 디렉토리에서 작성된 파일을 여러 그룹이 소유하게하려면 ACL을 기본 ACL로 설정하십시오. X기본 그룹 항목 수단의는 "소유자 (또는 다른 사람)에 의해 실행하면 실행을 허용 할".

setfacl -m g:devFirmB:rwx /srv/svn/  
setfacl -d -m g:devFirmB:rwX /srv/svn/  

6

전통적인 Unix 권한을 가진 여러 Linux 그룹이 소유 한 파일을 가질 수 없습니다. (그러나 ACL로 가능합니다 .)

하지만 당신은 다음과 같은 해결 방법을 사용하여 새 그룹 (예를 들면라는 만들 수 있습니다 devFirms그룹의 모든 사용자를 포함) devFirmA, devFirmBdevFirmC.
다음을 사용하여 새 사용자 그룹을 만듭니다.

sudo addgroup NEWGROUPNAME

먼저 -command id-utils를 얻기 위해 설치해야 할 수도 있습니다 lid.

sudo apt-get install id-utils

그럼 당신은 모든 사용자 복사 쉽게 다음 코드 줄을 실행할 수 있습니다 SOURCEGROUPTARGETGROUP. 물론 복사하려는 각 그룹에 대해 명령을 한 번 실행해야합니다. 대문자 자리 표시자를 실제 그룹 이름으로 바꾸는 것을 잊지 마십시오.

for u in $(lid -g -n SOURCEGROUP); do sudo usermod -a -G TARGETGROUP $u; done

따라서 귀하의 경우 명령을 한 번에 모두 실행해야합니다.

sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do sudo usermod -a -G devFirms $u; done

이 명령 은 소스 그룹의 현재 구성원 인 모든 사용자 만 복사합니다 . 나중에 추가되는 모든 사용자는 adduser명령 을 사용하여 공통 그룹에 수동으로 추가해야합니다 . 대문자로 된 자리 표시자를 실제 사용자 및 그룹 이름 ( devFirms)으로 다시 바꾸십시오 .

sudo adduser NEWUSER TARGETGROUP

Unix & Linux.SE의 Justin Ethier 의 답변에 감사드립니다 . 한 그룹의 모든 사용자를 다른 그룹에 추가 하시겠습니까?


@ 질문 내 질문 업데이트에서와 같이 여러 사용자가있는 Subversion 서버 다중 저장소에 대한 계획이 작동합니까?
KernelPanic

2

아니요, 불가능합니다.

각 파일 (및 디렉토리)에는 하나의 사용자와 하나의 그룹 만있을 수 있습니다.


6
동일하거나 유사한 결과를 얻을 수있는 대체 방법을 제공하는 것이 좋습니다.
바이트 사령관

2

여러 그룹 또는 사용자에게 다른 권한을 제공하려면 다음 명령을 사용하십시오 (RHEL 6 및 7에서 테스트 됨).

그룹의 새로운 소유자를 만들려면 :

setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>

현재 acl 설정을 확인하려면

getfacl <directory_name>

테스트, 우분투 16.04.3에서도 작동
Dmitry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.