developer.oss.or.kr 서버의 cvs 환경을 세팅한 얘기를 조금 흐흐~
소스포지나 BerliOS, 사바나 같은 곳에서는 개발자들을 위해서 ssh기반의 CVS_RSH를 제공해 주고 있는데, 소스포지와 BerliOS는 chroot된 ssh로 cvs를 돌리고 있고, 사바나는 subversion로 직접 ssh1 프로토콜을 제공해 주고 있습니다. oss에서는 그냥 소스포지 스타일로 간단하게 하기로 했습니다.
우선 기본은 openssh에 chroot패치를 했고, (요건 pkgsrc로 깔았습니다. 므흐흐) 요 sshd는 security/pam_ldap 을 이용하도록 설정했습니다. LDAP은 다른 머신에 OpenLDAP을 깔아둔 걸로 썼는데, 2.1이 무지 빠르군요. 와와~ pam_ldap의 유저 관리는 sysutils/cpu 를 쓰도록 했는데, FreeBSD의 pw 를 기반으로 한 거라서 사용법도 무지 쉽고. 유저 넣고 고치는 것도 모두 1줄로 쉽게 되네요~
그리고, 이제 실제 서버 안에는 cvs를 몽창 static으로 컴파일해서 chroot안의 /bin에 넣고, cvswrap이라는 간단한 래퍼를 만들어서 쉘 대신 쓸 수 있도록 했습니다. 그래서 사용자의 홈 디렉토리는 /jail/./home (중간에 /./가 들어가는 부분에서 chroot)로 되어있고 쉘은 /bin/cvswrap으로 지정했는데, 하나 문제는 openssh가 원래 chroot를 지원하는 게 아니다보니, 쉘이 없으면 끊겨버려서 바깥쪽에도 /bin/cvswrap을 만들기는 해야하는군요;;
cvswrap 소스는 일단 요렇게 짜 놓았는데, 헛점이 있지 않을까 혹시 심심하신 분은 함 봐주세용 므흐;; 그래서, 최종적으로는 cvsroot는 jail안에 존재하고, jail 안에는 바이너리는 cvs와 cvswrap만 있도록 하고, libc같은 것들은 전혀 없도록 하였습니다. (말은 jail이지만 레드햇 7.2이기 때문에.. jail 과는 다름 =3) rsync도 이런식으로 제공할까 고민 중입니다~ 므흐;
그나저나, 레드햇 gcc는 static으로 컴파일만 하면 libc를 전부 다 들고 들어가는 바람에 바이너리 크기가 너무 크군요 –;;
레드햇 7.2에서는
1 2 3 |
www(perky):~/cvswrap% size cvswrap text data bss dec hex filename 382062 8068 3944 394074 6035a cvswrap |
프비 5.1에서는
1 2 3 |
sbtm(perky):~/cvs/snippets/cvswrap% size cvswrap text data bss dec hex filename 2155 264 36 2455 997 cvswrap |
음 젤 앞부분을 exec 하는 파일명으로 했기 때문에 ; 나 | 에 영향은 받지 않는건가요? ‘ㅇ’;;
고수 퍼키님 만쉐~~ (/ -0-)/ ))
아 그리고 프비 만쉐~~ (/ -0-)/ ))
;나 |의 영향을 받으려면 sh에게 위임하는 popen이나 system함수를
써야 합니다. execve함수는 그냥 단순히 프로세스가 교체되어 버리죠 흐흐
음.. 그리고, 레드햇이 static에서 굳이 libc를 몽창 포함하는 전법을 택한 이유는
static으로 컴파일한 바이너리에서도 dlopen을 제공해 주기 위해서이죠 -ㅇ-;;
역시 고수… 다 꿰뚫고 계시잖앗~ >.<
이거 댓글 하나도 안 달리고 미투 10개 넘을 줄 예감했어요. ㅋㅋ ^.^