
여기에서는 SEED Ubuntu 16.04 VM에 실습 환경을 구축합니다. SQL 인젝션 취약점을 공격하기 전에 먼저 VM에 Go Git Service(GOGS)를 설치해야 합니다. VM을 설정하는 단계는 다음과 같습니다.
1단계: 데이터베이스 설치 시스템에 로그인한 후, 라이브러리와 저장소가 업데이트되었는지 확인하기 위해 다음 명령을 실행해야 합니다. $ sudo apt-get -y update
백엔드에서 MySQL 서버를 사용하므로 VM에 MySQL 서버를 설치해야 합니다. 다음 명령으로 설치할 수 있습니다: $ sudo apt-get – y install mysql-server
데이터베이스 설치 중에 시스템은 데이터베이스의 root 사용자 비밀번호를 요구합니다. 이제 gogs.sql이라는 파일을 생성합니다. 여기서는 nano를 사용했지만 어떤 파일 편집기든 괜찮습니다.
그런 다음 다음 SQL 문을 gogs.sql 파일에 붙여넣고 저장합니다.
DROP DATABASE IF EXISTS gogs;
CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8 COLLATE utf8_general_ci;
이제 다음 명령을 사용하여 MySQL로 gogs.sql 파일을 실행해 GOGS 데이터베이스를 생성합니다:
$ mysql – u root -p < gogs.sql
그런 다음 데이터베이스 설치 단계에서 생성한 root 비밀번호를 입력하라는 메시지가 표시되며, 입력하면 GOGS 데이터베이스를 성공적으로 구축할 수 있습니다.
소스에서 GOGS를 설치하려면 Git 및 Mercurial과 같은 버전 관리 도구가 필요합니다. VM에 이러한 도구를 설치하려면 다음 명령을 사용합니다: $ sudo apt-get -y install mercurial git
2단계: Go 설치 GOGS는 Go 프로그래밍 언어로 작성되었으므로 GOGS를 컴파일하기 전에 Go를 설치해야 합니다.
먼저 설정해야 할 몇 가지 환경 변수가 있습니다. 이를 설정하기 위해 ~/.bashrc 파일을 편집하고 다음 줄을 추가한 후 저장합니다:
export GOPATH=/home/git/go
export GOROOT=/usr/local/src/go
export PATH=${PATH}:$GOROOT/bin
변경 사항이 제대로 적용되었는지 확인하기 위해 다음 명령을 실행합니다: $ source ~/.bashrc
이제 wget 명령을 사용하여 컴파일된 Go 버전 중 하나를 설치합니다. 명령은 다음과 같습니다: $ wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
그런 다음 다음 명령으로 압축을 해제합니다: $ tar zxf go1.4.2.linux-amd64.tar.gz
파일 압축이 해제되면 작업 디렉터리를 ~/.bashrc에 정의된 $GOROOT로 변경합니다. 이에 대한 명령은 다음과 같습니다:
$ sudo mv go $GOROOT
이제 다음 명령으로 VM에 Go가 설치되었는지 확인합니다: $ go
필요한 모든 문서가 포함된 Gogs 폴더에 접근하려면 Gogs 폴더를 $GOPATH/src/github.com/gogits/gogs 경로로 git clone하면 됩니다.
다음 명령으로 수행할 수 있습니다:
$ cd $GOPATH/src/github.com/gogits/gogs
이제 다음 명령을 사용하여 Gogs 서비스를 관리할 Supervisor를 설치합니다: $ sudo apt-get -y install supervisor
VM에 Supervisor가 설치되었으므로 이제 Supervisor 구성 섹션을 만들어 Gogs 데몬을 생성합니다. 그러려면 먼저 로그 파일의 위치를 정의해야 합니다. 로그 파일의 위치는 /var/log/gogs입니다. 이에 대한 명령은 다음과 같습니다:
$ sudo mkdir -p /var/log/gogs
로그가 저장될 위치가 정의되었으므로 이제 /etc/supervisor/supervisord.conf에 있는 Supervisor 구성 파일을 편집합니다. 이에 대한 명령은 다음과 같습니다:
$ sudo nano /etc/supervisor/supervisord.conf
Gogs 섹션을 만들기 위해 파일에 다음 내용을 추가합니다:
[program:gogs] directory=/home/git/go/src/github.com/gogits/gogs/ command=/home/git/go/src/github.com/gogits/gogs/gogs web autostart=true autorestart=true startsecs=10 stdout_logfile=/var/log/gogs/stdout.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/gogs/stderr.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment = HOME="/home/git", USER="git" user = git
위 코드는 Gogs를 시작하고, Supervisor를 시작하며, 로그 파일의 위치와 해당 환경 변수를 제공하기 위해 실행하려는 명령을 정의합니다. 이제 변경 사항을 적용하기 위해 다음 명령으로 Supervisor를 재시작합니다: $ sudo service supervisor restart
Gogs가 실제로 실행 중인지 확인하려면 다음 명령을 사용합니다:
$ ps -ef | grep gogs
ps 명령은 활성 프로세스에 대한 정보를 표시하며, 해당 결과를 grep하여 Gogs 관련 정보를 얻습니다.
서버가 실행 중인지 확인하는 또 다른 방법은 다음 명령으로 stdout.log 파일을 확인하는 것입니다:
$ tail /var/log/gogs/stdout.log
이제 설치 페이지가 표시되는 웹 페이지에 접속할 수도 있습니다. 해당 URL은 다음과 같습니다: http://10.0.2.15:3000
4단계: Nginx를 리버스 프록시로 설정 먼저 Nginx를 설치해야 합니다. 다음 명령으로 설치합니다: $ sudo apt-get -y install nginx
이제 Gogs용 Nginx 구성 파일을 생성합니다. 이 파일은 etc/nginx/sites-available/gogs에 위치합니다. 파일에 다음 코드도 추가합니다:
server { listen 80; server_name “ADD IP ADDRESS HERE!!!”;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://localhost:3000;
}
}
Nginx가 파일에 접근할 수 있도록 심볼릭 링크도 만들어야 합니다. 심볼릭 링크는 /etc/nginx/sites-available/gogs와 /etc/nginx/sites-enabled/gogs 사이에 생성됩니다. 다음 명령으로 심볼릭 링크를 만들 수 있습니다:
$ sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/gogs 마지막으로 가상 호스트 구성을 활성화하려면 Nginx 서비스를 재시작해야 합니다. 재시작 명령은 다음과 같습니다: $ sudo service nginx restart
이제 이전에 사용한 URL을 포트 번호 없이 접속할 수 있습니다. URL은 다음과 같습니다: http://10.0.2.15
5단계: Gogs 초기화 Gogs를 초기화하려면 먼저 서버 웹 페이지에서 특정 정보를 입력해야 합니다. 해당 URL은 다음과 같습니다: http://10.0.2.15/install
첫 번째 섹션에서는 데이터베이스에 대한 정보를 입력합니다. 우리의 경우 MySQL입니다. 필드는 다음과 같습니다:
데이터베이스 유형: MySQL 호스트: 127.0.0.1:3306 사용자: root 비밀번호: seedubuntu 데이터베이스 이름: gogs
두 번째 섹션에서는 Gogs의 일반 설정을 입력합니다. 이에 대한 필드는 다음과 같습니다: 저장소 루트 경로: /home/git/gogs-repositories 실행 사용자: git 도메인: 10.0.2.15 HTTP 포트: 300 애플리케이션 URL: http://10.0.2.15:3000
그런 다음 관리자 계정 설정에서 관리자 사용자 이름과 비밀번호 설정을 수정합니다.
이제 "Install Gogs"를 클릭하고 로그인합니다.
6단계: Gogs 테스트
Gogs가 실제로 설계된 대로 작동하는지 확인하기 위해 간단한 pull/push 테스트를 수행합니다.
먼저 URL http://10.0.2.15/repo/create로 이동하여 my-test-repo라는 이름의 저장소를 생성합니다.
필요한 모든 정보를 입력한 후 녹색 "Create Repository" 버튼을 클릭하여 저장소 생성을 진행할 수 있습니다.
이제 다음 명령으로 이 저장소를 클론할 수도 있습니다: $ git clone http://10.0.2.15//my-test-repo.git
그런 다음 VM에서 저장소의 위치로 이동하여 README.md 파일을 업데이트합니다.
마지막으로 모든 변경 사항을 커밋하고 다음 명령으로 푸시합니다:
$ git add –-all %% git commit -m “init command”” && git push origin master
저장소가 성공적으로 생성되었습니다. 이제 URL http://10.0.2.15/iammuskaan/my-test-repo에 접속하면 README.md 파일에 콘텐츠가 추가된 것을 확인할 수 있습니다.