가상 호스팅 · 3 min read · Dec 09, 2025

Debian Etch에서 Proftpd 및 MySQL을 이용한 가상 호스팅 (쿼터 포함)

Debian Etch에서 Proftpd 및 MySQL을 이용한 가상 호스팅 (쿼터 포함)

버전 1.0
저자: Falko Timme

이 문서는 실제 시스템 사용자 대신 MySQL 데이터베이스의 가상 사용자를 사용하는 Proftpd 서버를 설치하는 방법을 설명합니다. 이는 훨씬 더 성능이 뛰어나며 단일 머신에서 수천 개의 FTP 사용자를 가질 수 있게 해줍니다. 또한 이 설정에서 쿼터 사용에 대해서도 보여드리겠습니다.

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

이 튜토리얼은 Debian Etch(Debian 4.0)를 기반으로 합니다. 이 튜토리얼의 처음 여섯 장에서 설명한 대로 기본 Debian Etch 시스템을 이미 설정했어야 합니다: https://www.howtoforge.com/perfect_setup_debian_etch

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

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

1 사전 참고

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

2 MySQL 및 phpMyAdmin 설치

이 모든 것은 단일 명령으로 설치할 수 있습니다:

apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

MySQL 사용자 root의 비밀번호를 생성합니다(여기서 yourrootsqlpassword를 원하는 비밀번호로 교체):

mysqladmin -u root password yourrootsqlpassword

그런 다음 다음 명령으로 확인합니다:

netstat -tap | grep mysql

MySQL이 어떤 주소에서 수신 대기 중인지 확인합니다. 출력이 다음과 같으면:

tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     2713/mysqld

이는 MySQL이 localhost.localdomain에서만 수신 대기 중임을 의미하므로, 이전에 설정한 비밀번호로 안전합니다. 그러나 출력이 다음과 같으면:

tcp        0      0 *:mysql *:*                     LISTEN     2713/mysqld

호스트 이름에 대한 MySQL 비밀번호도 설정해야 합니다. 그렇지 않으면 누구나 데이터베이스에 접근하여 데이터를 수정할 수 있습니다:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword

3 MySQL 지원이 포함된 Proftpd 설치

Debian에는 미리 구성된 proftpd-mysql 패키지가 제공됩니다. 다음과 같이 독립 실행형 데몬으로 설치합니다:

apt-get install proftpd-mysql

다음 질문이 표시됩니다:

proftpd를 inetd에서 실행할까요, 아니면 독립 실행형으로 실행할까요? <– 독립 실행형

그런 다음 모든 가상 사용자가 매핑될 ftp 그룹(ftpgroup)과 사용자(ftpuser)를 생성합니다. 그룹 및 사용자 ID 2001을 시스템에서 사용 가능한 번호로 교체합니다:

groupadd -g 2001 ftpgroup  
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

4 Proftpd용 MySQL 데이터베이스 생성

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

mysql -u root -p
create database ftp;  
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';  
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'password';  
FLUSH PRIVILEGES;

문자열 password를 MySQL 사용자 proftpd에 사용할 비밀번호로 교체합니다. 여전히 MySQL 셸에서 필요한 데이터베이스 테이블을 생성합니다:

USE ftp;
CREATE TABLE ftpgroup (  
groupname varchar(16) NOT NULL default '',  
gid smallint(6) NOT NULL default '5500',  
members varchar(16) NOT NULL default '',  
KEY groupname (groupname)  
) TYPE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE ftpquotalimits (  
name varchar(30) default NULL,  
quota_type enum('user','group','class','all') NOT NULL default 'user',  
per_session enum('false','true') NOT NULL default 'false',  
limit_type enum('soft','hard') NOT NULL default 'soft',  
bytes_in_avail int(10) unsigned NOT NULL default '0',  
bytes_out_avail int(10) unsigned NOT NULL default '0',  
bytes_xfer_avail int(10) unsigned NOT NULL default '0',  
files_in_avail int(10) unsigned NOT NULL default '0',  
files_out_avail int(10) unsigned NOT NULL default '0',  
files_xfer_avail int(10) unsigned NOT NULL default '0'  
) TYPE=MyISAM;
CREATE TABLE ftpquotatallies (  
name varchar(30) NOT NULL default '',  
quota_type enum('user','group','class','all') NOT NULL default 'user',  
bytes_in_used int(10) unsigned NOT NULL default '0',  
bytes_out_used int(10) unsigned NOT NULL default '0',  
bytes_xfer_used int(10) unsigned NOT NULL default '0',  
files_in_used int(10) unsigned NOT NULL default '0',  
files_out_used int(10) unsigned NOT NULL default '0',  
files_xfer_used int(10) unsigned NOT NULL default '0'  
) TYPE=MyISAM;
CREATE TABLE ftpuser (  
id int(10) unsigned NOT NULL auto_increment,  
userid varchar(32) NOT NULL default '',  
passwd varchar(32) NOT NULL default '',  
uid smallint(6) NOT NULL default '5500',  
gid smallint(6) NOT NULL default '5500',  
homedir varchar(255) NOT NULL default '',  
shell varchar(16) NOT NULL default '/sbin/nologin',  
count int(11) NOT NULL default '0',  
accessed datetime NOT NULL default '0000-00-00 00:00:00',  
modified datetime NOT NULL default '0000-00-00 00:00:00',  
PRIMARY KEY (id),  
UNIQUE KEY userid (userid)  
) TYPE=MyISAM COMMENT='ProFTP user table';
quit;

주목하셨겠지만, quit; 명령으로 MySQL 셸을 종료하고 Linux 셸로 돌아왔습니다.

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

Share: X/Twitter LinkedIn

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

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