목차
개요
vsFTPd 란 ProFTPD가 한참 주가를 높이고 있을 때 나온 FTP 데몬이다. 현재는 ProFTPD와 함께 많이 사용되고 있다. 하지만 필자는 vsFTPd 의 s가 Secure 가 아니라 Simple 의 약어가 아닌가 생각한다. 그만큼 단순하면서도 뛰어난 성능과 향상된 보안 때문에 레드햇이나 수세와 같은 리눅스 배포판에 번들되어있고, redhat.com, gnu.org, isc.org, openbsd.org, freebsd.org 등 많은 곳에서 사용한다. 솔라리스에서는 많이 사용되지는 않는듯 하지만 말이다. 컴파일해 설치해보면 실행파일 크기가 120KB로 매우 작다. ProFTPD는 약 900KB정도 된다.
vsFTPd의 컴파일에는 gcc, GNUmake가 필요하다. 여기서는 솔라리스 10에 있는 gcc, gmake를 사용할 것이다.
vsftpd - Secure, fast FTP server for UNIX-like systems
설치
root@wl ~ # wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
root@wl ~ # tar xvfz vsftpd-3.0.3.tar.gz
root@wl ~ # cd vsftpd-3.0.3
root@wl ~/vsftpd-3.0.3 # vi builddefs.h 1)
root@wl ~/vsftpd-3.0.3 # vi Makefile 2)
CC = /usr/sfw/bin/gcc
CFLAGS = -O2 -fPIE \
...
LDFLAGS = -fPIE -pie
INSTALL = /usr/ucb/install
root@wl ~/vsftpd-3.0.3 # vi sysdeputil.c 3)
static int pam_conv_func(int nmsg, struct pam_message** p_msg,
struct pam_response** p_reply, void* p_addata);
...
static int
pam_conv_func(int nmsg, struct pam_message** p_msg,
struct pam_response** p_reply, void* p_addata)
...
root@wl ~/vsftpd-3.0.3 # PATH=/usr/sfw/bin:$PATH /usr/sfw/bin/gmake
root@wl ~/vsftpd-3.0.3 # mkdir -p /usr/local/sbin
root@wl ~/vsftpd-3.0.3 # mkdir -p /usr/local/man/man8
root@wl ~/vsftpd-3.0.3 # mkdir -p /usr/local/man/man5
root@wl ~/vsftpd-3.0.3 # gmake install 4)
root@wl ~/vsftpd-3.0.3 # cp vsftpd.conf /etc/ 5)
1) SSL과 TCPWRAPPERS를 사용하도록 수정할 수 있다. vsftpd는 별도의 configure 스크립트를 제공하지 않는다.
2) GCC에 주는 옵션을 변경한다.
3) 316, 448 라인의 sysdeputil.c
를 수정한다. 솔라리스의 /usr/include/security/pam_appl.h
헤더의 pam_conv
구조체에 맞도록 변경한다. const
를 삭제하면 된다.
4) /usr/local
에 설치된다.
5) 설정파일을 복사해준다.
설정 및 실행
기본 설정
vsFTPd에 대한 자세한 설정은 하단의 설정 파라메터와 vsftpd.conf(5) 를 참조한다. 아래는 기본적으로 해야할 설정에 대해 나와있다.
root@wl ~ # mkdir /usr/share/empty/ 1)
root@wl ~ # vi /etc/vsftpd.conf 2)
listen=YES
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
ftpd_banner=FTP Service
root@wl ~ # /usr/local/sbin/vsftpd & 3)
1) /usr/share/empty/
가 없으면 로그인할 때 오류난다.
2) 첫번째줄부터 데몬으로 띄우고, 익명연결을 허용하지 않으며, 로컬 계정을 이용한 접속을 허용하며, 홈디렉토리로 chroot하고, 접속시 FTP Service 를 보여주라는 의미다. vsftpd의 장점 중 하나가 많은 기능을 제공하지 않기 때문에 그만큼 설정이 간단하다는 것이다.
3) 그냥 실행시키면 된다. 종료는 pkill 명령을 사용한다.
익명 FTP 설정
익명 FTP(Anonymous FTP)설정은 아래와 같이 할 수 있다.
root@wl ~ # useradd -u 300 -d /var/ftp ftp 1)
root@wl ~ # vi /etc/vsftpd.conf
anonymous_enable=YES
root@wl ~ # pkill vsftpd
root@wl ~ # /usr/local/sbin/vsftpd &
1) ftp사용자와 /var/ftp 디렉토리만 만들어주기 위함이다. /var/ftp가 익명연결의 루트가 된다.
설정 파라메터
vsftpd에서 지원되는(vsftpd.conf 에서 사용할 수 있는) 모든 파라메터에 대한 설명이다.
불린 형식
allow_anon_ssl: 익명 사용자도 SSL사용 가능. 기본값은 no
anon_mkdir_write_enable: 익명 사용자가 쓰기 가능한 디렉토리를 생성 가능. 기본값은 no
anon_other_write_enable: 익명 사용자가 삭제나 이름 변경 가능. 기본값은 no
anon_upload_enable: 익명 사용자가 업로드 가능. 기본값은 no
anon_world_readable_only: 익명 사용자는 읽기만 가능. 기본값은 yes
anonymous_enable: 익명 사용자 접속 가능. 기본값은 yes
ascii_download_enable: ASCII 모드 데이터 전송 허용. 기본값은 no
ascii_upload_enable: ASCII 모드 데이터 업로드 허용. 기본값은 no
async_abor_enable: 비동기 ABOR 명령 허옹. 기본값은 no
background: vsftpd는 listen 모드로 실행함. 기본값은 no
check_shell: 사용자의 셸 확인. PAM 에서는 영향 받지 않음. 기본값은 yes
chmod_enable: SITE CHMOD 커멘드 허용. 기본값은 yes
chown_uploads: 익명사용자가 업로드한 경우 사용자 변경. 기본값은 no
chroot_list_enable: chroot 허용. 기본값은 no
chroot_local_user: 로컬 사용자에게 chroot 허용. 기본값은 no
connect_from_port_20: PORT 명령 사용시 20번 포트로 접속. 기본값은 no
debug_ssl: . 기본값은 no
delete_failed_uploads: 실패한 업로드의 경우 파일 삭제. 기본값은 no
deny_email_enable: 로그인이 불허된 경우 메일 전송. /etc/vsftpd.banned_emails 파일을 참조함. 기본값은 no
dirlist_enable: 디렉토리 목록 보기 허용. 기본값은 yes
dirmessage_enable: 디렉토리 메시지 허용. 기본값은 no
download_enable: 다운로드 허용. 기본값은 yes
dual_log_enable: 두개의 로그파일(/var/log/vsftpd.log, /var/log/xferlog) 사용. 기본값은 no
force_dot_files: . 으로 시작하는 파일 허용. 기본값은 no
force_anon_data_ssl: ssl_enable 이 활성화되어있는 경우 익명 접속에서 데이터 전송시 강제로 SSL 사용 기본값은 no
force_anon_logins_ssl: ssl_enable 이 활성화되어있는 경우 익명 접속에서 로그인시 강제 SSL 사용. 기본값은 no
force_local_data_ssl: ssl_enable 이 활성화되어있는 경우 비 익명 계정 접속에서 데이터 전송시 강제로 SSL 사용. 기본값은 yes
force_local_logins_ssl: ssl_enable 이 활성화되어있는 경우 비 익명 계정 접속에서 로그인시 강제로 SSL 사용. 기본값은 yes
guest_enable: 비 익명 접속 계정을 guest 로그인으로 간주. 기본값은 no
hide_ids: 목록에서 소유자 및 그룹 정보를 ftp 로 전송. 기본값은 no
implicit_ssl: 모든 접속에서 SSL 을 묵시적으로 사용(FTPS 사용). 기본값은 no
listen: 독립 모드로 작동. (inetd 를 사용하지 않음). 기본값은 no
listen_ipv6: 독립 모드로 작동 및 IPv6 사용. (inetd 를 사용하지 않음). 기본값은 no
local_enable: 로컬 로그인 허용. 기본값은 no
lock_upload_files: 업로드 작업시 파일 잠금. 기본값은 yes
log_ftp_protocol: FTP 요청 및 응답 로깅. 기본값은 no
ls_recurse_enable: ls -R
형태의 디렉토리 재귀 목록 허용. 기본값은 no
mdtm_write: MDTM 허용. 기본값은 yes
no_anon_password: 익명 접속시 패스워드 묻지 않음. 기본값은 no
no_log_lock: 로그 파일에 쓰기시 잠그지 않음. 기본값은 no
one_process_model: 리눅스 2.4 커널에서, 프로세스당 한개의 접속만 허용. 기본값은 no
passwd_chroot_enable: /etc/passwd 의 홈 디렉토리를 기준으로 chroot 적용. 기본값은 no
pasv_addr_resolve: PASV에서 호스트명 사용. 기본값은 no
pasv_enable: PASV 메소드 허용. 기본값은 yes
pasv_promiscuous: PASV 보안 검사 허용. (같은 IP에서만 접속 가능) 기본값은 no
port_enable: PORT 메소드 허용. 기본값은 yes
port_promiscuous: PORT 보안 검사 허용. (같은 IP로 접속 가능) 기본값은 no
require_cert: 인증서 검사. 기본값은 no
require_ssl_reuse: SSL 세선 재사용 활성화. 기본값은 yes
run_as_launching_user: vsftpd 를 실행한 사용자로 실행. 기본값은 no
secure_email_list_enable: 익명접속시 허용할 메일주소 지정. /etc/vsftpd.email_passwords
에 지정함. 기본값은 no
session_support: 세션 지원 활성화. utmp, wtmp 을 갱신함. 기본값은 no
setproctitle_enable: 시스템 프로세스 목록에 세션 상태 보임. 기본값은 no
ssl_enable: SSL/TLS 활성화. 기본값은 no
ssl_request_cert: 인증서 요청 활성화. (필수는 아님) 기본값은 yes
ssl_sslv2: SSLv2 활성화. 기본값은 no
ssl_sslv3: SSLv3 활성화. 기본값은 no
ssl_tlsv1: TLSv1 활성화. 기본값은 yes
strict_ssl_read_eof: SSL 데이터 업로드시 SSL를 통해 종료해야 함. EOF를 통해 종료하지 않음. 기본값은 no
strict_ssl_write_shutdown: SSL 데이터 다운로드시 SSL를 통해 종료해야 함. EOF를 통해 종료하지 않음. 기본값은 no
syslog_enable: syslog 활성화. /var/log/vsftpd.log
에 저장하지 않음. 기본값은 no
tcp_wrappers: tcp_wrappers 지원 활성화. 기본값은 no
text_userdb_names: 숫자형식의 ID대신 문자로 보여줌. 기본값은 no
tilde_user_enable: 틸드(~)를 사용한 사용자 디렉토리 경로를 허용. 기본값은 no
use_localtime: 활성화시 로컬시간으로 목록의 시간 보임. (GMT시간으로 보여주는 것으로 되어있음). 기본값은 no
use_sendfile: sendfile 사용. 기본값은 yes
userlist_deny: 사용자 거부 목록 사용. (userlist_enable과 같이 사용해야 함) 기본값은 yes
userlist_enable: 사용자 목록 사용 여부. 기본값은 no
validate_cert: 인증서 검증. 기본값은 no
virtual_use_local_privs: 가상 사용자도 로컬 사용자와 같은 권한을 가짐. 기본값은 no
write_enable: 쓰기 명령(STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE) 활성화. 기본값은 no
xferlog_enable: /var/log/vsftpd.log
로그 활성화. 기본값은 no
xferlog_std_format: xferlog 표준 포맷 사용. 기본값은 no
숫자 형식
accept_timeout: PASV 접속 타임아웃. 초. 기본값은 60
anon_max_rate: 익명 사용자 데이터 전송률. Bytes/s. 기본값은 0(제한없음)
anon_umask: 익명사용자 파일 생성 마스크. 기본값은 077
chown_upload_mode: chown 된 경우 익명 업로드 파일 모드. 기본값은 0600
connect_timeout: PORT 접속 타임아웃. 초. 기본값은 60
data_connection_timeout: 데이터 전송 타임아웃. 초. 기본값은 300
delay_failed_login: 로그인 실패시 대기값. 초. 기본값은 1
delay_successful_login: 로그인 성공시 대기값. 초. 기본값은 0
file_open_mode: 업로드한 파일 모드. 기본값은 0666
ftp_data_port: 데이터 포트. 기본값은 20
idle_session_timeout: 아이들 세션 타임아웃. 초. 기본값은 300
listen_port: FTP 포트. 기본값은 21
local_max_rate: 로컬 사용자의 데이터 전송률. Bytes/s. 기본값은 0(제한없음)
local_umask: 파일 생성시 로컬 마스크. 기본값은 077
max_clients: 최대 클라이언트 수. 기본값은 0(제한없음)
max_login_fails: 로그인 실패 시 세션을 끊을 회수. 기본값은 3
max_per_ip: IP당 접속 회수. 기본값은 0(제한없음)
pasv_max_port: PASV 명령시 최대 포트 번호. 기본값은 0(제한없음)
pasv_min_port: PASV 명령시 최소 포트 번호. 기본값은 0(제한없음)
trans_chunk_size: 정크 크기. 8192를 사용해 볼 수 있음. 기본값은 vsftpd 에서 정함
문자 형식
anon_root: 익명 루트 디렉토리 위치. 기본값은 없음
banned_email_file: 익명 접속시 거부할 메일 주소 목록. 기본값은 /etc/vsftpd.banned_emails
banner_file: 배너 파일 위치. 기본값은 없음
ca_certs_file: 인증서 위치. 기본값은 없음
chown_username: 익명 접속 사용자가 업로드한 파일의 소유자. 기본값은 root
chroot_list_file: 로컬 사용자의 chroot 를 수행할 목록. 기본값은 /etc/vsftpd.chroot_list
cmds_allowed: 허용할 명령. 기본값은 없음(전체허용)
cmds_denied: 허용하지 않을 명렁. 기본값은 없음
deny_file: 거부할 파일 이름. *, ?, {, } 패턴 사용 가능. (매뉴얼 참조 필수!) 기본값은 없음
dsa_cert_file: DSA 인증서 파일 위치. 기본값은 없음
dsa_private_key_file: DSA 개인키 파일 위치. 기본값은 없음
email_password_file: 이메일 패스워드 파일 이름. 기본값은 /etc/vsftpd.email_passwords
ftp_username: FTP 사용자명. 기본값은 ftp
ftpd_banner: vsftpd 배너. 기본값은 없음
guest_username: 손님 사용자 이름. 기본값은 ftp
hide_file: 목록에 나오지 않을 파일. 기본값은 없음
listen_address: IPv4의 바인드할 주소. 기본값은 없음
listen_address6: IPv6의 바인드할 주소. 기본값은 없음
local_root: 로컬 사용자의 루트 디렉토리. 기본값은 없음
message_file: 메시지 파일. 기본값은 .message
nopriv_user: 권한없는 사용자 이름. 기본값은 nobody
pam_service_name: PAM 인증시 사용할 서비스 명. 기본값은 ftp
pasv_address: PASV에 사용할 주소. 기본값은 없음
rsa_cert_file: RSA 인증서. 기본값은 /usr/share/ssl/certs/vsftpd.pem
rsa_private_key_file: RSA 키파일. 기본값은 없음
secure_chroot_dir: 비어있는 디렉토리. 기본값은 /usr/share/empty
ssl_ciphers: SSL 시퍼 슈트. 기본값은 DES-CBC3-SHA
user_config_dir: 사용자 설정 디렉토리. 사용자당 하나의 파일로 각각에 맞는 설정을 할 수 있음. 기본값은 없음
user_sub_token: 사용자 서브 토큰. 가상 사용자에 한함. 자세한 사항은 매뉴얼 참조. 기본값은 없음
userlist_file: 사용자 목록 파일. 기본값은 /etc/vsftpd.user_list
vsftpd_log_file: vsftpd 로그 파일. 기본값은 /var/log/vsftpd.log
xferlog_file: xferlog 로그 파일. 기본값은 /var/log/xferlog