메뉴 건너뛰기

2014.02.27 11:07

vsftp 이란?

조회 수 9517 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
vsFTP란?
- vsftp는 보안 부분을 특히 강조한 데몬으로 Redhat, Suse, Open-BSD에서 기본 FTP로 채택하고 있으며 보안, 빠른 퍼포먼스, 안정성을 주요 특징으로 소개하고 있다.
또한, config 파일의 설정 문법도 아주 간단해서 FTP 서버 관리를 쉽게 할 수 있다.

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

※ TIP
- SSH 터널링을 사용하여 접속시 Bad IP Deny 메시지가 나올 경우 vsftpd.conf에 pasv_promiscuous=YES 추가한다.
- FTP 유저의 홈디렉토리의 소유권을 root.root로 셋팅해야 익명접속이 가능하다.
- /var/ftp/pub 폴더 권한을 777로 변경하면 접속이 안된다. vsFTP에서 vs는 Very Secure의 약자입니다. 보안이 강화된 FTP 서비스로 /var/ftp/pub 디렉토리에 모든 권한을 주게 될 경우 보안상 위험하기 때문에 접속이 불가능하다.

※ 접속자 확인
root@localhost# ps -ef |grep vsftpd
root@localhost# fuser -v ftp/tcp
( 참고 : v1.2 이상 부터 PAM을 통해 wtmp에 접속 로그를 남기기 때문에 last 명령어로 접속 여부를 확인 할 수 있다. )
① 환경설정

root@localhost# vi /etc/vsftpd.conf
root@localhost# mkdir /usr/share/empty
- vsFTP 는 empty 라는 디렉토리를 필요로 한다. 기본구성은 /usr/share/empty 다.


② 사용자 생성
- vsFTP 를 운영하기 위해서는 nobody 사용자가 필요
root@localhost# usradd -M nobody
root@localhost# grep nobody /etc/passwd
nobody:x:99:99:Nobody:/:/bin/bash

- Anonymous FTP 에서 사용할 ftp 계정 생성
root@localhost# mkdir /var/ftp
root@localhost# useradd -d /var/ftp ftp
root@localhost# chown root.root /var/ftp
- 반드시 ftp 유저의 홈디렉토리의 권한을 root.root 로 셋팅해야 익명접속이가능하다.
root@localhost# chmod og-w /var/ftp

③ 접속 제한
root@localhost# vi /etc/pam.d/vsftpd
auth required /lib/security/pam_listfile.so
item=user sense=deny file=/etc/ftpusers onerr=succeed <==(1)
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
- 이 파일은 /etc/ftpusers에 등록된 유저명은 접근하지 못하도록 설정할 수 있는 부분이다. (sense=deny)
- ftpusers 파일이 없다면 생성해 주면 된다. ( /etc/passwd 파일을 참조해 작성하면 된다.)

root@localhost# vi /etc/ftpusers
- FTP 접속을 허용하지 않을 ID를 등록한다. (또는 vsftpd.ftpusers)
- /var/log/messages에 다음과 같은 로그가 남는다.
Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

④ etc
root@localhost# vi /etc/xinetd.d/vsftp ::: disable = yes
root@localhost# /etc/rc.d/init.d/xinetd restart
root@localhost# /usr/local/sbin/vsftpd &

※ vsftpd.conf

① 기본 설정
ftpd_banner=Welcome to acsecret FTP service.
- FTP 서버 접속할 때 로긴 메시지 (default=버전번호). 한글 사용 가능
- dirmessage_enable=YES 새로운 디렉토리에 들어갔을 때 뿌려줄 환경 메시지를 저장한 파일명

listen=YES Standalone 으로 운영할 때 listen=YES.
- connect_from_port_20=YES Standalone 일때 포트 변경을 원할 경우 설정.
listen_port=2121 기본 포트외 다른 포트를 사용한다.

② 서버 동작
idle_session_timeout=600 (default=300초).
- 클라이언트에서 아무런 명령이 없을 경우, 세션을 끝낼 때까지의 대기시간.
data_connection_timeout=120 (default=60초).
- data connection 을 끊을 대기 시간.
ls_recurse_enable=YES
- 디렉토리 내용 출력시 캐쉬 사용여부. (클라언트 ftp 접속 프로그램 에서도 지정 가능)
pam_service_name=vsftpd
- PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd 명으로 복사함)

③ 접속 권한
local_enable=YES (default = NO).
- 로컬 계정 사용자의 접속 허용 여부
anonymous_enable=YES (default = YES).
- anonymous 사용자의 접속 허용 여부
userlist_enable=YES
- /etc/vsftpd.user_list 에 있는 사용자에 대해 접근을 허가 설정.

deny_email_enable=YES
- 익명 접속시 패스워드에 일반 이메일 주소를 거부 여부 (vsftpd.banned_emails에 지정된 이메일 주소만 허용)
banned_email_file=/etc/vsftpd.banned_emails

- chroot
chroot_local_user=YES (default=NO). 접속시 로컬 사용자의 홈디렉토리를 /로 변경
사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정. 제한이 필요할 경우 , YES 로 바꾼 후 제한할 사용자 ID 를 chroot_list_file= 에 설정한 파일에 지정한다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
- 접속시 사용자 홈디렉토리를 /로 변경할 사용자 목록 허용. chroot 제한(적용)이 필요할 경우, YES 로 바꾼후 제한을 적용할 사용자 ID 를 root_list_file= 에 설정한 파일에 지정한다.
- 주의할 것은 chroot_local_user=YES 와 chroot_list_enable=YES 를 함께 사용할 경우, /etc/vsftpd.chroot_list에 포함된 사용자 ID 만 제한없이 홈디렉토리를 벗어날 수 있다. (반대로 작용)

④ 파일 권한
local_umask=022 (default = 077).
- 로컬 계정 사용자용 umask
write_enable=YES (defualt = NO).
- write 명령어 허용 여부

ascii_upload_enable=YES
- ASCII 파일 업로드 가능.
ascii_download_enable=YES
- ASCII 파일 다운로드 가능

- 익명사용자
anon_upload_enable=YES (default = NO).
- anonymous 사용자가 파일을 업로드 할수 있는지 여부. 허용시 업로드 할수있는 디렉토리를 생성해 주어야 한다.
anon_mkdir_write_enable=YES (default = NO).
- anonymous 사용자의 디렉토리 생성 허용 여부. chown_upload=YES 익명유저가 업로드한 파일의 소유권을 자동변경.
chwon_username=acsecret 소유권을 변경하기 원하는 유저명으로 기입


⑤ log
session_support=YES
- wtmp 에 로그 남기기 (YES 로 해야만 last 명령어로 접속 여부 확인 가능)

xferlog_file=/var/log/vsftpd.log
- 파일 전송 로그 파일명
xferlog_enable=YES (default=YES).
- 파일 전송 로그를 남길 것인지 여부
xferlog_std_format=YES (defalut=YES).
- xferlog 표준 포맷으로 로그를 남길지 여부. xferlog 표준 포맷은 로그인, 디렉토리 생성등의 로그를 남기지 않지만 vsftpd 스타일 로그는 이를 포함한 보다 상세한 로그를 남긴다.

vsftpd 스타일 로그 예
Sun Jul 12 01:38:32 2003 [pid 31200] CONNECT: Client "127.0.0.1"
Sun Jul 12 01:38:34 2003 [pid 31199] [truefeel] FAIL LOGIN: Client "127.0.0.1"


⑥ 추가 설정
- pasv mode 설정
pasv_enable=NO 사무실에서 공유기를 통해서 접속을 하는데 ls 등이 자주 먹통이 되면 설정.
pasv_promiscuous=YES
pasv_min_port=30000
pasv_max_port=30999

- 가상유저
guest_enable=YES
guest_username=virftp 가상 유저의 실제 할당 계정
user_sub_token=$USER 서로 다른 홈 디렉토리를 부여하기 위해 셋팅
local_root=/home/virftp/$USER
virftp_use_local_privs=YES 설정하지 않으면 기본 적으로 anonymous 의 권한을 가지고 파일을 생성하지 못한다.

- xinetd 를 통하지 않고 standalone으로 동작할 때만 사용 가능)
max_clients=100 최대 접속자 수
max_per_ip=3 IP 당 접속 수


⑦ 전송속도 제한 (0은 제한없음, 단위는 초당 bytes)
local_max_rate=200000 계정 사용자의 전송량 제한
anon_max_rate=100000 anonymous 사용자의 전송속도 제한
trans_chunk_size=0 지정한 byte 단위로 나눠서 전송 저장한다. 0은 vsftpd 가 알아서 판단한다. (v1.1.3 이상에서 trans_chunk_size 옵션이 있다.)
anonymous 사용자와 일반 계정 사용자로 나눠서 bandwidth 를 설정 하도록 옵션을 제공한다. 이 설정은 전송되는 상황을 더 쉽게 파악할수 있도록 해준다.
anon_max_rate=10000, trans_chunk_size=0 로 설정하여 chunk size 를 vsftpd 가 판단하도록 한다.

vsftpd 는 chunk size 를 제한한 rate(10000) 보다 큰 50000 byte 가 적당하다고 판단했다면 1~4 초 사이에는 전송된 파일 크기는 0 으로 표시될 것이다.
5 초가 되어야 파일 크기는 50000 으로 보일 것이다. (5초 이후에도 마찬가지다)

이때 trans_chunk_size=5000 으로 했다면 전송된 파일 크기를 바로바로 확인할 수 있다. (size 는 최소 4096~65536 의 값을 설정해야 적용이 된다.)

- proftpd 의 RateReadFreeBytes 와 RateReadHardBPS 같은 역할을 하는 옵션은 없다.
RateReadFreeBytes bandwidth 제한 없이 전송할 수 파일 크기
RateReadHardBPS RateReadFreeBytes 보다 파일이 클때, 위의 지정한 파일크기 까지는 제한없이 전송. 그 다음 크기부터는 제한한 bandwidth로 파일 전송


⑧ 가상유저 서비스
- 가상유저 FTP 란 로컬 시스템에 실제로 존재하지 않는 유저로 FTP 로그인을 허락하고 운영하는 환경이다.
- 로컬 시스템에 계정을 추가하지 않고도 FTP 만을 위한 사용자를 추가, 삭제할 수 있는 FTP 시스템이다.
- 사용자 들에게 FTP 만 제공해야 될때 아주 유용하게 사용할 수 있다.


* 가상유저 데이터베이스 생성
FTP 가상유저를 생성하기 위해 가상유저와 패스워드가 담긴 DB 파일을 만들어야 되는데 간단히 사용자 ID 와 비밀번호가 입력된 텍스트 파일을db_load 유틸을 이용해 DB 포맷으로 변환해 줌으로써 가상유저가 사용할 사용자 DB 파일을 만들수 있다. 홀수줄은 FTP 가상유저 ID 가 되고 짝수줄은 바로 윗줄에 명시된 FTP 가상유저의 비밀번호가 된다.

root@localhost# cat vir_user.txt
myid
1234

DB 포멧으로 변환하기 위해 db_load 유틸을 사용하는데 db4-utils 이라는 RPM 패키지에 포함되어 있다.
db_load 유틸을 설치하지 않았으면 db4-utils RPM 패키지를 다운받아 설치하라.
/etc 디렉토리안에 넣고, root 이외의 사용자는 파일을 볼수없게 퍼미션을 600 으로 변경
root@localhost# db_load -T -t hash -f vir_user.txt ~/vsftpd_login.db
root@localhost# mv ~/vsftpd_login.db /etc/
root@localhost# chmod 600 /etc/vsftpd_login.db
root@localhost# ls -l
-rw------- 1 root rootl 12288 01월 07 16:39 /etc/vsftpd_login.db


* 사용자 인증에 사용할 PAM 파일 생성
이제 가상 유저들의 ID와 비밀번호가 정확한지 체크한후 FTP 로그인을 허락하기 위한 PAM 을 만들 것이다.
root@localhost# vi /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required
/lib/security/pam_userdb.so db=/etc/vsftpd_login
* 가상유저 계정 생성과 가상유저들이 사용할 디렉토리 생성.
virftp 계정을 가상 유저들의 실제 계정으로 추가하고 /home/virftp 디렉토리를 가상 FTP의 홈디렉토리로 지정을 할 것이다.

root@localhost# useradd -d /home/virftp virftp
root@localhost# cp /etc/hosts /home/virftp/
root@localhost# chown virftp.virftp hosts
root@localhost# ls -l
drwx------ 4 virftp virftp 4096 01월 07 16:39 /home/virftp
-rw-r--r-- 1 virftp virftp 146 01월 07 16:39 /home/virftp/hosts

* 가상 FTP 환경설정 파일 세팅
이제 마지막으로 가상 FTP 를 사용하기 위한 환경설정 파일을 작성할 것이다.
vsftpd_vitual.conf 라는 파일에 다음의 내용을 넣어 /etc 디렉토리에 생성한다.
listen=YES standalone 모드로 설정하기 위해 listen_port=2121 listen_port 를 추가하고 vsftpd 서버를 재실행 한다.
root@localhost#connect_from_port_20=YES

local_enable=YES → 가상 유저도 로컬사용자 이다.
anonymous_enable=NO → 익명접속 막음
chroot_local_user=YES → 홈 디렉토리 이외는 접속 불능
write_enable=YES → 파일 생성 가능
local_umask=022
xferlog_enable=YES → 접속 로그 생성
xferlog_file=/var/log/vsftpd.log
pam_service_name=vsftpd → pam 파일 이름
pasv_min_port=30000
pasv_max_port=30999

guest_enable=YES → 반드시 ok
guest_username=virftp → 가상 유저의 실제 할당 계정
user_sub_token=$USER → 서로 다른 홈 디렉토리를 부여하기 위해 셋팅
local_root=/home/virftp/$USER

virftp_use_local_privs=YES → 설정하지 않으면 기본 적으로 anonymous 의 권한을 가지고 파일을 생성하지 못한다.
dirmessage_enable=YES


* 위와같이 설정이 되었다면 /home/virftp 에 가상유저별 홈디렉토리를 생성해야한다.
root@localhost# mkdir /home/virftp/{myid,yourid}
root@localhost# chown virftp.virftp /home/virftp/*
root@localhost# ls -l /home/virftp/
-rw-r--r-- 1 virftp virftp 146 01월 07 16:39 hosts
drw-r-xr-x 1 virftp virftp 4096 01월 07 16:39 myid
drw-r-xr-x 1 virftp virftp 4096 10월 27 16:39 yourid

* vsftpd 실행
가상유저 FTP 를 운영하기 위해서는 vsftpd 를 Standalone 방식으로 작동시켜야 된다.
vsftpd 실행시에 /etc/vsftpd_virftp.conf 파일을 환경설정 파일로 지정하자.
root@localhost# ftp localhost
user :
passwd :

List of Articles
번호 제목 날짜 조회 수
237 ftp passive mode 설정 2014.02.27 8180
236 APM 소스 설치 2014.02.27 8150
235 APM 소스 설치 2014.02.27 7835
» vsftp 이란? 2014.02.27 9517
233 파일 속성 명령어 : chattr, lsattr 2014.02.27 9719
232 history 파일 삭제 제한하기 2014.02.27 7870
231 apache + mysql 자동 실행 방법 (소스설치) 2014.02.27 8056
230 도메인 포워딩 설정 2014.02.27 8087
229 리눅스 보안 Tip 2014.02.27 8879
228 SQL 인젝션 복구 쿼리 2014.02.27 8442
227 외부에서 apache 정보 못보도록 설정하기 2014.02.27 8114
226 도메인에 자동으로 www 붙도록 설정하기 2014.02.27 7694
225 htaccess를 이용한 특정 디렉토리 접근 관리하기 2014.02.27 7254
224 iptable에서 TCP SYN Flooding 차단 설정 2014.02.27 9638
223 yum rpmforge 등록하기 2014.02.27 7915
222 iptables GEOIP 모듈 설치. (국가별 IP 차단) 2014.02.27 7977
221 tmp 보안 셋팅 2014.02.27 7235
220 Linux LVM구성하기 2014.02.27 8302
219 CentOS 32Bit 운영체제에서 메모리 4G인식 시키는 방법 2014.02.27 7186
218 suPHP로 웹서버 보안을 강화하자 2014.02.27 8884
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
/ 12

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved