파일이름 : vsftpd-2.0.3.tar.gz
운영체제 : Linux, 기타 Unix
라이센스 : GPL
홈페이지 : http://vsftpd.beasts.org
ftp서버로 오랫동안 지켜오던 Proftpd의 자리를 누군가 빼앗으려 한다. 그 분은 proftpd의 문제점을 모두 보완하고, 속도, 성능, 보안을 향상시켜 더욱 강력하게 만들어 졌다. 그분이 바로 금번 리뷰에서 소개할 vsftpd 이다. 이름에서부터 알 수 있듯 Very Secure FTP 서버이다. 이 프로그램은 배포사이트에서 최상급 형용사(most, fastest)를 사용하여 자랑할 만큼 자신 있게 말하는 부분이 속도와 보안성이다.
Probably the most secure and fastest FTP server for UNIX-like systems.
최신버전인 2.0.3으로 업그래이드 되면서 많은 버그들이 고쳐졌으며, 특히 SSL 쪽 버그를 많이 고쳤다고 한다. 금번 리뷰에서는 vsftpd를 설치해서 운영하면서 장, 단점을 살펴보도록 하겠다.
먼저 공식 웹사이트에서 소스를 다운로드 받는다.
[root@localhost /]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz :
vsftpd-2.0.3.tar.gz 파일의 용량은 겨우 150K에 불과하다. 압축을 풀고, 모든 프로그램의 설치과정에 있었던 컴파일 환경설정과정인 configure 과정은 vsftpd는 없다. 바로 컴파일 한 다음 , 설치하면 된다.
[root@localhost /]# tar xvfz vsftpd-2.0.3.tar.gz
[root@localhost /]# cd vsftpd-2.0.3
[root@localhost /]# make && make install
컴파일을 성공적으로 마쳤다면, 설치가 될 것이다. 설치된 파일을 찾아보면 겨우 /usr/local/sbin/vsftpd 라는 것을 알 수 있다.
그런 다음 설정파일 샘플을 복사한다. 아래는 install 명령어를 사용하여 소스디렉토리의 vsftpd.conf 파일을 /etc/vsftpd.conf 파일으로 복사하며, 퍼미션을 600으로 변경한다.
[root@localhost /]# install -m 600 vsftpd.conf /etc/vsftpd.conf
FTP서버를 xinetd모드로 운영하기 위해 xinetd.d/vsftpd 파일을 /etc/xinetd.d/vsftpd 으로 복사하며, 퍼미션을 600으로 변경한다.
[root@localhost /]# install -m 600 xinetd.d/vsftpd /etc/xinetd.d/vsftpd
마지막으로 pam인증을 하기위해 pam 설정파일을 복사해 준다. 이 파일을 복사해 주지 않으면, 접속은 되지만, 정확한 id와 비밀번호를 넣었음에도 로그인 실패라고 나오며, 별도 로그는 남지 않음에 주의하기 바란다.
[root@localhost /]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
[root@localhost /]# vi /etc/vsftpd.conf
pam_service_name=vsftpd - 행 추가
이렇게 설치를 했다면, 이제 설정파일(/etc/vsftpd.conf)을 수정해야 한다. vsftpd의 운영방법은 크게 standalone으로 독자적인 데몬을 이용하여 서버를 운영하는 방법과, xinetd의 도움을 받아 운용하는 방법이 있다. FTP서버가 파일서버용도가 아니라면, 꼭 떠있을 필요는 없기에 xinetd모드로 설정하겠다. 하지만, 꼭 standalone모드로 돌려야 한다면, 간단하게 /etc/vsftpd.conf 파일에서 listen=YES 으로 하고, xinetd에 등록된 vsftp를 ntsysv등의 유틸리티로 내려주고 xinetd를 재 시작해주고, /usr/local/sbin/vsftpd & 이렇게 데몬을 띄워주면 운영가능하다. 이제 xinetd모드로 설정하는 법을 알아 보도록 하자.
먼저 xinetd설정파일(/etc/xinetd.d/vsftpd)을 확인한다.
[root@localhost /]# vi /etc/vsftpd.conf
ㅁ 주요설정옵션
# 익명 접속 허가 여부
anonymous_enable=YES
#
# 로컬 사용자 로그인 허가 여부(디폴트 NO)
#local_enable=YES
#
# FTP write 명령어 사용여부(주석처리되어 있으면 자료 업로드가 불가능해 진다. 디폴트 NO)
#write_enable=YES
#
# umask 지정. 디폴트는 077이다. (umask는 퍼미션에서 해당 권한을 뺀 수이다.
# 즉 022이면 디렉토리 생성시 기본 퍼미션은 755가 되는것이다.)
#local_umask=022
#
# 익명 사용자 업로드 허용여부. 허용시 업로드하실 있는 디렉토리를 생성해 주어야 한다.
#anon_upload_enable=YES
#
# 익명 사용자 새 디렉토리 생성 허가 여부
#anon_mkdir_write_enable=YES
#
# 어떤 디렉토리에 접근시 메세지를 사용자에게 보여주는지 여부
dirmessage_enable=YES
#
# 업로드/다운로드 로그 기록 여부
xferlog_enable=YES
#
# port 20 (ftp-data) 사용 여부
connect_from_port_20=YES
#
# 익명 사용자가 등록한 파일의 소유권을 변경할지 여부
# chown_username으로 지정된 이름으로 변경됨(root로는 지정하지 말것)
#chown_uploads=YES
#chown_username=whoever
#
# 로그 기록 파일의 경로
#xferlog_file=/var/log/vsftpd.log
#
# 일반적으로 사용되는 ftp의 로그 형식을 원한다면 주석 제거
#xferlog_std_format=YES
#
# 클라이언트에서 아무런 명령이 없을경우 세션을 끝낼때까지의 대기시간(디폴트 300초)
#idle_session_timeout=600
#
# data connection을 끝을 대기 시간(디폴트 60초)
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# 비동기식 ABOR 사용 여부(보안상 비추천)
#async_abor_enable=YES
#
# 아스키 모드 업로드/다운로드 사용여부
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# ftp접속시 환영 메세지
#ftpd_banner=Welcome to blah FTP service.
#
# 익명 접속시 패스워드에 일반 이메일 주소를 거부하는지 여부..(vsftpd.banned_emails에 지정된 이메일 주소만 허용)
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# 접속시 최상위 디렉토리가 홈 디렉토리가 되도록 지정하는지 여부..
#chroot_list_enable=YES
# (default follows)
#
# /etc/vsftpd.chroot_list가 지정된 사용자는 홈 디렉토리가 최상위 디렉토리가 된다.
# 해당 파일이 없으면 500 OOPS: cannot open chroot() user list file 에러 발생시킴
#chroot_list_file=/etc/vsftpd.chroot_list
#
# 이것은 지정하게 되면 vsftpd.chroot_list의 사용자에게는 전체 디렉토리를 출력하고, 그외는 홈 디렉토리가 최상위 디렉토리가 된다.
#chroot_local_user=YES
#
# 디렉토리 내용 출력시 캐쉬 사용여부..(클라언트 ftp접속 프로그램에서도 지정 가능)
#ls_recurse_enable=YES
ㅁ root 사용자 접속 차단
/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.
pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)
-------------------------------------------------------------
# FTP 접속을 허용하지 않을 ID를 등록한다.
1) 아스키모드로 파일전송 하려면?
vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로 인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.
ascii_download_enable=YES ascii_upload_enable=YES |
2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?
대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.
(check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)
#%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed auth required pam_stack.so service=system-auth #auth required pam_shells.so account required pam_stack.so service=system-auth session required pam_stack.so service=system-auth |
3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.
chroot_list_enable=YES chroot_local_user=YES |
force_dot_files=YES |
hide_ids=YES |
ls_recurse_enable=YES |
passwd_chroot_enable=YES |
use_localtime=YES |
local_max_rate=300000 |
max_clients=10 |
max_per_ip=2 |
pasv_min_port=40000 pasv_max_port=50000 |
deny_file={*.mp3,*.wmv} |
hide_file={*.mp3,.hidden,hide*,h?} |
/etc/vsftpd.conf 설정
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list 에 제한할 사용자 등록