FTP 서버 만들때 chroot 함수를 사용하시나요?
FTP 서버 프로그램은 많은 분들이 만들어 보셨을텐데요.. 전형적인 유닉스 fork 방식으로 작동한다고 가정하구요.. 클라이언트가 접속해서 fork된 프로세스에서 로그인 후 chroot 함수를 사용하시나요? 저는 chroot를 사용했습니다. CWD나 CDUP 명령어를 구현할때 유저의 홈디렉토리 밖으로 나가는거에 대해서 특별한 처리를 안해줘도되니 무척 편하더군요. 보안상으로도 더 좋을테구요..
그런데 문제가 발생했는데요.. LIST 명령 받았을때 간단한게 ls -l 형태로 보여주도록 만들고 있습니다. 그러다보니 파일의 소유주 uid, gid를 실제이름으로 변환을 해야 하는데요.. getpwuid, getgrgid 함수를 사용했습니다. 그런데 요놈이 파일을 못찾는다는 에러를 돌려주더군요.
허참.. 파일을 못찾을게 뭐가있담 하면서 한참을 디버깅을 해봤더니 문제가 chroot에 있었습니다. 그냥 유저 홈으로 chroot를 해버려서 /etc라는 디렉토리가 없는거죠.
제 머리속에서 떠오른 해결방법은 두가지인데요..
첫째, chroot를 안쓰고 CWD, CDUP 명령어 구현에서 유저 홈 밖으로 올라가는걸 막는걸 따로 구현한다.
둘째, chroot를 사용하되 미리 passwd 파일에서 유저네임과 uid를 쭉 뽑아서 메모리에 올려놓고 getpwuid, getgrgid 역할을 하는 함수를 직접 만들어서 사용한다.
마음은 두번째로 굳어지고 있는데 괜히 무식한 방법인거 같기도하고 또 앞으로 이런 경우가 다른곳에서 다시 발생할 가능성이 없지 않으니 좀 안좋은 방법같은 생각이 드네요. 그래도 chroot의 유혹을 이기기가 힘들어서..
다른 분들은 어떻게 구현하셨는지 그리고 혹시 다른 좋은 방법이 있는지 궁금하네요.
그럼~
첨부 | 파일 크기 |
---|---|
fakechroot.c | 11.44 KB |
fakechroot.h | 3.87 KB |
anonymous ftp 서버를 만들때 chroot를 사용한다면,전통
anonymous ftp 서버를 만들때 chroot를 사용한다면,
전통적으로는 ls, mkdir 등이 사용하는 라이브러리들을 모두 ftp root에다가 고스란히 복사해둡니다.
/etc에 있는 passwd도 최소화해서 /ftproot/etc 디렉토리에 올려놓지요.
---
http://coolengineer.com
[quote="pynoos"]anonymous ftp 서버를 만들때 ch
저도 유저 홈에 특정 디렉토리를 만들어서 거기다 필요한 파일을 복사 후 chroot 하는걸 생각해봤습니다.
그런데 이렇게하면 만약 그 디렉토리 이름이 이미 유저 홈에 있는 디렉토리이고 passwd 파일을 복사하려는 이름도 같은 파일이 이미 존재할 경우에 문제가 생길수 있어서 이 방법은 생각을 안하고 있었습니다. 예를들어 $HOME/etc/passwd 파일이 이미 존재한다던지 하는 경우요..
흠.. temp name을 사용해서 파일을 복사하는 쪽으로도 생각을 해봐야겠네요.
답변 감사합니다.
-추가-
만약 프로그램이 /usr/local/XXX.so 라이브러리를 필요로 한다고 할때 이 라이브러리가 프로그램 실행시 바로 메모리로 적재되는건가요? 아니면 라이브러리 기능이 사용될때 메모리로 올라오나요?
만약 후자라면 chroot가 라이브러리 로드에까지 영향을 미칠수 있는거군요. 상식적으로 전자가 맞는거 같지만 궁금하네요.
======================
BLOG : http://superkkt.com
일반 사용자로 로긴했을 때도 chroot하는 것은 생각을 안해 봤습니다만
일반 사용자로 로긴했을 때도 chroot하는 것은 생각을 안해 봤습니다만..
일반 사용자는 그냥 두는 것이 좋지 않나요?
프로그램에 의존성이 걸려있는 so들은 프로그램이 실행되고 main 에 들어오기전에 모두 적재됩니다.
그리고 ftp daemon이 외부 프로그램을 사용할일이 있다면, 대개 chroot를 한 다음 호출하지요.
---
http://coolengineer.com
참고 하세요.
저 같은 경우, 보안상의 이유로 어쩔수 없이, chroot를 직접구현 하였습니다.
아울러 리눅스 환경이라면.. 다음 프로젝트가 도움이 될 것 같습니다.
http://sourceforge.net/projects/pureftpd
첨부파일은 해당 프로젝트에서 chroot와 관련된 소스만 추려낸 것이니, 참고하십시요.
- 인생은 스스로 -
댓글 달기