Pure-FTPd로 FTP 서버 운영하기


FTP 서버란?


FTP 란 File Transper Protocol 을 말하며, 말 그대로 서버와 클라이언트로  파일을 전송하는데 사용되는 인터넷 서비스입니다.


FTP 서버란 클라이언트가 서버로부터 파일을 전송 받을 수 있도록 Wu-FTPD나 ProFTPD와 같은 서버 프로그램을 설치한 서버를 말합니다.


필자는 많이 사용되는 ProFTPD를 사용하지 않고, Pure-FTPd 를 사용하여 간단히 FTP서버를 구축해 보도록 하겠습니다.



Pure-FTPd 에 대한 간략한 소개


Pure-FTPd 은  Troll-FTPd 를 기반으로 만들어 졌으며, 고급 작업이 가능한, 빠르고 표준에 일치하는 FTP 서버입니다.


다른 유명한 FTP 서버프로그램들과 다른 점은 기본 설정에 보안이 디자인 되어 있고, 알려진 버퍼 오버플로우가 없으며, 현재 커널에 맞게 설정할 수 있다는 점입니다.


Pure-FTPd는 Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Tru64 에 성공적으로 포트되었습니다.


Pure-FTPd 는 PAM 인증 지원과 IPv6를 완벽히 지원하고, chroot() 홈디렉토리, 가상 도메인, 내장 'ls' 명령, 안티-와레즈 시스템, FXP 프로토콜, 전송 대역폭 설정, 레티오, LDAP, XML 과 HTML 타입의 보고서, 아파치 타입의 로그파일 등을 지원합니다.


Pure-FTPd 홈페이지 : http://pureftpd.sourceforge.net/









Pure-FTPd 를 패키지 혹은 소스로 설치하기


다운로드 페이지로 이동


■ 패키지로 설치


보통의 리눅스 배포판에는 Wu-FTPd나 ProFTPd 가 설치되어 있습니다.
Pure-FTPd 를 사용하기 위하여 기존의 FTP 서버를 삭제하고 Pure-FTPd 를 설치합니다.







# rpm -qa | grep proftpd


# rpm -e proftpd


# rpm -Uvh pure-ftpd-0.99a.i386.rpm


설치된 패키지는 /usr/local/sbin 에 위치하게 됩니다.
/usr/bin 이나 /usr/sbin 에 설치하고 싶으면 홈페이지에서 src.rpm 패키지를 받아서 spec 파일을 수정한 후 리빌드하여 설치하면 됩니다.



■ 소스로 설치







# tar xvfz pure-ftpd-0.99a.tar.gz


# cd pure-ftpd-0.99a


# ./configure


# make


# make install


컴파일이 성공적으로 끝나면 실행파일들은 /usr/local/sbin 에 설치됩니다.



RPM 패키지로 설치한 Pure-FTPd 서버의 실행파일은 아래의 옵션을 포함하여 컴파일되어 있습니다. 소스로 컴파일하고자 하는 사용자들도 아래의 옵션을 참고로 하면 되겠습니다.







./configure --prefix=/usr/local
--with-ftpwho : 유저관리를 위한 'pure-ftpwho' 명령을 지원하도록 합니다.
                       이 사양을 지원하도록 하면 약간의 메모리를 더 필요로 합니다.
--with-throttling : 전송 대역폭 설정을 지원하도록 합니다.
--with-ratios : 업로드/다운로드 레티오 설정을 지원하도록 합니다.
--with-uploadscript : 0.98에서 부터 Pure-FTPd 가 지원하는
                               좋은 기능으로 업로드를 더 편하게 합니다.
--without-capabilities
--with-cookie
--with-paranoidmsg
--with-altlog
--with-virtualhosts



Pure-FTPd 실행하기


■ Standalone 으로 실행하기







# /usr/local/sbin/pure-ftpd &



■ xinetd 슈퍼 데몬으로 실행하기


/etc/xinetd.d 디렉토리 아래에 pure-ftpd 라는 이름으로 아래의 내용을 작성합니다.







### pure-ftpd ###
service ftp
{
socket_type = stream
server = /usr/local/sbin/pure-ftpd
protocol = tcp
user = no
wait = no
disable = no
}


그리고 난 후, xinetd 슈퍼 데몬을 재시작하면 됩니다.







# killall -USR2 xinetd



이제, FTP 서버를 실행하기 위한 기본 환경이 설정 되었습니다.
ftp 프로그램으로 서버에 접속해 봅니다.







$ ftp juni


올바르게 설정이 되었다면 아래와 같은 화면이 나옵니다.


[Pure-FTPd 서버에 접속한 화면]









환경 설정 옵션


Pure-FTPd 는 다른 FTP 서버 프로그램들과는 달리 명령행 옵션으로 환경을 설정합니다.



    -A : 모든 유저에게 chroot() 를 적용합니다.


    -c : 서버에 접속할 수 있는 클라이언트(유저)를 지정한 수 만큼 제한합니다. 기본값은 42입니다.


    -C : 같은 IP 에서 접속할 수 있는 호스트의 수를 제한합니다.


    -e : 서버에 오직 anonymous 유저만이 접속 할 수 있도록 합니다. 계정사용자가 있어도 anonymous 로 로그인 됩니다.


    -E : 인증된 유저만이 서버에 접속하도록 합니다. anonymous 유저는 로그인을 허락하지 않습니다.


    -i : anonymous 유저가 업로드 하는 것을 허용하지 않습니다.


    -I : 최대 동작 반응 시간을 설정합니다. 지정한 시간 만큼 동작을 하지 않으면 접속을 종료시킵니다. 단위는 분 단위입니다.


    -k : 업로드를 할 때 파티션 용량이 지정한 만큼 차 있으면 업로드를 허락하지 않습니다.


    -M : anonymous 유저가 디렉토리를 만들 수 있도록 합니다.



■ Standalone으로 실행 할 때,







# /usr/local/sbin/pure-ftpd -s -a 42 -A &


와 같이 서버 실행 명령 뒤에 옵션을 추가하여 사용합니다.



■ xinetd 로 실행 할 때,
아래와 같이 server_args 변수를 두어서 옵션을 사용합니다.







service ftp
{
socket_type = stream
server = /usr/local/sbin/pure-ftpd
server_args = -s -a 42 -Aprotocol = tcp
user = no
wait = no
disable = no
}

Pure-FTPd로 Anonymous 서버 운영


먼저, anonymous 유저 접속을 위한 ftp 계정을 만듭니다. 그리고, telnet 접속을 허용하지 않기 위해 /etc/passwd 파일을 수정합니다.









-e 옵션을 주면 anonymous 서버로만 동작하게 되는데, 다음과 같이 옵션을 주어서 Pure-FTPd 를 실행하면 됩니다.







# /usr/local/sbin/pure-ftpd -A -c 5 -C 1 -e -M -k 95 -I 3



chroot() 설정


FTP 기본 루트 디렉토리는 시스템 루트(/) 디렉토리로 기본 설정되어 있습니다. 따라서 일반 계정 사용자가 접속하여 루트 디렉토리까지 접근할 수 있으므로 보안상 좋지 않습니다. 일반 계정 사용자 홈 디렉토리를 기본 루트 디렉토리로 하고자 하면 옵션에 -A 옵션을 추가하면 됩니다.



FTP 유저 정보 보기,  pure-ftpwho


이 명령은 --with-ftpwho 옵션을 주고 컴파일 했을 때만 동작하며,
현재 Pure-FTPd 서버에 접속한 ftp 유저들의 프로세스 정보를 보여줍니다.
텍스트 형식으로 볼 수도 있으며, HTML 방식으로 작성하여 출력할 수 있습니다.
서버에 접속한 특정 유저의 접속을 끊으려고 한다면 kill 명령으로 유저의 PID 를 종료시키면 됩니다.
아래 화면에서는 kill 1985  명령으로 접속한 junilove 유저의 접속이 강제로 끊기게 됩니다.







Pure-FTP 설정(install)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다