Linux & Development

ssh 기반 다중 사용자 git server

DaehanCNI 2022. 7. 3. 21:51

목표

ssh 기반의 git 서버 운영 및 다중 사용자가 공유하는 git 서버 운영 방법 (git repository 생성)

 

필요 작업

  •  git 전용 unix (user) group 생성
    • git 사용자가 등록해야하는 group
  •  git 전용 group 기반 git repository 생성
    • git 전용 group 에 등록된 user는 모두 git repository 접속 가능
    • git 전용 group 에 등록되지 않은 user 는 접속 불가

 

기본 git repository 생성 방식

  • 웹에서 흔히 찾을 수 있는 기본적인 git repository 생성 방식
  • git repository 소유자 (git repository 생성자) 만 pull / push 가능
  • 다중 사용자 공유 목적으로는 적합하지 않음

$ git init --bare SAMPLE_REPOSITORY.git
$ ls -ld SAMPLE_REPOSITORY.git
drwxr-xr-x 7 YOUR_USER_ID YOUR_GROUP_ID 200  6월 24 15:56 SAMPLE_REPOSITORY.git

접근 권한 설명

  • rwx r-x r-x 권한
  • SAMPLE_REPOSITORY 소유자만 쓰기 가능
  • SAMPLE_REPOSITORY 소유그룹/other 는 읽기만 가능

 

다중 사용자가 공유하는 git repository 생성 준비

  • UNIX 파일 시스템의 setgid 설정을 사용하여 (rwx rwx ---) 파일 소유 그룹에 속한 모든 사용자에게 권한 부여
    • 참고 : 

https://unix.stackexchange.com/questions/28363/whats-the-difference-between-s-and-s-in-ls-la/28412#28412

 

What's the difference between "s" and "S" in ls -la?

When I ls -la, it prints many attributes. Something like this: -rwSrwSr-- 1 www-data www-data 45 2012-01-04 05:17 README Shamefully, I have to confess I don't know the exact meaning of each

unix.stackexchange.com

  • git repository 생성 시, 위의 setgid 가 활성화되도록 git repository 생성
  • 위의 setgid 설정을 사용하기 위하여 별도의 git 전용 group 생성

 

git 전용 group 생성

$ sudo groupadd git
$ cat /etc/group
……
git:x:2000:
……

 

git 전용 user 생성

  • 해당 유저는 실제로 로그인하여 사용하는 유저가 아님
  • 단순히, git repository 의 소유자를 표기하기 위한 용도 
$ sudo useradd --gid git --shell /sbin/nologin --no-create-home git

 

신규 유저에 git 전용 group 추가

  • 공유 git respository 에 접근할 모든 사용자에게 group 설정 필요
  • 신규 유저에게 git 접근 권한을 추가하는 경우에만 작업하면 됨. 
$ sudo usermod -aG git NEW_USER_ID
$ cat /etc/group
...
git:x:2000:OLD_USER_ID,NEW_USER_ID
...

 

그룹 공유 git repository 생성

  • 위의 git 유저 / git 그룹으로 git repository 생성
  • git repository 생성 시 --shared 옵션 사용
  • 신규 git repository 를 생성할 때 마다 매번 작업 필요 

 

그룹 공유 git repository 경로

  • /home/git 디렉토리 사용
    • linux OS가 설치된 파티션이 아닌 다른 파티션 사용 (재설치 시, 파일 유지 목적)
  • /home/git -> /git 로 symlink 연결해서 사용
    • git push & pull 시, 경로를 쉽게 표기하기 위한 목적 (직관적 주소 사용)
    • 기본 주소 : ssh://IP_ADDR/home/git/SOME-GIT.git
    • 쉬운 주소 : ssh://IP_ADDR/git/SOME-GIT.git 
    • 실제 사용 시, 2개 주소 모두 사용 가능
  • 디렉토리 권한 설정
    • rwx r-x --- 값 사용
    • git user 만 repository 생성 가능하도록 설정
    • git group 에 속하지 않은 유저는 접속 차단
$ ls -ld /home/git
drwxr-x---. 14 git git 220 22-05-30 16:04:43 /home/git/

 

repository 생성

$ sudo -u git -g git git init --bare --shared /git/GROUP_SHARED_REPOSITORY.git
$ ls -ld /git/GROUP_SHARED_REPOSITORY.git
drwxrwsr-x 7 git git 200 22-06-24 16:52:53 GROUP_SHARED_REPOSITORY.git

 

other 접근 권한 제거

$ sudo chmod o-rwx /git/GROUP_SHARED_REPOSITORY.git
$ ls -ld /git/GROUP_SHARED_REPOSITORY.git
drwxrws--- 7 git git 200 22-06-24 16:52:53 GROUP_SHARED_REPOSITORY.git

 

git repository clone 방법

git 서버가 아니라 git repository pull 을 진행할 컴퓨터에서 작업 (개발자 컴퓨터)

$ git clone ssh:/IP_ADDR/git/GROUP_SHARED_REPOSITORY.git

'Linux & Development' 카테고리의 다른 글

mpt3sas Module 업데이트  (0) 2024.03.13
리눅스 네트워크 브릿지(Linux Network Bridge)  (0) 2023.07.07
KVM에서 Ubuntu 설치  (0) 2023.06.21
WINDOWS에서 VPN 연결하기  (0) 2020.09.02
Install Ansible on CentOS  (0) 2020.08.23