2007. 1. 3. 17:25

ProFTPD 포트로 설치하기



제 컴터를 ftp서버로 만들려고 해서 적당한 ftp 서버 프로그램을 찾아보니까 proftpd가 가장 유명하더라구요 ^^;

글치만 그 유명세에도 불구하고 프비에서의 설치법을 찾기는 쉽지 않더군요. 무엇보다 한국 proftp사용자 모임이란 곳이 있는데(http:// proftpd.oops.org) 리눅스 기준으로 모든걸 써놔서 ㅠ.ㅠ




1.우선 포트에 가서 proftpd를 설치합니다.


#cd /usr/ports/ftp/ proftpd
#make install clean



앞으로 proftpd의 기본적인 설정은 /etc/inetd.conf 와 /usr/local/etc/ proftpd.conf 파일 2개로 다 합니다.




2. 우선, 여타의 설정을 하기 전에 proftpd를 inetd 방식으로 돌릴 것인지 아니면 stand-alone 방식으로 돌릴 것인지를 결정해야 합니다.

inetd 방식 : 자신의 ftp 서버에 접속하는 사람이 항상 있는 것이 아니라면, 굳이 24시간 ftp서버를 돌리고 있을 필요가 없죠. 대신에 외부에서 ftp 접속을 하려고 할 때에만 ftp 서버를 활성화시키면 되니까요. inetd는 이처럼 '망을 봐주는 데몬'입니다. 즉 inetd 방식이란 ftp 요청이 있을 때에만 proftpd를 구동시키는 방식입니다.

stand-alone 방식 : 접속이 있던 없던 항상 proftpd가 항시 대기중에 있습니다. 이 경우, inetd를 통하지 않기 때문에 속도가 더 빠르다고 합니다.




3. /usr/local/etc/ proftpd.conf의 설정
우선 이 파일의 자세한 설정은
http:// proftpd.oops.org 에 가면 볼 수 있습니다. 그러나 단계적인 설정법이 나와 있는게 아니라 이 파일에서 사용할 수 있는 각종 키워드들이 알파벳순으로 나와있어서 처음 하는 제가 보기엔 좀 버거웠습니다.

그래서 일단 기본 설정파일에서 보이는 순서대로 제가 설명해 보겠습니다. 추가적인 옵션등은 위 웹사이트를 참고하세요.

Servername 서버 이름을 정하니다. 외부에서 ftp 접근을 하려할 때 보여집니다.
ServerType 앞서 설명한 inetd와 standalone 중 자신이 원하는 것을 하나 선택합니다.
DefaultServer 권한이 없는 사용자가 로긴을 시도하는 등, 이하에서 설정하지 않는 상황에 기본적으로 대처하도록 되어있는 것을 따릅니다. (예; 접속을 끊고 메세지를 내보낸다 등)

Port ftp 전송을 담당할 포트를 지정합니다. 특정한 경우가 아니라면 기본값인 21을 사용합니다. (inetd 방식이라면 inetd 자체의 설정이 우선하기 때문에 효과가 없습니다. 그냥 주석처리 하세요)

Umask ftp활동을 통해서 만들어질 파일들에 대한 권한 설정입니다. 022로 하면 파일 소유자는 읽고 쓰고 실행이 가능하며 나머지 사람들은 쓸 수 없고 읽거나 실행만 할 수 있습니다.

MaxInstances 한꺼번에 동시 접속할 사용자를 제한합니다. (inetd 방식이라면 inetd 자체의 설정이 우선하기 때문에 효과가 없습니다. 그냥 주석처리 하세요)

User 누가 서버를 실행시킬 지 정합니다. nobody라고 되어있던데 저는 root로 했습니다.

Group 서버를 실행시킬 그룹을 정합니다. 저는 User를 root이라고 했으므로 특수 관리 그룹인 wheel이라고 했습니다.

DefaultRoot 접속한 사람들에게 특정 디렉토리의 하위 디렉토리들만 보이게 합니다. 예를 들어서 /etc라고 하면 누가 접속을 하던지 간에 /etc이하의 디렉토리에만 접근할 수 있습니다. 사실 그 사람들에게는 /etc의 내용들이 /로 보이게 되죠. 사용자들을 제한된 영역에서만 머물게 하는데 사용됩니다.
저는 ~ 이라고 했습니다. 즉, 해당 사용자는 자신의 홈 디렉토리 밖으로는 못나갑니다.



...

해당 /path_name를 포함하는 모든 하위 디렉토리에게만 해당할 설정들을 이 사이에 적습니다.

제 경우,
AllowOverwrite on
AllowRetrieveRestart on
AllowStoreRestart on
이라고 썼습니다. 이렇게 하면 각각 덮어쓰기와 이어받기/이어올리기가 가능해진다고 합니다.

그 이하에는 모두 주석처리 되어있습니다. 바로 시스템의 계정이 없는 사람들에게도 ftp 접근을 허용해주는 항목들입니다. 위 내용과 큰 차이가 없으므로 주석문을 읽어보시면 됩니다. ^^;;

단 맨 마지막 것만 추가 설명하겠습니다.



...


Limit은 ftp 명령어들의 실행권한을 조절할 때 쓰입니다. ftp 명령어들이란,

CWD(현재위치 확인) MKD(디렉토리 만들기) RNFR RNTO(둘다 파일이나 디렉토리의 이름을 바꿀때 사용) DELE(파일 지우기) RMD(디렉토리 지우기) RETR(다운받기) STOR(업로드하기) SITE_CHMOD(파일 권한 바꾸기)

...등을 말합니다.
저는 익명 사용자는 허락하지 않았지만 앞서 를 설정할 때


AllowOverwrite on
AllowRetrieveRestart on
AllowStoreRestart on

AllowAll



라고 설정했습니다. AllowAll는 limit 에서 지정한 명령어들을 허용하라는 것이고 DenyAll 는 모두 불허하라는 것입니다. 만약에 다운은 되고 업로드는 안되게 하려면

AllowAll



DenyAll

이라고 하시면 됩니다.



4. /etc/inetd.conf의 설정

inetd.conf 파일은 inetd가 어떤 인터넷 서비스들의 망을 봐줄지 설정하는 곳입니다. 열어보면 ftp, telnet 등과 같이 익숙한 인터넷 서비스들이 있지요.

하지만 보안을 위해서 별도로 만지지 않으면 모든 서비스들이 다 주석처리 되어있습니다. 따라서 inetd을 이용해서 ftp를 돌리기 위해선 이 주석처리를 없애야 합니다. 즉 해당 줄 맨 첫글자 #을 없애야 합니다. 반면에 standalone 방식이라면 ftp 관련 항들은 맨 앞에 반드시 #이 있도록 합니다.

프비 4.8 기준에서 설명이 끝나는 맨 첫줄에 ftp 서비스가 나옵니다. 만약에 inetd방식이라면 여기서 첫칸의 #을 없애고 마지막 두 탭에 있는 /usr/libexec/ftpd 와 ftpd를 바꾸어야 합니다.
2개의 탭 중에 첫번째 탭은 ftp 서비스를 실행할 구체적인 프로그램 이름이 들어가야 합니다. 그러므로 /usr/local/libexec/ proftpd 라고 해줍니다.
그 다음 탭은 위 명령어를 실행하면서 넣어줄 옵션(?argument라고 써있던데)을 넣어주어야 합니다. 제 경우엔 아무것도 써주지 않았습니다. (원래 있던 것을 지우기만 했습니다)

5. 실행하기
inetd 방식의 경우 : 대부분의 프비 기계에서 이미 inetd가 실행중일 것입니다. 새로 설정한 내용으로 다시 실행시켜야 하므로,
#killall -HUP inetd라고 합니다.


standalone 방식의 경우 : proftpd를 실행시키는 스크립트를 사용해야 합니다. 예제로 제시되어 있는 스크립트를 그대로 사용해도 됩니다.
#cd /usr/local/etc/rc.d
#chmod u+x proftpd.sh.sample (실행가능하게 만들기)
#./ proftpd.sh.sample start


실행이 안될 대표적 경우 경우 :
 rc 문제 인듯 합니다. vi /etc/rc.conf 에다가 proftpd_enable="YES" 를 넣으시고 mkdir /var/run/proftpd 하시고 conf 만지작 조물딱 조물딱 하신후! 실행하면 이상없이 실행될듯 합니다.


혹시 scoreboard 파일때문이 아닐런지...
수동으로 만들어줘야하더군요...
proftpd.conf 파일에
ScoreboardFile /var/run/proftpd.scoreboard
위 라인을 추가하고
touch /var/run/proftpd.scoreboard
해주시면 됩니다.




500 FTP server shut down (Maintanance in progress)
-- please try again later

proftpd가 활성화 되어있진 않지만 살아있는 경우입니다. /etc/shutmsg파일을 지워줍니다.
#rm /etc/shutmsg

proftpd: unable to determine IP address of '서버명'
서버명에는 자신의 hostname이 뜰 것이다. proftpd는 실행될 때 현재 컴퓨터의 ip를 필요로 하는데, 이것이 설정되어 있지 않아서 그런 것입니다. 이 에러가 뜨는 사람은 십중팔구 startx로 엑스윈도우 띄울 때에도 "Bad display name.."과 같은 메세지가 보일 것입니다. 제가 그랬습니다 ^^;;;
우선 자기 컴퓨터의 이름을 알아야 합니다.
#hostname이라고 입력하면 가르쳐줍니다.
그 후에 /etc/hosts파일 맨 아래에 위에서 알게된 hostname을 쓰고 한 탭 띄고 127.0.0.1 이라고 씁니다. 고정 ip인 경우, 자신의 ip를 써도 됩니다. 참고로 127.0.0.1은 자기 자신을 가리키는 특수한 ip주소입니다.




6. 누가 사용중인가 보기

#ftpwho

자세한 건
#man ftpwho





7. ftp 서버 끝내기

#ftpshut now


자세한건,
#man ftpshut




이상으로 제가 대략 삽질해서 얻은 것들을 써봤습니다. 사실 처음엔 ftp계정을 따로 발급하는 줄 알았을 정도로 어리버리 했었는데 여기저기서 보면서 익혔습니다. 사실 너무 많은 것들이 빠져있지만 제가 필요한 것이 여기까지라서 ^^;;;

http:// proftpd.orghttp:// proftpd.oops.org 에서 더 도움 받으세요~






코멘트 삭제 fox9
fox9이미지
DefaultRoot와 관련해서 재미난 TIP을 하나 알려드린다면
DefaultRoot ~ !wheel
위와 같이 설정했을 경우는 wheel 그룹에 속한사람은 아무곳이나(?) 갈수 있지만 나머지 사람들은 자기 HOME만 갈수있습니다 :-)