E D R , A S I H C RSS

FrontPage VsftpVirtual

VSFTP로 가상유저FTP 서비스하기

가상유저 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 파일입니다.

root@ns TMP# cat virtual_user.txt
myid
1234
yourid
4321
root@ns TMP#

텍스트 파일이 만들어졌으면 이제 DB 포맷으로 변환을 합니다.
DB포멧으로 변환하기 위해 db_load 라는 유틸을 사용할건데 이 유틸은 db4-utils 이라는 RPM 패키지에 포함되어 있는데 혹시 db_load 유틸을 설치하지 않으신 분들은 db4-utils RPM 패키지를 다운받아 설치하시기 바랍니다.

root@ns TMP# db_load -T -t hash -f virtual_user.txt /etc/vsftpd_login.db
root@ns TMP# ls -l /etc/vsftpd_login.db
root@ns TMP# chmod 600 /etc/vsftpd_login.db
root@ns TMP# ls -l /etc/vsftpd_login.db

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 라는 이름으로 생성합니다.

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

root@ns TMP# cat /etc/pam.d/vsftpd

우리가 지금까지 생성한 /etc/vsftpd_login.db 파일과 /etc/pam.d/vsftpd 파일이 FTP 접근허가를 위해 사용됩니다.

3. 가상유저 계정 생성과 가상유저들이 사용할 디렉토리 생성

가상유저 FTP를 사용하기 위해서는 가상유저들이 사용할 실제 계정을 하나 만들어줘야 됩니다
이 강좌에서는 virtual 이라는 계정을 가상유저들의 실제 계정으로 추가하고 /home/ftpsite 디렉토리를 가상FTP의 홈디렉토리로 지정을 할 것입니다.

다음과 같이 virtual 이라는 계정을 추가합니다.

root@ns TMP# useradd -d /home/ftpsite virtual
root@ns TMP# ls -ld /home/ftpsite

virtual 이라는 계정이 정상적으로 생성되었으면 system의 host 파일을 /home/ftpsite 디렉토리에 복사를 합니다. 복사한 hosts 파일의 소유자와 소유그룹은 virtual로 수정합니다.

root@ns TMP# cd /home/ftpsite
root@ns ftpsite# cp /etc/hosts /home/ftpsite
root@ns ftpsite# ls -l /home/ftpsite/hosts
root@ns ftpsite# chown virtual.virtual hosts

4. 가상FTP 환경설정 파일 세팅

이제 마지막으로 가상 FTP를 사용하기 위한 환경설정파일을 작성할 것입니다.
각 환경설정 옵션에 대한 설명은 'VSFTP 환경설정' 강좌를 참고하시기 바랍니다.

vsftpd_vitual.conf 라는 파일에 다음의 내용을 넣어 /etc 디렉토리에 생성하세요.

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
chroot_local_user=YES
listen=YES
listen_port=1004
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd
pasv_min_port=30000
pasv_max_port=30999
virtual_use_local_privs=YES
user_sub_token=$USER
local_root=/home/ftpsite/$USER


위와같이 설정이 되었다면 가상유저의 홈디렉토리인 /home/ftpsite 에 가상유저별 홈디렉토리를 생성해야됩니다. 가상유저별 홈디렉토리명은 가상유저 ID로 생성하고 생성된 디렉토리의 소유자와 소유그룹을 virtual로 세팅을 해 줍니다.

root@ns ftpsite# mkdir myid
root@ns ftpsite# mkdir yourid
root@ns ftpsite# chown virtual.virtual *
root@ns ftpsite# ls -l



이제 가상유저FTP를 운영하기 위한 준비는 모두 끝났습니다.

5. vsftpd 실행

가상유저FTP를 운영하기 위해서는 vsftpd를 Standalone 방식으로만 작동시켜야 됩니다.
다음과 같이 vsftpd 실행시에 /etc/vsftpd_virtual.conf 파일을 환경설정 파일로 지정해야 실행시킵니다.
저는 VSFTP를 설치할 때 /usr/local/sbin 디렉토리에 vsftpd 데몬파일을 생성했기 때문에 아래와 같이 했습니다. 각자의 vsftpd 데몬을 가상유저FTP 환경설정파일을 지정해서 실행하면 됩니다.

root@ns ftpsite# /usr/local/sbin/vsftpd /etc/vsftpd_virtual.conf


6. 가상유저로 ftp 접속하기

아래화면은 myid, yourid 로 각각 접속한 화면입니다. 각각의 가상유저는 자신의 홈디레토리 즉 /home/ftpsite/myid 와 /home/ftpsite/yourid 로 접속되었고 자신의 홈 디렉토리가 FTP 루트디렉토리로 설정되어 있습니다.

*myid 로 접속

*yourid 로 접속
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-11-04 13:18:52
Processing time 0.0299 sec