익명(anonymous)접속을 허용할 것인가(YES) 허용하지 않을 것인가(NO를 결정하는 지시자입니다. 기본값은 YES로 되어있으며 익명계정 접속ㅇ르 허용하지 않으려면 NO로 설정하시기 바랍니다.
local_enable=YES
로컬 계정 사용자들의 접속을 허용할 것인가의 여부를 결정합니다. YES로 설정하면 로컬계정사용자의 접속을 허용하는 것이며 NO로 설정하면 허용하지 않는 것입니다. 기본 설정은 YES로 되어있기 때문에 접속을 허용하게 됩니다. 만약 NO로 설정되어 있을 때 로컬계정으로 접속을 시도하면 "530 This FTP server is anonymous only."와 같은 에러메세지를 출력하면서 접속을 거부합니다.
wirte_enable=YES
ftp로 접속이 된 상태에서 사용할 수 있는 ftp전용명령어에는 여러가지가 있습니다. 이 설정은 ftp전용명령어 중에 write명령어를 허용할 것인가를 결정하는 것입니다.
허용하려면 YES, 허용하지 않으려면 NO를 설정하시면 됩니다. 기본값은 NO입니다.
local_umask=022
로컬계정 사용자들의 umask값을 설정하는 지시자입니다. 거의 모든 ftp서버에서 기본 umask값은 022입니다. 하지만 vsftpd에서의 umask기본값은 077입니다.(저는 rpm으로 설치했는데 022 네요..) umask값이 077일경우에 새로 생성되는 파일의 퍼미션은 600이 되며 새로 생성되는 디렉토리의 퍼미션은 700이 됩니다. 당연히 umask값이 022일 때보다는 보안이 훨씬 강화됩니다. 여기서 "local_umask=022" 의 주석을 제거하여 유효하게 설정하면 대부분의 FTP서버에서 사용하는 umask값을 022로 설정하게 됩니다. 만약 022외에 다른 umask값을 설정하고자 한다면 그 값을 설정해 주시면 됩니다.
anon_upload_enable=YES
익명(anonymous)계정 사용자에게 파일 업로드를 허용할 것인가(YES) 허용하지 않을 것인가(NO)의 여부를 설정하는 지시자 입니다. 기본값은 허용하지 않는 NO 입니다. 가능한 익명계정으로 접속한 사용자에게는 업로드 권한을 허용하지 않는 것이 보안에 훨씬 좋습니다. 따라서 가능한 NO로 설정하시기 바랍니다.
anon_mkdir_write_enable=YES
익명(anonymous)계정 사용자에게 디렉토리 생성권한을 허용할 것인가(YES) 허용하지 않을 것인가(NO)의 여부를 설정하는 지시자입니다. 기본값은 허용하지 않는 NO입니다. 가능한 익명계정으로 접속한 사용자에게는 디렉토리 생성권한을 허용하지 않는 것이 보안에 훨씬 좋습니다. 따라서 가능한 NO로 설정하시기 바랍니다.
ftpd_banner=Welcome to blah FTP service.
ftp서버로 접속할 때에 안내메세지등을 출력하려면 여기서 설정하시면 됩니다. 이 설정이 적용되면 ftp 접속을 하였을 때 "Welcome to blah FTP service." 라는 아낸문이 출력됩니다. 이 설정에서 한글을 사용할 수도 있습니다. 각 디렉토리별 안내문에 대한 설정은 다음 지시자의 설명을 보시기 바랍니다.
dirmessage_enable=YES
ftp 접속한 사용자가 특정 디렉토리로 이동하였을 때 개별 디렉토리의 메시지를 보여주도록 허용할 것인가(YES) 허용하지 않을 것인가(NO)를 설정하는 것입니다. 밑에서 설명하고 있는 "message_file" 지시자에서 개별 디렉토리 안내 파일로 사용할 파일명을 지정할 수 있습니다.
message_file=.message
ftp 접속후에 특정 디렉토리로 이동할 때에 디렉토리 안내메세지 파일로 사용할 파일명을 지정한 것입니다. 이 설정파일은 바로 위에 설명한 "dirmessage_enable" 이 YES로 설정되어 있을 때 적용됩니다.
xferlog_enable=YES
ftp 접속후에 파일 업로드와 다운로드에 대한 로그를 남길것인가(YES) 남기지 않을 것인가(NO)를 설정하는 지시자입니다. 이 지시자의 설정은 디스크의 용량을 고려하여 결정해야 합니다. 즉, ㅏ일 업로드/다운로드 로그는 괸장히 많은 용량을 필요로 하고 또한 시스템 부하율도 함께 고려하여 신중히 결정해야 합니다. 물론 로그를 남기는 것이 로그분석과 개별 사용자의 파일 업로드/다운로드 상황을 알 수 있는 방법이기는 하지만 시스템 상황을 고려해야한다는 의미입니다.
xferlog_file=/var/log/vsftpd.log
ftp 로그파일의 위치를 결정하는 지시자입니다. Vsftp는 기본적으로 /var/log/vsftpd.log 파일을 기본 로그파일로 사용합니다. 만약 로그파일 위치나 파일명을 변경하시려면 이 지시자에서 설정변경하시면 됩니다.
xferlog_std_format=YES
로그파일에 남길 로그파일의 포맷을 기본포맷으로 남길 것인가(YES) 아닌가(NO)를 설정하는 지시자입니다. 리눅스에서 ftp 기본 로그파일로 /var/log/xferlog을 사용합니다. 이 지시자는 이 파일의 표준포맷으로 로그를 남기도록 하는 설정입니다. 이 파일의 포맷보다는 vsftpd 로그포맷을 사용하시는 것이 보다 자세한 로그를 남길 수 있습니다. 즉, 디렉토리생성로그나 또는 로그인 같은 상세로그까지 기록해줍니다.
connect_from_port_20=YES
ftp 서비스는 기본적으로 21번 포트와 20번포트를 사용합니다. ftp 접속과 명령어에 사용되는 포트는 21번이며 실제 데이터전송에 사용되는 기본포트는 20번입니다. 이때 20번 포트의 데이터전송 연결을 허용할 것인가(YES) 허용하지 않을 것인가(NO)를 설정하는 지시자입니다.
session_support=YES
이 설정이 YES로 설정되어 유효하게 되었을 때에는 바이너리파일인 wtmp에 ftp 접속관련 기록이 남기게 됩니다. last라는 명령어는 각 사용자들의 접속기록을 wtmp파일에서 가져와 확인하는 명령어이므로 이 설정이 적용되면 last 명령어로 ftp접속기록을 확인할 수 있게 됩니다.
idle_session_timeout=600
ftp 연결에서 idle타임에 대한 타임아웃값을 설정합니다. 예를 들어 이 값이 600으로 설정되어 있다면 ftp 접속후에 600초(10분)동안 아무런 작업도 없이 놀고 있다면 강제 로그아웃(timeout)시켜 버립니다.
data_connection_timeout=120
데이터 전송시 적용되는 타임아웃값을 설정합니다. 만약 ftp연결시 큰 파일을 업로드 또는 다운로드 할 때에 전송도중 접속이 끊기는 상황이 발생한다면 이 설정을 주석처리하거나 또는 이값을 현재 설정값 보다 크게 잡아주시고 재시도 해보십시요.
anon_max_rate=0
local_max_rate=0
trans_chunk_size=0
위 세가지 설정은 ftp 서비스의 전송속도를 제한 하도록 하는 설정입니다. 즉, 초당 byte수를 지정할 수 있으며 제한없이 허용하려면 0로 설정하시면 됩니다. 이 설정은 vsftpd가 독립데몬(standalone)모드로 서비스될 때에만 적용되는 것입니다.
max_clients=30
max_per_ip=3
이 설정은 동시 ftp 접속자수를 제한하는 설정입니다. 첫번째 max_clients는 ftp접속을 최대 30명까지만 허용한다는 설정입니다. 그리고 max_per_ip는 한 IP(호스트)에서 동시에 3번까지만 접속이 가능하다는 설정입니다. 이 또한 서비스거부공격(DoS)를 방어하기 위한 방법으로 활용될 수 있습니다.
ascii_upload_enable=YES
ascii_download_enable=YES
기본적으로 ASCII모드로 업로드/다운로드하는 것은 제한되어 있습니다. 이 설정으로 ASCII모드로의 업로드/다운로드를 허용할도록 설정할 수 있습니다.
deny_email_enable=YES
banned_email_file=/etc/vsftpd.banned_email
익명접속시에 기본적으로 사용되는 계정명은 anonymous 이며 패스워드는 email형식으로 입력하면 됩니다. 이때 패스워드로 인정하지 않을 즉, 패스워드로 사용하지 못하도록 할 email 주소를 사용하도록 하는 지시자입니다. 즉, "deny_email_enable=YES"로 설정하시고 "banned_email_file=/etc/vsftpd.banned_emails"라고 설정되어 있다면 패스워드로 허용하지 않을 주소를 /etc/vsftpd.banned_emails 파일에 넣어두시면 됩니다. 그러면 이 파일에 등록된 email주소는 패스워드로 인정하지 않습니다. 따라서 익명접속이 되지 않습니다. 이 설정은 서비스거부공격(DoS)를 방어하기 위한 방법으로도 사용됩니다. 즉, 무차별 ftp 접속시도를 차단하기 위한 좋은 방법이 될 수 있습니다.
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
전체 사용자가 아닌 특정 사용자들에 대하여 자신의 홈디렉토리를 루트디렉토리로 인식하도록 하는 기능으로서 이 기능은 사용자의 홈디렉토리의 상위디렉토리로 벗어나지 못하도록 하는 설정입니다. 먼저 "chroot_list_enable=YES"로 설정하시고 /etc/vsftpd.chroot_list 파일에는 이 기능을 적용할 사용자계정명을 등록해 두시면 됩니다. 즉, /etc/vsftpd.chroot_list파일에 등록된 사용자들에 한하여 chroot()기능이 적용되어 자기 자신의 홈디렉토리 상위 디렉토리의 이동이 제한됩니다. 이 파일에 등록할 때에는 한행에 한사용자계정씩만 등록하셔야 합니다. 만약 전체 사용자를 대상으로 chroot()기능을 적용하고자 한다면 바로 밑에서 설명하고 있는 "chroot_local_user=YES'로 설정하시기 바랍니다.
chroot_local_user=YES
특정 사용자가 아닌 전체 사용자를 대상으로 chroot()기능을 적용하여 자기 자신의 홈디렉토리 상위 디렉토리로 이동하지 못하도록 하려면 이 설정을 YES로 설정하십시요. 반드시 앞의 설정과 비교해 보시기 바랍니다.
만약 위의 두 설정이 모두 설정되어있다면 즉, "chroot_list_enable=YES"와 "chroot_local_user=YES" 설정이 모두 YES로 되어 있다면 /etc/vsftpd.chroot_list 에 등록된 사용자들만 chroot()적용을 받지 않게 됩니다. 즉, 이 두 설정이 모두 YES로 되어 있다면 /etc/vsftpd.chroot_list에 등록된 사용자들을 제외한 나머지 사용자들만 chroot()가 적용되어 상위 디렉토리로의 이동이 안된다는 의미입니다.
ls_recurse_enable=YES
ftp 접속에는 ls사용시 -R 옵션을 허용하지 않는 것이 기본 설정입니다. -R 옵션이란 서브디렉토리내의 파일들을 리스팅(목록)까지 모두 확인할 수 있도록 하는 것입니다. 서버부하등의 이유로 ftp에서 기본적으로는 지원하지 않지만 vsftpd에서는 이 옵션을 사용하여 허용하도록 설정할 수 있습니다. 즉, 이 지시자의 값이 YES로 되어 있다면 ftp접속후에 디렉토리 목록 확인시에 서브디렉토리들의 목록들까지 한번에 볼 수 있는 -R 옵션을 허용하게 됩니다.
pam_sevice_name=vsftpd
vsftpd에서 PAM설정파일명으로 사용할 파일명을 지정합니다. 이 설정이 적용되면 기본이 vsftpd이므로 /etc/pam.d/vsftpd파일이 사용됩니다.
listen=YES
listen_port=21
만약 vsftpd를 xinetd모드가 아닌 독립데몬(standalone)으로 서비스하려면 위의 listen지시자를 YES로 설정하고 listen_port에 서비스할 포트번호(기본 21번)를 지정하시면 됩니다.
키워드
AllowGroups : 해당 그룹에 속한 사용자만 접속할 수 있다.
AllowUsers : 열거한 사용자만 접속할 수 있다.
DenyGroups : 전체 사용자의 접속을 허용하고 명시된 그룹은 접속에서 제외된다.
DenyUsers : 전체 사용자의 접속을 허용하고 명시된 유저의 접속은 제외된다.
해당 그룹, 유저는 space로 구분한다.
적용
/etc/ssh/sshd_config 파일에 키워드를 명시하고 그룹 또는 유저명을 기입한다.
가상유저 FTP란 로컬 시스템에 실제로 존재하지 않는 유저들로 FTP 로그인을 허락하고 운영하는 환경입니다. 로컬 시스템에 계정을 추가하지 않고도 FTP만을 위한 사용자를 추가,삭제할 수 있는 FTP 시스템입니다.
사용자들에게 FTP만 제공해야 될때 아주 유용하게 사용할 수 있습니다.
1. 가상유저 데이터베이스 생성
FTP 가상유저를 생성하기 위해 가상유저와 패스워드가 담긴 DB파일을 만들어야 되는데 간단히 사용자 ID와 비밀번호가 입력된 텍스트파일을 db_load 유틸을 이용해 DB포맷으로 변환해 줌으로써 가상유저가 사용할 사용자 DB 파일을 만들수 있습니다.
먼저 FTP가상유저의 ID와 비밀번호를 설정할 텍스트 파일을 만들어 보겠습니다.
텍스트파일은 가상유저 ID 한줄과 패스워드 한줄이 한쌍이 됩니다.
즉 홀수줄은 FTP가상유저 ID가 되고 짝수줄은 바로윗줄에 명시된 FTP가상유저의 비밀번호가 됩니다. 다음은 myid, yourid 라는 계정에 각각 1234, 4321 이라는 비밀번호를 부여해서 세팅된 virtual_user.txt 파일입니다.
텍스트 파일이 만들어졌으면 이제 DB 포맷으로 변환을 합니다.
DB포멧으로 변환하기 위해 db_load 라는 유틸을 사용할건데 이 유틸은 db4-utils 이라는 RPM 패키지에 포함되어 있는데 혹시 db_load 유틸을 설치하지 않으신 분들은 db4-utils RPM 패키지를 다운받아 설치하시기 바랍니다.
virtual_user.txt 파일을 vsftpd_login.db로 변환하는데 변환된 파일을 /etc 디렉토리안에 넣어둡니다.
생성된 vsftpd_login.db 파일을 root 이외의 사용자는 파일을 볼 수 없게 퍼미션을 600 으로 변경해줍니다.
만약 퍼미션 변경을 하지 않으면 시스템의 일반 사용자가 이 파일을 열람할 수 있기 때문에 ID와 비밀번호가
쉽게 노출이 됩니다. 그래서 반드시 vsftpd_login.db 파일의 퍼미션을 600 으로 조정하시기 바랍니다.
2. 사용자 인증에 사용할 PAM 파일 생성
PAM에 대한 강좌는 차후에 제공할 것이기 때문에 그때 자세히 공부하고 이번강좌에는 에플리케이션의 인증모듈이라고만 알고 넘어가기로 하죠.
우리는 이제 가상유저들의 ID와 비밀번호가 정확한지 체크한후 FTP 로그인을 허락하기 위한 PAM 파일을 만들 것입니다. 딱 2줄만 작성하면 되는 아주 간단한 작업입니다.
PAM 파일을 다음과 같이 작성한후 /etc/pam.d 디렉토리에 vsftpd 라는 이름으로 생성합니다.
아래는 설정된 화면을 캐쳐한 것입니다. 캡쳐화면에 # 로 시작하는 행은 주석입니다.
아래 설정은 가상유저 FTP를 사용하기 위한 최소한의 설정입니다.
위와같이 설정이 되었다면 가상유저의 홈디렉토리인 /home/ftpsite 에 가상유저별 홈디렉토리를 생성해야됩니다. 가상유저별 홈디렉토리명은 가상유저 ID로 생성하고 생성된 디렉토리의 소유자와 소유그룹을 virtual로 세팅을 해 줍니다.
이제 가상유저FTP를 운영하기 위한 준비는 모두 끝났습니다.
5. vsftpd 실행
가상유저FTP를 운영하기 위해서는 vsftpd를 Standalone 방식으로만 작동시켜야 됩니다.
다음과 같이 vsftpd 실행시에 /etc/vsftpd_virtual.conf 파일을 환경설정 파일로 지정해야 실행시킵니다.
저는 VSFTP를 설치할 때 /usr/local/sbin 디렉토리에 vsftpd 데몬파일을 생성했기 때문에 아래와 같이 했습니다. 각자의 vsftpd 데몬을 가상유저FTP 환경설정파일을 지정해서 실행하면 됩니다.
6. 가상유저로 ftp 접속하기
아래화면은 myid, yourid 로 각각 접속한 화면입니다. 각각의 가상유저는 자신의 홈디레토리 즉 /home/ftpsite/myid 와 /home/ftpsite/yourid 로 접속되었고 자신의 홈 디렉토리가 FTP 루트디렉토리로 설정되어 있습니다.
*myid 로 접속한 화면
*yourid 로 접속한 화면
위에서 보는 것과 같이 가상유저들이 각각의 홈디렉토리로 FTP 접속이 잘 이루어지고 있네요.