서버 관리 · 4 min read · Dec 03, 2025

PureFTPd 및 MySQL을 이용한 가상 호스팅 (쿼터 및 대역폭 관리 포함) - Mandriva 2009.0

PureFTPd 및 MySQL을 이용한 가상 호스팅 (쿼터 및 대역폭 관리 포함) - Mandriva 2009.0

버전 1.0
저자: Falko Timme

이 문서는 실제 시스템 사용자 대신 MySQL 데이터베이스의 가상 사용자를 사용하는 PureFTPd 서버를 설치하는 방법을 설명합니다. 이는 성능이 훨씬 더 뛰어나며 단일 머신에서 수천 개의 FTP 사용자를 가질 수 있게 해줍니다. 또한 이 설정을 통해 쿼타 및 업로드/다운로드 대역폭 제한의 사용을 보여드리겠습니다. 비밀번호는 데이터베이스에 MD5 문자열로 암호화되어 저장됩니다.

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

이 튜토리얼은 Mandriva 2009.0을 기반으로 합니다. 기본 Mandriva 2009.0 시스템을 이미 설정해 두어야 하며, 예를 들어 이 튜토리얼의 처음 여섯 장에서 설명한 대로 설정해야 합니다: https://www.howtoforge.com/perfect-server-mandriva-2009.0-i386

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

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

1 사전 참고

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

2 MySQL 및 phpMyAdmin 설치

다음의 단일 명령으로 모두 설치할 수 있습니다:

urpmi MySQL MySQL-client phpmyadmin

기본적으로 Mandriva 2009.0의 MySQL 패키지에서는 네트워킹이 활성화되어 있지 않습니다. /etc/my.cnf에서 skip-networking 줄의 주석을 제거하여 이를 변경할 수 있습니다:

vi /etc/my.cnf

| [...] # TCP/IP 포트에서 전혀 수신하지 않음. 이는 보안 향상이 될 수 있습니다, # mysqld에 연결해야 하는 모든 프로세스가 동일한 호스트에서 실행되는 경우. # mysqld와의 모든 상호작용은 유닉스 소켓 또는 명명된 파이프를 통해 이루어져야 합니다. # 이 옵션을 사용하되 Windows에서 명명된 파이프를 활성화하지 않으면 # ("enable-named-pipe" 옵션을 통해) mysqld가 쓸모없게 됩니다! # #skip-networking [...] |

그 후, MySQL 및 Apache의 시스템 시작 링크를 생성합니다…

chkconfig mysqld on  
chkconfig httpd on

… 그리고 두 서비스를 시작합니다:

/etc/init.d/mysqld start  
/etc/init.d/httpd restart

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

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

3 MySQL 지원이 포함된 PureFTPd 설치

Mandriva의 PureFTPd 패키지는 MySQL, PostgreSQL, LDAP 등 다양한 백엔드를 지원합니다. 다음과 같이 설치합니다:

urpmi pure-ftpd pure-ftpd-anon-upload pure-ftpd-anonymous

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

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

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

이제 pureftpd라는 데이터베이스와 PureFTPd 데몬이 나중에 pureftpd 데이터베이스에 연결하는 데 사용할 MySQL 사용자 이름 pureftpd를 생성합니다:

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

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

USE pureftpd;
CREATE TABLE ftpd (  
User varchar(16) NOT NULL default '',  
status enum('0','1') NOT NULL default '0',  
Password varchar(64) NOT NULL default '',  
Uid varchar(11) NOT NULL default '-1',  
Gid varchar(11) NOT NULL default '-1',  
Dir varchar(128) NOT NULL default '',  
ULBandwidth smallint(5) NOT NULL default '0',  
DLBandwidth smallint(5) NOT NULL default '0',  
comment tinytext NOT NULL,  
ipaccess varchar(15) NOT NULL default '*',  
QuotaSize smallint(5) NOT NULL default '0',  
QuotaFiles int(11) NOT NULL default 0,  
PRIMARY KEY (User),  
UNIQUE KEY User (User)  
) TYPE=MyISAM;
quit;

여러분이 알다시피, quit; 명령으로 MySQL 셸을 종료하고 리눅스 셸로 돌아왔습니다.

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

5 PureFTPd 구성

/etc/pure-ftpd/pure-ftpd.conf를 편집하고 ChrootEveryone, MySQLConfigFile 및 CreateHomeDir 줄이 활성화되어 있고 다음과 같이 보이는지 확인합니다:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

ChrootEveryone 설정은 PureFTPd가 모든 가상 사용자를 그의 홈 디렉토리로 chroot하게 하여 사용자가 자신의 홈 디렉토리 외부의 디렉토리 및 파일을 탐색할 수 없도록 합니다. CreateHomeDir 줄은 사용자가 로그인할 때 PureFTPd가 사용자의 홈 디렉토리를 생성하도록 합니다.

그런 다음 /etc/pure-ftpd/pureftpd-mysql.conf를 편집합니다. 다음과 같이 보이도록 합니다:

cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig  
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf  
vi /etc/pure-ftpd/pureftpd-mysql.conf

| MYSQLSocket /var/lib/mysql/mysql.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5는 평문보다 매우 권장됩니다 MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |

MYSQLPassword 줄에서 MySQL 사용자 pureftpd의 실제 비밀번호로 문자열 ftpdpass를 교체해야 합니다! MYSQLCrypt 방법으로 md5를 사용하므로 사용자의 비밀번호를 데이터베이스에 MD5 문자열로 저장하게 되며, 이는 일반 텍스트 비밀번호를 사용하는 것보다 훨씬 안전합니다!

이제 PureFTPd를 시작합니다:

/etc/init.d/pure-ftpd start
Share: X/Twitter LinkedIn

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

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