본문 바로가기

Linux/FTP

vsftp 설치 및 설정내역

출처 : cafe.naver.com/onsesangnet  ( 글쓴이 : adbar)
===============================================================

1. vsftpd FTP 서버에 대해

vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다.
vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어
보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트
rpm은 나온 적 있음)

* 지원 및 테스트된 OS

- Linux (Redhat, SuSE, Debian)
- Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음)
- FreeBSD, OpenBSD
- HP-UX
- IRIX

* 주요 기능

- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용)
- 가상 사용자 설정
- 전송 대역폭 지정
- PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김)
- xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
- Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원
- IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때)
- ...









2. vsftpd 설치

※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

-------------------------------------------------------------
# tar xvfz vsftpd-1.2.0.tar.gz
# cd vsftpd-1.2.0
-------------------------------------------------------------

한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록
logging.c 파일을 연 후 140번째 줄의

str_replace_unprintable(p_str, '?');

를 다음처럼 주석 처리한다.

/* str_replace_unprintable(p_str, '?'); */

또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서

#undef VSF_BUILD_TCPWRAPPERS 를
#define VSF_BUILD_TCPWRAPPERS 로 바꾼다.

-------------------------------------------------------------
# make
# make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치)
# cp vsftpd.conf /etc (환경설정 파일 복사)
# chmod 600 /etc/vsftpd.conf
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사)
-------------------------------------------------------------

/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)

-------------------------------------------------------------
# FTP 접속을 허용하지 않을 ID를 등록한다.
# /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
smmsp
xfs
gdm
mysql











3. 설정내역

# anonymous 사용자의 접속 허용 여부, 즉 anonymous ftp (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO

# 로컬 계정 사용자의 접속 허용 여부
local_enable=YES

# write 명령어 허용 여부
write_enable=YES

# 로컬 계정 사용자용 umask
local_umask=022

# anonymous 사용자가 파일을 업로드 할 수 있는지 여부
# anon_upload_enable=NO
#
# anonymous 사용자의 디렉토리 생성 허용 여부
# anon_mkdir_write_enable=NO
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES

# xferlog 표준 포맷으로 로그를 남길지 여부
# 아래에서 NO로 설정했을 때를 설명함
xferlog_std_format=NO
# 파일 전송 로그 파일명
#xferlog_file=/var/log/vsftpd.log
#
# 파일 전송 로그를 남길 것인지 여부
xferlog_enable=NO

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#

#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#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
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호)
# 한글 사용 가능
# ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails

#
# 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정
# 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를 chroot_list_file= 에 설정한 파일에
# 지정한다.
# chroot_local_user= 설정과 관련이 있으니 '3. 문제 해결'을 꼭 읽어보라.
#
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES

# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함)
pam_service_name=vsftpd

userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES









4. 문제 해결

1) ftpwho 같은 명령은 있나?
  또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

 ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

 # ps -ef|grep vsftpd
 # fuser -v ftp/tcp

 vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

 vsftpd는 출력할 수 없다고 판단하는
 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

chroot_local_user=YES

또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
사용자 ID를 한줄에 하나씩 나열하면 된다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
/etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
즉, 반대로 작용한다.

standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

 가능하면 root 접속은 허용하지 않기를 바란다.
 /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

 /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

 Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
  (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)

 /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

 레드햇의 경우 /etc/rc.d/init.d/xinetd restart

 이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

 # /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

 * xinetd를 이용하는 경우

  /etc/service 에 'ftp2  11121/tcp' 한 줄을 추가한다.
  그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
  service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

 * standalone으로 운영하는 경우

  /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

 바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=21











vsftpd의 다양한 기능 설정(vsftpd.conf)
  vsftpd는 다양한 기능이 있습니다. 꼭 필요한 몇개의 지시자에 대해 알아보도록 하겠습니다.

  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에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
force_dot_files=YES



  5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면?
특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
hide_ids=YES



  6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?
하 위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
ls_recurse_enable=YES



  7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?
openssh 에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
passwd_chroot_enable=YES


  8) 파일을 올렸는데 시간이 이상하게 보인다면?
대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
use_localtime=YES


  9) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.
local_max_rate=300000

위 설정은 300KByte/Sec의 대역폭을 제공합니다.


  10) 동시 접속자수를 제한하려면?
ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
max_clients=10
위 설정은 동시에 10개의 연결으로 제한합니다.


  11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면?
ftp 서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
max_per_ip=2
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.


  12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?
FTP 에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000
pasv_max_port=50000
위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.



  13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
deny_file={*.mp3,*.wmv}
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.



  14) 특정파일 패턴을 숨기려면?
특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.





####################################### Global Settings ########################################
## VsFTPd의 전체 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## VsFTP 데몬을 background로 실행할 것인지 설정 합니다. (기본값 = NO)
## => VsFTP 데몬은 기본적으로 inetd 모드로 동작이 됩니다. 따라서 독립모드(standalone)로
## 데몬을 운영하실 거라면 이 옵션과 listen 옵션을 모두 YES로 켜주셔야 됩니다.
## 반대로 VsFTP 데몬을 inetd 모드로 운영하시려면 이 옵션과 listen 옵션을 비활성화 하시면 됩니다.
## 일반적으로 FTP 데몬은 많은 접속이 있을 경우에 standalone 모드로 운영하는것이 좋으며,
## 많은 접속이 없는 경우에는 inetd 모드로 운영하는것이 시스템 자원효율에 좋습니다.
background=YES

## background 옵션과 같이 사용되며, 이 옵션은 listen_port에서 들어오는 요청에 대해서
## 데몬이 요청을 받아드릴지에 대해 설정합니다. (기본값 = NO)
## => 만약 데몬을 독립모드(standalone)로 운영하실 거라면 background 옵션과 같이 이 옵션도
## 함께 활성화 시켜야 됩니다.
listen=YES

## listen 옵션과 동일하지만, IPv6에서 운영할 때 사용 합니다. (기본값 = NO)
## => 일반적으로 IPv6는 사용하지 않으므로 비활성화 하시면 됩니다.
listen_ipv6=NO

## VsFTP 데몬이 독립모드(standalone)로 동작할 때 사용할 포트를 지정합니다. (기본값 = 21)
listen_port=21

## 멀티 FTP 데몬을 사용할 때 요청을 받아드릴 IP를 설정합니다. (기본값 = none)
## => 이 옵션은 multi-homed의 설정을 참조하시기 바랍니다.
#listen_address=none

## listen_address와 동일하며 IPv6에서 운영할 때 사용 합니다. (기본값 = none)
#listen_address6=none

## NAT를 사용하는 클라이언트의 공용 IP를 설정할 때 사용 합니다. (기본값 = none)
## => 일반적으로 설정하지 않아도 상관 없습니다.
#pasv_address=none

## VsFTPd가 구동될 서버의 유저를 설정합니다. (기본값 = nobody)
nopriv_user=nobody

## FTP 서버에 접속할 수 있는 클라이언트의 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_clients=100

## IP당 접속할 수 있는 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_per_ip=30

## 계정 사용자의 최대전송률을 지정합니다. (기본값 = 0)
## => 업/다운로드의 속도를 제한할때 사용하며, 단위는 bps 입니다.
local_max_rate=0

## 한번에 전송될 크기를 지정합니다. (기본값 = 0)
## => 이 옵션은 전송할 파일을 지정한 단위로 나눠서 전송하도록 하는 옵션입니다.
## rate 옵션과 밀접한 관계가 있으며, 기본값인 0으로 설정하면, vsftpd가 알아서 판단하므로
## 되도록이면 수정하지 않는것이 좋습니다.
## vsftpd의 제작자 또한 이 옵션을 따로 수정할 이유가 없을 것이라고 말하고 있습니다.
trans_chunk_size=0

## 서버의 FTP 데몬시간을 서버의 표준시간으로 고정할지 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 비활성화 하게되면 표준시각(GMT)를 보여주므로, 한국의 경우 9시간의 오차가 발생합니다.
use_localtime=YES

## 프로토콜의 현재 상태를 출력해줄 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 ps 명령어를 사용했을때 세션의 현재 상태도 보여줍니다.
## 또한 LTN에서 제공하는 ftpwho 스크립트를 사용할 때에도 이 옵션을 활성화 하셔야 됩니다.
setproctitle_enable=YES

## 특정 사용자의 개별 설정 파일을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 /etc/vsftpd/vsftpd.conf의 지시문을 무시하고 사용할 수 있습니다.
#user_config_dir=none
#
############################## 접속 설정 ##############################
#
## 계정 사용자의 접속에 대한 설정을 합니다. (기본값 = NO)
local_enable=YES

## 명시된 사용자만 로그인을 허용할 때 사용하는 옵션입니다. (기본값 = NO)
## => userlist_deny 옵션이 비활성화 된 상태에서만 작동합니다.
userlist_enable=NO

## 명시된 사용자가 로그인을 할 수 없도록 제한하는 옵션 입니다. (기본값 = YES)
## => userlist_enable 옵션이 비활성화 된 상태에서만 작동하며, 서로 반대되는 개념 입니다.
userlist_deny=YES

## 명시된 사용자를 읽어올 파일을 지정합니다. (기본값 = /etc/vsftpd.user_list)
userlist_file=/etc/vsftpd.user_list

## 디렉토리 목록의 사용자와 그룹 필드들에 있는 숫자 ID 들이 보이는 것이 기본값 입니다.
## 당신은 이 파라미터를 활성화 함으로써 글자 이름을 사용할 수도 있습니다.
## 그러나 이 항목은 성능상의 이유로 기본적으로 비활성화 되어 있습니다. (기본값 = NO)
text_userdb_names=NO

## PAM 사용자 인증을 할 때 사용될 인증파일을 지정합니다. (기본값 = ftp)
## => VsFTPd를 RPM으로 설치하게 되면 일반적으로 vsftpd로 인증파일이 생성됩니다.
pam_service_name=vsftpd

## TCP wrappers에 의해서 FTP 접속을 제어 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 /etc/hosts.allow와 /etc/hosts.deny에 의해서 제어할 수 있습니다.
## 그러나 이 옵션을 사용하려면 vsftpd 소스중 builddefs.h 파일에서 설정을 변경해야 됩니다.
## 변경전 -> #undef VSF_BUILD_TCPWRAPPERS
## 변경후 -> #define VSF_BUILD_TCPWRAPPERS
## 참고: LTN에서 제공하는 vsftpd는 이미 패치되어 있습니다.
tcp_wrappers=YES

## TLS를 사용할 것인지에 대해 설정합니다. (기본값 = YES)
## => 이 옵션은 TLS를 활성화하며, TLS가 가능한 클라이언트가 이용하는데 도움이 됩니다.
ssl_tlsv1=YES

## SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 OpenSSL에 대해서 컴파일 되어 있고, 이 옵션을 허용할 경우 vsftpd는 SSL을 통한 보안 접속을 지원합니다.
## 이 옵션은 제어 연결을 지원(로그인을 포함)하며, 또한 데이터 연결도 지원 합니다.
## 사용자는 SSL을 지원하는 클라이언트를 필요로 할 것이며, 반드시 필요한 경우에만 허용하는것이 좋습니다.
## 그러나 vsftpd는 OpenSSL 라이브러리의 보안과 관련한 게런티를 만들 수 없으며,
## 이 옵션을 활성화 한다는것은 OpenSSL 라이브러리의 보안을 믿는다는 것을 전제로 합니다.
ssl_enable=NO

## SSL v2 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv2=NO

## SSL v3 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv3=NO

## SSL 인증서의 위치를 지정합니다. (기본값 = none)
## => SSL의 암호화 접속을 사용하기 위해, DSA 인증서의 위치를 지정합니다.
#dsa_cert_file=none

## 이 옵션은 vsftpd가 암호화 된 SSL 연결들에 대해 어떤 SSL 암호화 방식을 선택하는지에 따라 사용됩니다.
## 더 자세한 사항은 관련 암호 메뉴얼 페이지를 보십시요.
## 암호화를 알리지 않는 것은 원격에서 선택된 암호화 방식의 취약점을 공격하려고 불법적인 원격 공격을
## 막기 위한 유용한 보안 지침이 될 수 있습니다. (기본값 = DES-CBC3-SHA)
#ssl_ciphers=DES-CBC3-SHA

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 데이터 연결 상태에서 데이터를 주고 받기 위해 보안 SSL 연결을 사용하도록
## 강제적으로 설정됩니다. (기본값 = YES)
#force_local_data_ssl=YES

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 비밀번호를 전달하기 위해 보안 SSL 연결을 사용하도록 강제적으로 설정됩니다.
## (기본값 = YES)
#force_local_logins_ssl=YES
#
############################ 대기시간 설정 ############################
#
## 액티브 모드(Active Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
connect_timeout=60

## 패시브 모드(Passive Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
accept_timeout=60

## 데이터 전송 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP 서버로부터 데이터를 업/다운로드를 한 뒤 아무런 작동도 안할때 접속이 종료되도록 합니다.
data_connection_timeout=300

## 접속 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP에 접속한 뒤 아무런 작동도 안할 때 지정된 시간이후 접속이 종료되도록 합니다.
idle_session_timeout=300
#
############################# 메시지 설정 #############################
#
## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지 파일을 설정합니다. (기본값 = none)
#banner_file=/etc/vsftpd/welcome.msg

## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지를 설정합니다. (기본값 = none)
ftpd_banner=Welcome to vsftpd server

## 디렉토리의 메시지 파일을 사용자에게 보여줄 것인지 설정합니다. (기본값 = NO)
dirmessage_enable=NO

## 메시지 파일을 지정 합니다. (기본값 = .message)
## => dirmessage_enable 옵션을 허용했을 경우에 메시지를 읽어올 파일을 지정합니다.
message_file=.message
#
############################## 모드 설정 ##############################
#
## 데이터 전송을 위해서 Active Mode를 사용할 것인지 설정합니다. (기본값 = YES)
port_enable=YES

## 액티브모드(Active Mode) 데이터 전송 포트인 20번을 사용할 것인지 설정 합니다. (기본값 = NO)
connect_from_port_20=YES

## 데이터 전송 포트를 지정합니다. (기본값 = 20)
## => connect_from_port_20 옵션이 활성화되었을때 사용되는 포트를 지정합니다.
ftp_data_port=20

## 데이터 전송을 위해서 Passive mode를 사용할 것인지 설정합니다. (기본값 = YES)
## => Active Mode로 접근할 수 없는 사용자들을 위해 활성화 하는것이 좋습니다.
pasv_enable=YES

## 동일한 IP주소에서 이루어지는 데이터 연결을 보장해주는 보안체크 기능을 사용할 것인지
## 설정합니다. (기본값 = NO)
pasv_promiscuous=NO

## 패시브 모드로 연결시 할당될 최대 및 최소 포트를 설정하는 옵션 입니다. (기본값 = 0)
## => 일반적으로 50000~60000 포트를 지정하는것이 좋으며, 기본값인 0으로 설정하게 되면
## well-known port를 제외한 무작위 포트를 이용하게 됩니다.
pasv_min_port=0
pasv_max_port=0

## 아스키모드(ASCII Mode) 전송 허용에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 악의적인 사용자에 의해서 시스템의 자원이 고갈될 수 있으므로 주의해야 됩니다.
ascii_download_enable=YES
ascii_upload_enable=YES
#
############################## 권한 설정 ##############################
#
## 파일 생성 umask 값을 지정합니다. (기본값 = 077)
## => umask는 "max permission-umask=create permission" 의 공식을 가지고 있습니다.
## 디렉토리의 기본값은 0777이며, 파일의 기본값은 0666 입니다.
## 따라서 일반적인 시스템의 파일생성 퍼미션인 644를 생성하려면 022로 해야 됩니다.
## 디렉토리: 0777-022=0755, 파일: 0666-022=0644
local_umask=022

## 파일이 업로드 되었을 때의 퍼미션을 지정해주는 옵션 입니다. (기본값 = 0666)
## => 이 옵션은 반드시 umask 옵션보다 아래에 있어야 됩니다.
file_open_mode=0644

## 접속한 디렉토리의 파일리스트를 보여줄 지 설정합니다. (기본값 = YES)
dirlist_enable=YES

## 히든 파일/디렉토리를 보여줄 것인지 설정하는 옵션 입니다. (기본값 = NO)
## => 히든 파일/디렉토리는 dot(.) 으로 시작하는 것을 말합니다.
force_dot_files=NO

## 이 옵션이 활성화되면, vsftpd는 ~chris/pics와 같이 사용자 계정 이름에 틸드 표시가 따라오는 경우의
## 경로명을 접근하도록 시도하고 해석할 것입니다.
## vsftpd는 항상 ~ 와 ~/somthing 을 해석한다는 것을 주의하시기 바랍니다.
## (여기서 ~ 는 기본적으로 로그인 했을 때의 디렉토리로 해석됩니다.)
## ~user 경로들은 _current_ chroot() 에서 /etc/passwd 파일을 찾을 수 있을 경우에만 해석 될 수 있을 것입니다.
## (기본값 = NO)
tilde_user_enable=NO

## 디렉토리 목록에서 UID를 보여주지 않고, 모두 FTP로 표시할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화 하면 모든 파일의 소유권이 FTP로 표시되므로 보안에 도움이 될 수 있습니다.
hide_ids=NO

## 사용자에게 STOR(저장),DELE(삭제),RNFR(이름변경),RNTO(이름변경),MKD(디렉토리생성),RMD(디렉토리삭제),
## APE(이어올리기), SITE(umask,chmod)등의 권한을 허용할지 설정합니다. (기본값 = NO)
## => 이 옵션이 비활성화되어 있으면 사용자는 FTP 서버에 데이터를 쓸 수 없습니다.
write_enable=YES

## 다운로드에 대한 권한을 설정합니다. (기본값 = YES)
download_enable=YES

## 사용자가 퍼미션을 변경할 수 있도록 설정합니다. (기본값 = YES)
chmod_enable=YES

## 이 옵션은 당신의 플랫폼에서 sendfile() 시스템 호출을 사용하는 것과 관련된 이익을 테스트 할 때
## 사용되는 내부 설정입니다. (기본값 = YES)
use_sendfile=YES

## 사용자에게 허가할 명령어를 지정합니다. (기본값 = none)
#cmds_allowed=PASV,RETR,QUIT

## 업로드를 거부할 파일명을 지정합니다. (기본값 = none)
#deny_file={*.mp3,*.mov}

## 숨길 파일명을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 서버에 실제로 데이터는 존재하지만, FTP 사용자에게는 보이지 않도록
## 설정하는 기능입니다. 악의적인 사용자에게 간단한 fake를 걸 수 있습니다.
#hide_file={*.mp3,*.mov}

## async ABOR 명령어를 사용할 수 있도록 설정합니다. (기본값 = NO)
## => 일부 FTP 클라이언트에서 파일전송을 취소했을 경우, 취소되지 않은 상태로 있는 경우가
## 생길 수 있는데 그것을 방지하기 위해 사용할 수 있습니다.
## 그러나 보안상 좋지 않기 때문에, 비활성화 하시는것이 좋습니다.
async_abor_enable=NO

## ls -R 명령을 허용할 것인지를 설정하는 옵션 입니다. (기본값 = NO)
## => 만약 하위디렉토리나 파일이 매우 많은 상위디렉토리에서 이 옵션을 활성화하게 되면
## 시스템 자원의 낭비가 심하므로, 비활성화 하시는것이 좋습니다.
ls_recurse_enable=NO
#
############################## 보안 설정 ##############################
#
## 모든 계정 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => FTP 사용자가 시스템에 접근할 수 있으면 위험하므로 반드시 활성화 하는것이 좋습니다.
chroot_local_user=YES

## SSH로 접속했을 때 자신의 홈 상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => chroot_local_user 옵션이 활성화되었고, OpenSSH에 패치를 했을경우, SSH 또한 자신의
## 홈상위 디렉토리를 접근할 수 없도록 설정할 수 있으며, /etc/passwd 파일의 홈 디렉토리
## 필드의 /home/사용자/./와 같이 "/./"를 붙여 사용자를 홈디렉토리에 제한하게 합니다.
passwd_chroot_enable=NO

## 명시된 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => 이 옵션은 chroot_local_user 옵션이 비활성화되어 있어야 사용할 수 있습니다.
## => 전체 적용이 아니라 일부 사용자만 제한할때 편하지만, 개별 적용은 보안상 좋지 않습니다.
chroot_list_enable=NO

## 사용자의 홈상위 디렉토리를 설정한 파일을 지정합니다. (기본값 = /etc/vsftpd.chroot_list)
## => chroot_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
chroot_list_file=/etc/vsftpd.chroot_list

## secure chroot()에 사용될 디렉토리를 지정합니다. (기본값 = /usr/share/empty)
## => 이 옵션에서 지정된 디렉토리는 비어있어야되며, ftp 사용자에 대해 쓰기 권한이 없어야 됩니다.
#secure_chroot_dir=/usr/share/empty
#
############################## 로그 설정 ##############################
#
## VsFTP의 기본 로그 파일을 지정합니다. (기본값 = /var/log/vsftpd.log)
## => 이 옵션은 xferlog_enable 옵션과 xferlog_std_format 옵션이 비활성화일때 작동하며,
## dual_log_enable 옵션이나 syslog_enable 옵션이 활성화될때 사용됩니다.
#vsftpd_log_file=/var/log/vsftpd.log

## 2중 로그를 기록할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 활성화하면, /var/log/xferlog와 /var/log/vsftpd.log에 로그가 기록됩니다.
#dual_log_enable=NO

## syslogd 데몬을 이용해서 로그를 기록할 것인지 설정합니다. (기본값 = NO)
#syslog_enable=NO

## xferlog_enable 옵션을 활성화했을 경우에 로그를 기록할 파일을 지정합니다.
## (기본값 = /var/log/vsftpd.log)
xferlog_file=/var/log/vsftpd.log

## 파일의 송/수신 결과를 xferlog_file 옵션으로 지정된 로그파일에 기록합니다. (기본값 = NO)
xferlog_enable=YES

## 로그를 기록할 때 표준 xferlog 포맷으로 저장할 것인지를 설정합니다. (기본값 = NO)
xferlog_std_format=NO

## FTP Protocol의 모든 내용을 기록할지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 FTP 명령어와 반응이 모두 로깅되므로 디버그에 유용하게 쓰입니다.
log_ftp_protocol=NO

## 로그 파일을 잠글것인지에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 vsftpd가 로그 파일을 기록할 때, 파일을 잠그는 것을 막는 옵션 입니다.
## 보통은 활성화 하지 않아도 되며, 솔라리스/베리타스 파일 시스템 조합에서 때때로
## 로그파일을 잠그려는 시도를 하는 운영체제 시스템 버그를 피하기 위해 존재 합니다.
no_log_lock=NO

## 사용자의 접속 기록을 남길 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 utmp/wtmp 파일에 접속 기록이 로깅됩니다.
## 따라서 last 명령어로 접속 여부를 확인하려면 활성화 하셔야 됩니다..
session_support=YES
#
#
##################################### Virtual User Settings ####################################
## 가상 사용자에 대한 설정 입니다. ##
################################################################################################
#
## 가상유저 모드로 운영할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 모든 비익명 사용자는 가상 사용자로 접속이 됩니다.
guest_enable=NO

## 가상유저들의 실제 계정을 지정합니다. (기본값 = ftp)
#guest_username=ftp

## 가상유저들의 권한을 실제 계정의 권한처럼 허용할 것인지를 설정합니다. (기본값 = NO)
## => 이 옵션이 활성화되어있지 않으면 가상유저는 FTP에 접속해서 파일을 생성하지 못합니다.
## 또한 가상유저는 기본적으로 anonymous의 권한을 갖고 있습니다.
#virtual_use_local_privs=NO

## 가상유저들을 지칭할 가상의 변수를 지정합니다. (기본값 = none)
#user_sub_token=$USER

## 가상유저들이 로그인 후 이동될 디렉토리를 지정합니다. (기본값 = none)
#local_root=/home/virtual/$USER
#
###################################### Anonymous Settings ######################################
## 익명 사용자에 대한 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## 익명 사용자의 접속에 대한 설정을 합니다. (기본값 = YES)
anonymous_enable=NO

## 익명사용자의 SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용됩니다.
#allow_anon_ssl=NO

## 로그인 거부 리스트 사용에 대한 설정을 합니다. (기본값 = NO)
## => /etc/vsftpd.banned_emails 에 설정된 주소로 로그인을 거부할 수 있습니다.
## 만약 anonymous@ 라고 설정해두면, anonymous@를 사용하는 사용자는 접속할 수 없게됩니다.
#deny_email_enable=NO

## 로그인 거부 파일을 지정합니다. (기본값 = /etc/vsftpd.banned_emails)
## => deny_email_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#banned_email_file=/etc/vsftpd.banned_emails

## 명시된 이메일 주소로만 접속을 허용할 지 설정합니다. (기본값 = NO)
#secure_email_list_enable=NO

## 접속을 허용할 이메일 주소 파일을 지정합니다. (기본값 = /etc/vsftpd.email_passwords)
## => secure_email_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#email_password_file=/etc/vsftpd.email_passwords

## 익명 사용자의 접속에 사용될 계정명을 지정합니다. (기본값 = ftp)
#ftp_username=ftp

## 익명 사용자가 접속할 때 패스워드를 묻지않고 접속시킬 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속시 패스워드를 묻지 않습니다.
#no_anon_password=NO

## 클라이언트 접속마다 하나의 프로세스가 작동되도록 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속하는 수만큼 프로세스가 작동되므로 효율이 좋습니다.
#one_process_model=NO

## 익명 사용자의 기본 디렉토리를 지정합니다. (기본값 = none)
## => 일반적으로 익명 사용자의 접근을 허용하면 ftp_username에 지정된 사용자의
## 홈 디렉토리가 기본적으로 설정됩니다.
## 그렇지만 만약 변경할 필요가 있을 경우에 이 옵션을 사용하면 됩니다.
#anon_root=/var/ftp/pub

## 익명 사용자의 다운로드 최대전송률을 지정합니다. (기본값 = 0)
## => 다운로드 속도를 제한할때 사용하며, 단위는 bps 입니다.
#anon_max_rate=0
#
############################## 권한 설정 ##############################
#
## 익명 사용자의 업로드에 대한 설정을 합니다. (기본값 = NO)
## => Global Setting에서의 write_enable 옵션이 허용되었을 경우에
## 익명 사용자가 업로드 가능한 디렉토리에 파일을 업로드할 수 있게 합니다.
#anon_upload_enable=NO

## 익명 사용자들의 다운로드에 대한 설정을 합니다. (기본값 = YES)
## => 익명 사용자들이 읽기 가능한 파일을 다운로드 할 수 있게 설정합니다.
#anon_world_readable_only=YES

## 익명 사용자의 디렉토리 생성에 대한 설정을 합니다. (기본값 = NO)
## => 익명 사용자가 쓰기 가능한 디렉토리에서 새로운 디렉토리를 생성할 수 있습니다.
#anon_mkdir_write_enable=NO

## 익명 사용자의 파일 삭제,변경에 대한 설정을 합니다. (기본값 = NO)
## => 파일 삭제 및 파일명 변경등과 같은 기능을 사용할 수 있게 합니다.
#anon_other_write_enable=NO

## 익명 사용자의 소유권 변경이 가능한 계정명을 설정합니다. (기본값 = root)
#chown_username=root

## 익명 사용자의 소유권 변경에 대한 설정을 합니다. (기본값 = NO)
## => 익명으로 업로드된 파일을 chown_username 옵션으로 명시된 사용자의
## 소유권으로 변경되도록 할 수 있습니다.
#chown_uploads=NO

## 익명 사용자의 파일생성 umask 값을 지정 합니다. (기본값 = 077)
## => umask에 대한 설명은 local_mask의 설명을 참조하시기 바랍니다.
#anon_umask=022
#
#######################################################################

'Linux > FTP' 카테고리의 다른 글

vsftpd 설치 및 설정  (0) 2008.10.09