서버 설정 · 4 min read · Feb 11, 2026

Debian Squeeze에서 vsftpd 및 MySQL을 이용한 가상 호스팅

Vsftpd는 Linux용으로 가장 안전하고 빠른 FTP 서버 중 하나입니다. 일반적으로 vsftpd는 시스템 사용자와 함께 작동하도록 구성됩니다. 이 문서에서는 실제 시스템 사용자 대신 MySQL 데이터베이스의 가상 사용자를 사용하는 vsftpd 서버를 설치하는 방법을 설명합니다. 이는 성능이 훨씬 더 뛰어나며 단일 머신에서 수천 개의 FTP 사용자를 가질 수 있습니다.

MySQL 데이터베이스 관리를 위해 phpMyAdmin과 같은 웹 기반 도구를 사용할 수 있으며, 이 문서에서도 설치됩니다. phpMyAdmin은 명령줄을 다룰 필요가 없는 편리한 그래픽 인터페이스입니다.

이 튜토리얼은 Debian Squeeze (Debian 6.0)를 기반으로 합니다. 기본 Debian Squeeze 시스템을 이미 설정했어야 합니다.

이 문서는 실용적인 가이드를 목적으로 하며, 이론적 배경은 다루지 않습니다. 이론적 배경은 웹의 많은 다른 문서에서 다루어집니다.

이 문서는 어떤 종류의 보증 없이 제공됩니다! 이러한 시스템을 설정하는 유일한 방법이 아니라는 점을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이것이 여러분에게도 작동할 것이라는 보장을 하지 않습니다!

1 사전 참고

이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.0.100을 사용합니다. 이러한 설정은 여러분의 환경에 따라 다를 수 있으므로 적절한 곳에서 교체해야 합니다.

2 vsftpd, MySQL 및 phpMyAdmin 설치

Vsftpd는 내장된 MySQL 지원이 없으므로 PAM을 사용하여 MySQL 데이터베이스에 대한 인증을 수행해야 합니다. 따라서 vsftpd, MySQL 및 phpMyAdmin 외에 libpam-mysql을 설치합니다:

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

다음 질문이 표시됩니다:

MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호 반복: <– yourrootsqlpassword
자동으로 재구성할 웹 서버: <– apache2
phpmyadmin을 dbconfig-common으로 구성하시겠습니까? <– 아니오

3 vsftpd용 MySQL 데이터베이스 생성

이제 vsftpd라는 데이터베이스와 vsftpd라는 MySQL 사용자를 생성합니다. 이 사용자는 나중에 vsftpd 데몬이 vsftpd 데이터베이스에 연결하는 데 사용됩니다:

mysql -u root -p
CREATE DATABASE vsftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

문자열 ftpdpass를 MySQL 사용자 vsftpd에 사용할 비밀번호로 교체하십시오. 여전히 MySQL 셸에서 필요한 데이터베이스 테이블을 생성합니다(예, 테이블은 하나뿐입니다!):

USE vsftpd;
CREATE TABLE `accounts` (  
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
`username` VARCHAR( 30 ) NOT NULL ,  
`pass` VARCHAR( 50 ) NOT NULL ,  
UNIQUE (  
`username`  
)  
) ENGINE = MYISAM ;
quit;

여러분이 알아차렸듯이, quit; 명령으로 MySQL 셸을 종료하고 Linux 셸로 돌아왔습니다.

참고로, (여러분의 FTP 서버 시스템의 호스트 이름이 server1.example.com이라고 가정합니다) 브라우저에서 http://server1.example.com/phpmyadmin/ (server1.example.com 대신 IP 주소를 사용할 수도 있습니다)로 phpMyAdmin에 접근하여 vsftpd 사용자로 로그인할 수 있습니다. 그런 다음 데이터베이스를 살펴볼 수 있습니다. 나중에 phpMyAdmin을 사용하여 vsftpd 서버를 관리할 수 있습니다.

4 vsftpd 구성

먼저, nogroup 그룹에 속하는 vsftpd라는 비특권 사용자를 생성합니다(홈 디렉토리는 /home/vsftpd). 우리는 이 사용자 아래에서 vsftpd를 실행할 것이며, 가상 사용자의 FTP 디렉토리는 /home/vsftpd 디렉토리에 위치합니다(예: /home/vsftpd/user1, /home/vsftpd/user2 등).

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

그런 다음 원본 /etc/vsftpd.conf 파일의 백업을 만들고 우리 자신의 파일을 생성합니다:

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig  
cat /dev/null > /etc/vsftpd.conf  
vi /etc/vsftpd.conf

파일은 다음 내용을 가져야 합니다:

| listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |

구성 옵션에 대한 설명은 http://vsftpd.beasts.org/vsftpd_conf.html에서 확인할 수 있습니다. 우리의 가상 설정에 중요한 옵션은 chroot_local_user, guest_enable, guest_username, user_sub_token, local_root 및 virtual_use_local_privs입니다.

user_config_dir 옵션을 사용하면 전역 설정의 일부를 재정의하는 사용자별 구성 파일을 위한 디렉토리를 지정할 수 있습니다. 이는 완전히 선택 사항이며 이 기능을 사용할지 여부는 여러분에게 달려 있습니다. 그러나 지금 그 디렉토리를 생성해야 합니다:

mkdir /etc/vsftpd_user_conf

이제 PAM을 구성하여 /etc/passwd 및 /etc/shadow 대신 MySQL 데이터베이스를 사용하여 가상 FTP 사용자를 인증하도록 해야 합니다. vsftpd에 대한 PAM 구성은 /etc/pam.d/vsftpd에 있습니다. 원본 파일의 백업을 만들고 다음과 같이 새 파일을 생성합니다:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig  
cat /dev/null > /etc/pam.d/vsftpd  
vi /etc/pam.d/vsftpd

| auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |

MySQL 비밀번호를 자신의 비밀번호로 교체했는지 확인하십시오!

그 후, vsftpd를 재시작합니다:

/etc/init.d/vsftpd restart

5 첫 번째 가상 사용자 생성

데이터베이스를 채우기 위해 MySQL 셸을 사용할 수 있습니다:

mysql -u root -p
USE vsftpd;

이제 비밀번호가 secret인 가상 사용자 testuser를 생성합니다(비밀번호는 MySQL의 PASSWORD 함수를 사용하여 암호화되어 저장됩니다):

INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));  
quit;

testuser의 홈 디렉토리는 /home/vsftpd/testuser입니다. 불행히도 vsftpd는 해당 디렉토리가 존재하지 않을 경우 자동으로 생성하지 않습니다. 따라서 지금 수동으로 생성하고 vsftpd 사용자와 nogroup 그룹의 소유로 설정합니다:

mkdir /home/vsftpd/testuser  
chown vsftpd:nogroup /home/vsftpd/testuser

이제 작업 스테이션에서 FTP 클라이언트 프로그램(예: FileZilla 또는 FireFTP)을 열고 연결을 시도합니다. 호스트 이름으로 server1.example.com (또는 시스템의 IP 주소)을 사용하고, 사용자 이름은 testuser, 비밀번호는 secret입니다.

연결할 수 있다면 축하합니다! 그렇지 않다면 뭔가 잘못되었습니다.

6 데이터베이스 관리

대부분의 사람들에게는 MySQL의 그래픽 프론트 엔드가 더 쉽습니다. 따라서 vsftpd 데이터베이스를 관리하기 위해 phpMyAdmin (이 예제에서는 http://server1.example.com/phpmyadmin/)을 사용할 수 있습니다.

사용자를 생성하거나 수정할 때마다 MySQL의 PASSWORD 함수를 사용하여 해당 사용자의 비밀번호를 암호화해야 합니다. 또한 새 가상 사용자를 생성할 때는 이전 장의 끝에서 보여준 대로 해당 사용자의 홈 디렉토리를 셸에서 생성하는 것을 잊지 마십시오.

7 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.