파일이름 : 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
| 위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다. 단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다. 그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.
4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면? 리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면? 특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면? 하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면? openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
8) 파일을 올렸는데 시간이 이상하게 보인다면? 대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
9) 전송속도를 제한하고 싶다면? 다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는 (Bytes/Sec) 입니다.
위 설정은 300KByte/Sec의 대역폭을 제공합니다.
10) 동시 접속자수를 제한하려면? ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
위 설정은 동시에 10개의 연결으로 제한합니다.
11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면? ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.
12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면? FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000 pasv_max_port=50000
| 위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.
13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면? ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.
14) 특정파일 패턴을 숨기려면? 특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
| 위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다. ㅁ 일반 사용자의 홈디렉토리에서 상위 디렉토리 이동 제한
/etc/vsftpd.conf 설정
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list 에 제한할 사용자 등록 |