Git 저장소 만 사용하도록 제한된 권한을 가진 SSH 사용자 작성


12

ssh를 통해 원격으로 사용하는 git 저장소가 SunOS 서버에 호스팅되어 있습니다.

git clone ssh://myUser@mydomain.com/path/to/git

이제 해당 리포지토리에 액세스하려면 더 많은 사용자를 추가해야하지만 방법을 잘 모르겠습니다.

ssh 에 하나의 testUser 를 추가 했지만 git 만 사용하도록 사용자 권한을 제한 할 수는 없습니다.

testUser 는 전체 서버를 ssh하고 탐색 할 수 있습니다.

원격으로 만 git에 액세스 할 수있는 사용자를 만들거나 복제 / 풀 / 푸시 등을 할 수있는 방법은 무엇입니까?

감사

답변:


12

여러 git-shell 사용자 (및 저장소에 대한 액세스를 공유 할 수있는 필수 그룹 및 그룹 권한) 를 설정하는 대신 단일 사용자에서 gitolite 를 사용하는 것을 고려할 수 있습니다 .

gitolite서버 의 단일 일반 사용자로 실행되며 SSH 공개 키를 사용하여 Git 리포지토리에 대한 액세스를 차별화합니다 ( gitolite 가 SSH 기반 식별을 수행 하는 방법에 대한 자세한 내용은“ gitolite가 ssh를 사용하는 방법 ”참조 ). gitolite 는 리포지토리, 브랜치 및 경로 별 액세스 제어를 제공합니다.


1
gitosis의 경우 +1 ...이 설정을 위해 정확하게 만들어졌습니다.
Jeremy Bouse

12

기본적으로 두 가지 옵션이 있습니다.

  1. topdog에서 언급했듯이 서버에서 사용자를 만들 때 쉘을 git-shell ( book entry here )로 설정 하십시오 . 이를 통해 사용자는 SSH를 통해 로그인 할 수 있지만 일반적인 모든 기능을 갖춘 쉘 (예 : sh, bash 등)을 실행하는 대신 git 기능 만 액세스 할 수있는 git-shell이 ​​실행됩니다.

  2. 또는 TCP ( git-deamon 사용 ) 또는 HTTP / HTTPS 와 같은 다른 프로토콜을 통해 리포지토리를 사용할 수있게 만들 수도 있습니다 . 그래도 읽기 전용 액세스와 같은 시나리오를 권장합니다.

사용자에게 '푸시'기능을 지원하고 싶다고 언급 했으므로 옵션 # 1을 사용해야합니다.


5

쉘을 git-shell로 변경하면 git 함수에만 액세스 할 수 있습니다.


감사합니다. 기본적으로 사용자는 자신의 Mac에서 자신의 자식 쉘을 사용합니다. 나는 그가 서버에 ssh 할 수 있기를 정말로 원하지 않습니다. 따라서 git repo가 ​​testUser computer / Mac의 mydomain.com에 있으면 터미널에서 git clone ssh : //myUser@mydomain.com/path/to/git에 암호를 묻는 메시지가 표시되면 repo를 다운로드하십시오. 방금 그의 쉘을 git-shell로 설정하려고했습니다. 복제 호출시 프롬프트가 표시되지만 비밀번호가 거부됩니다.
Bach

서버에서 원하는 모든 것이 git 명령을 실행하고 쉘을 실행할 수없는 경우 myUsers 쉘을 git-shell로 설정해야합니다. 비밀번호 프롬프트에 대해서는 키를 사용하십시오. 서버에서 git에 대한 자세한 내용은 무료 git book progit.org/book/ch4-0.html을 참조하십시오
topdog

책 참조 주셔서 감사합니다! 매우 도움이됩니다. gitolite를 사용하여 종료되었지만 여전히 설정에 문제가 있습니다.
Bach

git-shell : "이것은 제한된 Git 액세스를 제공하기위한 SSH 계정의 로그인 쉘입니다. pull / push 기능을 구현하는 서버 측 Git 명령과 git-shell-commands라는 하위 디렉토리에있는 사용자 정의 명령 만 실행할 수 있습니다. "사용자의 홈 디렉토리." Linux에서 "/ bin / git-shell"을 "/ etc / shells"에 추가 한 다음 "usermod --shell / bin / git-shell $ USER"를 추가하십시오. BTW, 힘내 책에서 지금 git-scm.com/book/en/ch4-0.html
데이비드 Tonhofer

0

또 다른 방법은 ssh 내에서 사용자의 액세스를 제한하는 것입니다.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

예는 한 명의 사용자 만 사용하는 것이지만 사용자가 같은 그룹에 있으면 그룹 지시문을 사용하여 필터링 할 수 있습니다. 같은 것

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.