저장소를 만들었으면 CVS를 이용할 개발자들에게 저장소를
사용할 수 있는 권한을 주어야 한다. 권한 부여 방법은 개발자들이
저장소가 위치한 씨스템에 계정이 있는지에 따라 두 가지로 나뉜다.
개발자들이 계정을 갖고 있는 경우는 개발자들이 모두 저장소가
있는 씨스템에서 작업을 하거나, 각자의 기계에서 작업을 하되
ssh이나 rsh을 써서
원격으로 CVS를 사용하는 경우이다. 이 방법은 다음에 나올 암호
인증 방식에 비해 설정이 간단하고, 별도의 포트를 열 필요가 없다는
장점이 있다. 개발자들이 모두 계정을 갖고 있으므로 저장소가
위치한 디렉토리에 읽기 및 쓰기 권한을 주기만 하면 되는 것이다.
그러기 위해 개발자들을 모두 같은 그룹(예: cvs)의 구성원으로
만든다. 이는 씨스템별로 존재하는 그룹 관리 도구를 이용하거나
groupadd와 같은 명령으로 cvs라는 그룹을
만들고, 그룹 관리 도구를 쓰거나 /etc/group
파일을 직접 수정하여 개발자들을 그 그룹에 추가하면 된다. 예를
들어 minskim과 sehkone이라는 사용자를 cvs 그룹에 추가한다면
다음과 같은 줄이 /etc/group에 생길 것이다.
cvs:*:510:minskim,sehkone |
이제 다음 명령으로 디렉토리의 권한을 열어 주면 된다.
# chgrp -R cvs /home/cvs
# chmod ug+rwx /home/cvs /home/cvs/CVSROOT |
이후로는 cvs 그룹에 속한 개발자는 이 저장소를 마음대로 이용할
수 있다.
개발자들이 씨스템에 계정을 갖고 있지 않다면 CVS의 암호
인증 방식을 이용해서 CVS 써버에 접속할 수 있다. 개발자 각각은
CVS 계정(씨스템 계정과는 다르다)을 부여받게 되며,
inetd를 통해 정해진 포트로 CVS를 사용하게
된다. 설정은 조금 복잡하지만 개발자들에게 일일이 씨스템 계정을
발급할 필요가 없으므로 씨스템 관리 측면에서는 보다 낳은 방법이라
할 수 있다. 특히 불특정 다수에 대해 CVS로 파일을 받아갈 수
있도록 해야 하는 공개 프로젝트의 경우 대부분이 이 방식을
채택하고 있다. 아파치나 모질라 같은 경우가 대표적인 예가 될 것이다.
반면 개발자들이 씨스템 계정을 갖고 있는 경우라도
ssh이나 rsh을 통한 접속을
허용하고 싶지 않을 경우는 별도의 CVS 계정을 만들어 암호 인증
방식을 이용할 수도 있다.
그러면 inetd로 CVS 접속을 허용하는 방법을
알아보자. 우선 CVS가 사용하는 포트 번호(2401번)를 등록해야
한다. /etc/services에 다음과 같은 줄이
있는지 살펴 보자.
만일 없다면 위의 내용을 추가하면 된다. 다음은 실제로 해당
포트를 열어줄 차례인데, 이는 씨스템이
inetd를 쓰고 있는지,
xinetd를 쓰고 있는지에 따라 설정 방법이
다르다. 먼저
inetd의 경우는
/etc/inetd.conf에
다음 내용을 추가한다.
cvspserver stream tcp nowait root /usr/bin/cvs cvs
--allow-root=/home/cvs pserver |
편의상 두 줄로 나타냈으나, 실제 파일에는 한 줄로 들어가야
한다. 만약
tcpd를 사용한다면 위의 줄 대신
다음을 추가한다.
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs
--allow-root=/home/cvs pserver |
물론
/usr/bin/cvs나
/usr/sbin/tcpd는 실제로 이들 명령이
위치하는 절대 경로로 써 주어야 한다.
새로운 설정 내용을 반영하려면 inetd를
재시작하여야 한다. inetd의 프로세스 ID가
357이라면 다음과 같이 HUP 신호를 보내면 된다.
xinetd를 쓴다면
/etc/xinetd.d에
cvspserver란 이름으로 별도의 파일을
만들어야 한다. 파일 내용은 다음과 같다.
# default: on
# description: The cvspsever serves CVS Passowrd Server sessions; it uses \
# unencrypted username/password pairs for authentication.
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = --allow-root=/home/cvs pserver
log_on_failure += USERID
} |
inetd의 경우와 마찬가지로
/usr/bin/cvs는
cvs 명령의 절대 경로,
/home/cvs는 저장소의 위치로 바꿔
준다.
xinetd를 재시작하는 방법도
inetd와 동일하다. 우선
xinetd의 프로세스 ID(357이라 가정한다)를
알아낸 후, HUP 신호를 보내자.
이제 접속 포트는 열어두었으니, 개발자들에게 CVS 계정을
발급하는 일만 남았다. 암호 인증 방식을 이용하는 경우, 계정과
암호는 저장소의 CVSROOT 디렉토리 밑에
passwd란 이름의 파일에 저장된다.
여기에서는 /home/cvs/CVSROOT/passwd가 될
것이다. 하지만 이 파일은 처음에는 존재하지 않는다. 그러므로
직접 만들어주어야 하는데, 먼저 예를 하나 보도록 하자.
minskim:YxNPCzaM/WCp2:cvs
sehkone:Yw2najHG5cLfo:cvs |
각 줄은 한 사용자에 대한 정보를 담고 있다. 줄은 ':'을
경계로 다시 세 부분으로 나뉘는데 첫 부분이 사용자의 CVS 계정
이름(씨스템 계정과는 무관하다), 그 다음은 암호, 그리고
마지막은 씨스템 계정 이름이다. 즉, 이 파일에는 현재
minskim과 sehkone이라는 두 사용자가 등록되어 있고, 이들이
CVS 이용시에는 cvs란 씨스템 계정의 권한을 갖는 것이다.
암호부분은 유닉스 씨스템에서 전통적으로 사용되는
crypt 함수를 이용하여 변환된 값이
저장되어 있다. 새로운 사용자를 추가하려면 같은 형식으로 한 줄을 추가해
주면 된다.
마지막으로 필요한 것은 cvs란 씨스템 계정에 저장소에 대한
읽기 및 쓰기 권한을 주는 것이다. 3.2.1절과
일관성을 유지하려면 cvs란 그룹을 만들고 cvs란 사용자를 cvs
그룹에 추가한 후, cvs 그룹에 대한 권한을 같은 방법으로
열어주면 된다.
# chgrp -R cvs /home/cvs
# chmod ug+rwx /home/cvs /home/cvs/CVSROOT |