권한 구성

권한 구성

SSH를 통해 친구들과 git 저장소를 공유하고 있습니다. 그는 내 컴퓨터의 SSH 서버(공유 Git 저장소가 있는 곳)를 사용하여 자신의 Git 저장소에서 푸시하고 가져옵니다.

문제는 그가 커밋을 푸시할 때 커밋이 janito users rwx------(권한 메타데이터이기 때문에) 내가 끌어올 수 없다는 것입니다.

git이라는 그룹을 만들고 그와 나 자신을 추가했으며 저장소는 입니다 . 권한에 대해 걱정하지 않고 항상 끌어오고 푸시할 수 있도록 jpmelos git rwxrwx---저장소 디렉터리에 생성된 파일도 강제로 적용하려면 어떻게 해야 합니까 ?<creator> git rwxrwx---

물론, 아니면 문제에 대한 더 나은 해결책을 생각해낼 수도 있습니다. 제한 사항은 내 컴퓨터에서 SSH를 사용해야 한다는 것입니다(아직 코드를 노출할 준비가 되지 않았습니다). 작업 저장소와 별도로 생성한 베어 저장소에서 이미 푸시 및 풀을 수행하고 있습니다.

감사해요!

답변1

umask 문제는 Git 구성 변수를 통해 해결할 수 있습니다 core.sharedRepository.

( cd /path/to/shared-repository.git &&
git config --bool core.sharedRepository true
)

Git은 새 파일이나 디렉터리를 생성할 때마다 그룹 비트가 올바르게 설정되었는지 확인합니다(호출하는 사용자의 umask가 너무 "넓은" 경우에도 항상 그룹 읽기 가능, 그룹 쓰기 가능, 적절한 경우 실행 가능).
참고: 이 core.sharedRepository설정은 Git 자체에서 생성된 항목에만 적용되므로 기본이 아닌 저장소의 작업 트리에 있는 항목에 대한 권한을 설정하는 데에는 도움이 되지 않습니다. 이를 위해서는 umask를 수동으로 설정해야 합니다.

git그룹이 소유할 새 파일과 디렉터리를 설정할 수 있습니다.디렉토리의 setgid 비트( chgrp적절한 그룹에 파일과 디렉터리를 추가한 후)

chgrp -R git /path/to/shared-repository.git &&
find /path/to/shared-repository.git -type d -exec chmod g=rwxs '{}' \;

처음부터 새 저장소를 생성하는 경우 chgrp빈 디렉토리를 생성하고 git init --shared실행하면 됩니다(Git이 GIT_DIR에서 작업을 설정하고 수행합니다 core.sharedRepository).chmod g=rwxs

mkdir new-shared.git &&
chgrp git new-shared.git &&
git init --bare --shared new-shared.git

답변2

친구의 umask 설정은 무엇입니까? 그에게 umask서버의 명령 프롬프트에 입력하고 무슨 일이 일어나는지 확인하게 하세요. 0077(또는 ) 로 표시되면 077"파일이 생성될 때 그룹 또는 다른 그룹에 대한 모든 권한 비트를 지웁니다"를 의미하므로 문제가 될 수 있습니다.

더 적절한 umask는 0027생성된 파일에 대한 그룹 읽기 및 실행 권한을 허용하는 것입니다. 를 실행하여 일시적으로 설정할 수도 있고 또는 umask 0027에 추가하여 ~/.profile영구적으로 설정할 수도 있습니다 ~/.bash_profile.

답변3

Git 후크로 사용자 정의 스크립트를 작성하면 이 작업을 수행할 수 있다고 생각합니다. Git 저장소를 복제하는 모든 사람이 이를 사용할 수 있는 한 모든 스크립팅 언어가 가능합니다.Pro Git에서 Git 후크에 대해 알아보세요.

답변4

고려해야 할 기타 사항:

pam_umask

pam을 사용하여 umask를 제어하려면 다음 UsePAM yes을 사용하여 sshd_config에서 설정하십시오 /etc/pam.d/sshd.

session    optional     pam_umask.so umask=0027

액세스 제어 목록

읽다Gilles의 게시물은 여기에 있습니다.. 여기에는 설치 지침이 포함되어 있습니다. 이것이 어리석은 질문인지는 모르겠지만 이 페이지는 읽어볼 가치가 있습니다. :-)

기존 저장소에서 acl을 수정하려면 다음 안내를 따르세요.

find git_repository/ -type d -exec setfacl -m d:g:git:rwx {}
find git_repository/ -f -exec setfacl -m g:git:rwx {}

퀵 앤 더티: 후크

앞에서 언급한 대로 후크를 생성하고 다음 git_repository/hooks/post-update과 같이 편집합니다.

#!/bin/sh
chmod -R g+w . 2>/dev/null
chgrp -R git . 2>/dev/null

이렇게 하면 업데이트할 때마다 문제가 해결되며 소규모 저장소와 사용자 2명에게는 문제가 없을 수 있습니다. 크고 바쁜 저장소에는 적합하지 않을 수 있습니다 ;-)

관련 정보