logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

Git 서버 구축 - 우분투[Ubuntu]

by digipine posted Nov 02, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

우분투에서 Git 서버를 구축하는 방법에 대한 설명으로 협업환경을 구축하거나 로컬 저장소 이외의 백업저장소의 개념으로 사용될 수 있습니다.

 

Git 서버를 구축하기전에 GitHub나 Gitlab등을 온라인으로 무료로 사용할 수 있음을 고려해봐야 한다. 공개형 프로젝트라면 GitHub를 비공개형 프로젝트라면 GitLab을 사용하면 굳이 따로 서버를 마련할 필요가 없다.

 

  Git GitHub GitLab
서비스 유형 패키지/소스 설치 제공  온라인 서비스 패키지/소스/온라인 서비스 제공
온라인 서비스 제약 없음 공개 프로젝트는 유료 저장소당 1Gb의 용량제한

아래에선 OpenSSH 서버가 설치되어 있고 프로토콜로 SSH를 사용한다는 가정하에 진행한다.

 

Git 최신버전 설치

 

우분투 12.04.02에서 git 설치시 1.7.9 버전이 설치된다. 최신버전을 사용하기위해서는 PPA를 사용해야 한다.
PPA를 사용할 때 쓰는 add-apt-repository 명령어가 작동하지 않으면 python-software-properties를 설치하고, 그래도 문제가 생기는 경우에는 software-properties-common을 설치하면 된다.
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git-core
git version

 


Git 접근 권한 관리

 

git에 접근하는 권한을 설정하는 방법에는 아래와 같은 세가지 방법이 있다.


1. SSH로 접근가능한 유저들의 계정을 생성하는 방법

이 방법은 서버에 접근할 유저들의 계정을 생성해주고 접근할 저장소에 권한을 부여해야 되기 때문에 보안상 아래의 두가지 방법보다 취약하고 관리자의 노고가 따르기 때문에 추천하지 않는다.

 

2. 대표계정(git)을 생성해 접근하는 사용자 관리

이 방법은 대표유저(git)를 생성하고 SSH key를 이용해 등록된 사용자에게 최소한의 권한을 부여하는 방식으로 권한 설정이 복잡하지 않은 저장소를 이용할때 많이 사용한다. 다만 저장소에 접근이 허락된 사용자들은 다른 저장소 또한 push / pull 이 가능하기에 세심한 주의가 필요한 경우에는 추천되지 못한다.

 

3. gitolite 툴을 이용한 접근 관리

여러개의 저장소를 운영하고 각각의 접근 권한을 원하는데로 설정하기 위해 추천되는 방식이다. 각각의 branch, tag, 저장소별 접근 권한을 설정할 수 있고 그룹관리가 가능해진다. 또한, 공개/비공개형의 저장소 설정이 편리하다.
여기서는 2번의 방법에 대한 설명을 하고 차후 3번의 방법을 설명한다.
대표계정(git)을 생성해 접근하는 사용자 관리

대표계정을 생성하고 저장소 권한 변경

 

# 사용자 생성, 비밀번호 입력
sudo adduser git

 

# git 사용자로 로그인
su git

 

 

Git 원격 저장소 설정


위에서 생성한 git 계정은 커밋(commit)에는 아무런 영향도 끼치지 않고 접속하는데 사용된다.
git 사용자의 홈 디렉토리에 SSH-key 등록

 

# 홈디렉토리로 이동
cd ~  

 

# .ssh 디렉토리 생성
mkdir .ssh

 

# 권한 변경
chmod 700 .ssh  

 

# 서버로 공개키를 전송하고 등록
cat id_rsa.pub >> ~/.ssh/authorized_keys

 

# 권한 변경
chmod 600 ~/.ssh/authorized_keys

 

# 전송받았던 사용자키 삭제
rm -rf id_rsa.pub


git 저장소에 접근허가를 할 사용자들의 공개키를 어떤 방식으로든 전송받아(이메일) 계속 등록해주면 된다.
접근 테스트는 ssh git@서버주소로 접속해서 암호를 묻지않고 바로 접속되면 SSH-Key 등록이 완료된 것이다.

 

 

보안을 위한 쉘기능 제한

 

git 계정으로 접속한 유저들이 할당된 권한으로 서버를 휘젓고 다니면 안되므로 이를 제한한다.
sudo vi /etc/passwd

  git:x:1001:1001:,,,:/home/git:/bin/bash


위의 git 계정을 찾아 /bin/bash 부분을 /usr/bin/git-shell 로 변경한다.
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

 

다시 접속해보면 접속이 거부된다.

최초로 원격저장소를 생성하는 경우

 

cd /home/git/repos/test_project.git
git init --bare --shared
git remote add origin ssh://git@192.168.1.22/home/git/repos/test_project.git
git add .


git commit -m "inital commit"
git add README.TXT
git commit -m "first commit"
git push origin master

 

기존에 사용하던 저장소가 있는 경우

git clone --bare --shared URL주소

 


접근 테스트

 

클라이언트에서 리모트 저장소를 내려받는다.
git clone ssh://git@서버주소/home/git/repos/test_project.git

 

기존에 사용하던 remote 제거하기
git remote remove origin


TroubleShooting

레파지토리 퍼미션에 문제가 있다면 다음 오류 구문을 보게 될것이다.
insufficient permission for adding an object to repository database ./objects
해당 레파지토리로 이동해서 다음을 실행하자.


cd /home/git/repos
sudo chmod -R 770 *

 

그래도 안된다면 다음과 같이 sharedrepository옵션을 true로 지정하자.
sudo git config core.sharedrepository true

 

TAG •

List of Articles
No. Subject Author Date Views
64 리눅스 /dev/random을 이용한 랜덤값 생성 엉뚱도마뱀 2017.11.22 1554
63 난수발생기 개론 엉뚱도마뱀 2017.11.22 4311
62 RSA 암호화 알고리즘 개요 file 엉뚱도마뱀 2017.11.17 1036
61 악성코드 종류 구분 digipine 2017.11.13 960
60 대칭키 암호화관련 개념 정리 digipine 2017.11.09 1640
59 Ubuntu 16 에 mysql 5.7 설치 및 원격 설정 file digipine 2017.11.08 1484
58 Ubuntu 16 에 JAVA 1.7.0 jdk 설치 하기 digipine 2017.11.07 1414
57 윈도우 한영 전환 쉬프트 스페이스로 변경 digipine 2017.11.03 413
56 우분투 Nabi 한글 입력기 Tray(트레이) 상단 메뉴바로 옮기기 digipine 2017.11.03 1630
55 Ubuntu 12.0.4 LTS에 Nabi 나비 설치하기 digipine 2017.11.03 620
54 Linux init.d 에서 등록하기. 부팅 시 자동실행 설정 digipine 2017.11.03 12566
53 초고속망 통신사 DNS 서버 주소 모음 - DNS 설정 digipine 2017.11.03 2630
52 git 환경 설정 및 명령어 정리 digipine 2017.11.03 425
51 유닉스/리눅스 명령어 레퍼런스 digipine 2017.11.03 745
50 포렌식을 활용한 정보보호 digipine 2017.11.02 434
49 소프트웨어 테스팅 전문가들을 위한 사이트 digipine 2017.11.02 609
48 MacOS 10.12.2 (OSX) KERNEL DEBUGGING file digipine 2017.11.02 1451
47 MacOS 10.12.2 (OSX) 보안 취약점 공격 기초 digipine 2017.11.02 663
46 MacOS 10.12.2 (OSX) 보안 취약점 공격 코드 2 file digipine 2017.11.02 1555
45 MacOS 10.12.2 (OSX) 보안 취약점 공격 코드 digipine 2017.11.02 605
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6