내 서버에는 디렉토리가 있습니다 /srv/svn
.
devFirmA
, devFirmB
및 와 같은 여러 그룹 소유권을 갖도록 이 디렉토리를 설정할 수 있습니까 devFirmC
?
요점은 subversion
여러 저장소에 걸쳐 여러 사용자를 관리하기 위해 버전 제어를 원하지만 어떻게 해야 할지 모르겠다는 것입니다.병합 /srv/svn
, 저장소의 루트 디렉터리, 권한. 예를 들어, FirmA
, FirmB
및 이라는 세 개의 회사가 있습니다 FirmC
. 이제 내부에 , 이라는 /srv/svn
세 개의 디렉토리를 만들었고 그 안에 각 프로젝트에 대한 저장소를 만들었습니다. 이제 내부의 모든 요소가 의 소유 이므로 권한 체계를 설정하는 방법을 모르겠습니다. 작동하지 않습니다. , 아니면 내가요? 잘못된?FirmA
FirmB
FirmC
/srv/svn
root:root
답변1
한 세트만 가질 수 있어요소유자.
그러나 사용하여액세스 제어 목록다른 그룹에 대한 권한을 정의할 수 있습니다.
ACL이 설치되어 있는지 확인하려면 명령을 실행하십시오 getfacl
. 시스템에 아직 ACL이 설치되어 있지 않은 경우 다음 위치에 있는 명령줄 도구를 설치하십시오.acl
팩그리고:sudo apt-get install acl
그리고getfacl
디렉터리나 다른 파일의 ACL 정보를 읽고 사용할 수 있습니다.setfacl
파일에 그룹을 추가할 수 있습니다.
예를 들어:
setfacl -m g:devFirmB:rwx /srv/svn/
devFirmB
그룹 추가아르 자형머리,승의식,e엑스디렉토리에 대한 권한을 실행합니다 /srv/svn
.
이 디렉터리에 생성된 파일을 둘 이상의 그룹이 소유하게 하려면 ACL을 기본 ACL로 설정하세요. 기본 그룹 항목에서 X
"소유자(또는 다른 사람)가 실행 가능한 경우 실행 허용"을 의미합니다.
setfacl -m g:devFirmB:rwx /srv/svn/
setfacl -d -m g:devFirmB:rwX /srv/svn/
답변2
이것은 매우 일반적인 질문이며 내가 올바르게 이해했다면 꽤 자주 접하게 되는 질문입니다. 모든 사소한 그룹화 문제를 해결하기 위해 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
답변3
기존 Unix 권한을 가진 둘 이상의 Linux 그룹이 파일을 소유할 수 없습니다. (하지만,ACL을 사용할 수 있습니다..)
그러나 다음 해결 방법을 사용하여 devFirms
해당 그룹의 모든 사용자를 포함하는 새 그룹(예: )을 생성할 수 있습니다 devFirmA
. 다음 명령을 사용하여 새 사용자 그룹을 생성할 수 있습니다.devFirmB
devFirmC
sudo addgroup NEWGROUPNAME
먼저 - 명령을 id-utils
얻으려면 설치해야 할 수도 있습니다 .lid
sudo apt-get install id-utils
그런 다음 다음 코드 줄을 실행하여 모든 사용자 SOURCEGROUP
를 TARGETGROUP
. 물론 복제하려는 각 그룹에 대해 명령을 한 번씩 실행해야 합니다. 대문자 자리 표시자를 실제 그룹 이름으로 바꾸는 것을 잊지 마십시오.
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: 한 그룹의 모든 사용자를 다른 그룹에 추가하시겠습니까?
답변4
여러 그룹이나 사용자에게 서로 다른 권한을 제공하려면 다음 명령을 사용하십시오(RHEL 6 및 7에서 테스트됨).
그룹의 새 소유자가 되려면 다음 단계를 따르세요.
setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>
현재 ACL 설정을 확인하려면:
getfacl <directory_name>