Etc

cvs 서버 설정 방법

jeeyong 2011. 6. 9. 14:12

이 문서는 VMware 6.5.3에 Linux(Fedora 11)을 설치하고 Fedora 11에 포함된 CVS 1.11.23을 설정하여 외부접속이 가능하도록 구성하고 프로젝트를 공유할 수 있도록 준비하는 절차를 소개하고자 합니다.

Fedora11설치 완료 후에.....

CVS Server를 설정하는 절차이다.

네트워크 수퍼데몬이 설치되어 있는지 확인
# service xinetd status
xinetd: 인식되지 않은  서비스

네트워크 수퍼데몬 설치
# yum install xinetd
# service xinetd start
# sercice xinetd status

xinetd (pid 2552)를 실행하고 있습니다..

부팅하면서 바로 xinetd가 실행되도록 하려면...
# ntsysv 명령으로 나열되는 서비스 중에 xinetd를 선택하고 [확인]을 선택한다. 혹은 
# setup 명령으로 나열되는 항목 중에서 [시스템 서비스]를 선택하고 xinetd를 선택한다.

xinetd를 설치하면 CVS서버도 함께 설치된다.
CVS서버 버전 확인
# cvs -v

Concurrent Version System(CVS) 1.11.23 (Client/server)
Copyright (C) 2006 Free Software Foundation, Inc.

cvs서버는 2401번 포트를 사용하므로 방화벽에 등록해 주어야 한다.
시스템 > 관리 > 방화벽 > 그 외의 포트 > 추가 > 2401 cvsserver선택 > 적용
포트가 등록되었는지 확인하려면 방화벽설정파일을 열어서 2401포트가 있는지 확인한다
# cat /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2401 -j ACCEPT
위와같이 2401포트가 방화벽설정 파일에 등록된 것이 확인된다.
함께 보이는 22번 포트는 SSH(Secure Shell)의 포트이다.

방화벽 설정이 변경되었으면 방화벽 기능을 재실행해 주어야 한다.
# /etc/init.d/iptables restart

외부에서 cvs서버에 접근이 가능하게 하려면 위와같은 방화벽 설정 뿐만 아니라 가상머신(VM)측에서도 설정이 필요하다.
즉, 가상머신에서 2401포트의 요청을 받았다면 내부에서 실행 중인 CVS서버로 포워딩해 줄 필요가 있다.
이를 Port Forwarding이라고 하며 포워딩하기 위해서는 먼저 실행중인 리눅스의 IP주소를 확인해야 한다.
# ifconfig
inet addr: 192.168.225.128 Bcast:192.xxx.xxxx Mask: 255.xxx.xxx.x

리눅스의 IP주소가 192.168.225.128인 것으로 확인된다.

Edit > Virtual Network Editor... > NAT > Edit > Port Forwarding > Add 
Host port: 2401
Virtual Machine IP Address: 192.168.225.128 Port: 2401
Description: CVS Server, Linux

# ntsysv 명령으로 cvs를 자동으로 실행되도록 설정한다.

# service xinetd restart 네트워크 수퍼데몬을 다시 실행한다.

netstat 명령으로 2401번 포트에서 cvs서버가 실행 중인지 확인해본다
# netstat -an | grep 2401
tcp    0    0   ::: 2401    ::: *    LISTEN


CVS서버 설정 시작

Fedora 11에는 CVS 1.11.23버전이 설치되어 있다
설정파일은 /etc/xinetd.d/cvs이다.
CVS 저장소는 디폴트로 /var/cvs으로 설정되어 있으며 위의 설정파일에서 변경이 가능하다.

CVS서버가 프로젝트 저장소(Repository) 로 사용할 디렉토리 생성
# mkdir /home/cvsrepos

cvs명령을 이용하여 저장소로 사용될 디렉토리를 초기화한다(내부에 CVSROOT생성됨)
# cvs -d /home/cvsrepos init

cvs 사용자들을 한 그룹으로 묶어서 관리하기 위해 cvsuser 그룹을 생성한다.
# groupadd cvsuser
# cat /etc/group 명령으로 생성된 그룹을 확인한다.

cvs저장소의 소유그룹을 변경하여 cvsuser로 변경하고 770으로 허가한다
# chown root.cvsuser /home/cvsrepos -R
# chmod 770 /home/cvsrepos -R

cvs 서버에 접속할 이용자(user1)를 생성하면서 cvsuser그룹에 포함시킨다
# useradd -g cvsuser user1
# passwd user1

새 암호:
새 암호 재입력:

cvs설정파일을 부분적으로 변경한다(Fedora 11의 경우는 /etc/xinetd.d/cvs파일이 생성되어 있음)
# vi /etc/xinetd.d/cvs
다음과 같은 라인을 찾아서 변경하고 저장한다.
env = HOME=/var/cvs -->여기를 HOME=/home/cvsrepos로 변경한다
server_args = -f --allow-root=/var/cvs pserver --> 여기를 /home/cvsrepos pserver로 부분변경한다

네트워크 수퍼데몬을 다시 실행한다.
# service xinetd restart

cvsuser그룹에 속한 user1으로 로그인해본다.
# cvs -d :pserver:user1@127.0.0.1:/home/cvsrepos login
CVS password: xxxx
위와같이 로그인한 결과 다음과 같은 로그인 실패 메시지가 나올 경우가 있다.
cvs [login aborted]: unrecognized auth response from 127.0.0.1: cvs pserver: cannot open /home/cvsrepos/CVSROOT/config: Permission denied
이런 경우에는 SELinux정책을 중지하고 다시 시도해 본다. 이 문서의 하단에 그 방법을 설명함.

만약 다음과 같이 등록되지 않은 이용자가 로그인하거나 암호가 다르면 로그인에 실패한다.
# cvs -d :pserver:xxxx@127.0.0.1:/home/cvsrepos login
CVS password: xxxx
Fatal error, aborting.
xxxx: no such user

암호 검증에 실패하면....
cvs login: authorization failed: server 127.0.0.1 rejected access to /home/cvsrepos for user user1

로그인하여 아무런 메시지가 나타나지 않으면 로그인에 성공한 것이므로 이후에는 Eclipse등 클라이언트 프로그램을 이용하여 CVS 저장소에 프로젝트를 저장하고 공유하면 된다.


참고: /etc/services파일을 열고 2401포트가 cvsserver에 할당되어 있는지 확인하고 만약 등록되지 않았다면 다음과 같이 등록해 준다.
# gedit /etc/services
cvspserver 2401/tcp
cvspserver 2401/udp

참고: SELinux정책을 사용하면 로그인에 실패하므로 SELinux정책을 정지한 상태로 테스트한 것이다.
# vi /etc/selinux/config
SELINUX=enforcing 이 부분을 주석처리하고,
SELINUX=disabled 이 라인을 추가한다

시스템 > 관리 > SELinux Management > 상태 > 
시스템디폴트 강제모드:비활성
현재 강제모드 : 비활성
시스템 디폴트 정책유형 : targeted

위와 같이 SELinux정책을 해제한 후에 리눅스를 다시 부팅하면 된다.


위와 같은 방법으로 CVS를 설정하면 시스템 이용자는 누구든지 CVS를 이용할 수 있는 상태가 된다. 그러나 프로젝트를 수행하는 모든 사람이 시스템 이용자로 등록될 필요는 없기 때문에 다음과 같은 통제가 필요하다.
1. 시스템 이용자 명단을 이용하여 인증을 처리하는 것이 아니라, CVSROOT/passwd 파일에 등록된 명단을 이용하여 인증을 처리하도록 한다. 이렇게 하려면 우선 CVSROOT/passwd파일을 생성하고 [아이디:암호:nologin사용자] 리스트를 입력한다.

2. 시스템 이용자는 시스템에 로그인은 할 수 있되, CVS를 이용하여 프로젝트를 공유해서는 안된다(SystemAuth=no)

3. CVS이용자는 단순히 프로젝트 공유가 목적이므로 시스템에 정상적으로 로그인하지 못하게 하고 프로젝트 공유만 가능하게 한다(nologin)

위의 조건을 다음과 같이 처리할 수 있다.
$ chmod 644 /home/cvsrepos/CVSROOT/config
# vi /home/cvsrepos/CVSROOT/config
SystemAuth = no --> 시스템이용자는 CVS를 사용할 수 없도록 설정


# useradd -g CVS -M -s /sbin/nologin cvspub --> 시스템에 로그인할 수 있는 권한을 배제하고 CVS만 사용가능한 사용자(cvspub) 생성


# touch /home/cvsrepos/CVSROOT/passwd -->빈 파일 생성
htpasswd -nb userName userPass<enter>  -->암호화
userName:JQEqEXnvixg92   -->패스워드가 암호화 되었다

위의 암호화 결과를 다음과 같은 형식으로 passwd 파일에 등록하고 저장한다.
userName:JQEqEXnvixg92:cvspub

최종적으로 테스트하여 결과를 확인한다.
# cvs -d :pserver:userName@127.0.0.1:/home/cvsrepos login --> cvs 이용자이므로 아무런 오류가 없이 cvs login가능하다.
userName password:userPass
CVS 로그인 성공

# cvs -d :pserver:root@127.0.0.1:/home/cvsrepos login  --> 시스템 이용자는 cvs로 로그인할 수 없다.
CVS 로그인 실패

여기까지 설정을 마쳤다면 외부에서도 CVS서버에 접속이 가능하게 되도록 설정해야 한다. 
외부에서 접속이 가능하려면 리눅스 방화벽 설정, 가상머신의 포트 포워딩 설정이 필요하다.

/etc/sysconfig/iptables에 2401포트 등록하고 변경사항을 적용한다.
# /etc/init.d/iptables restart