서버 설정 · 4 min read · Dec 04, 2025
PureFTPd와 MySQL을 이용한 가상 호스팅 (쿼터 및 대역폭 관리 포함) - Mandriva 2008 Spring
PureFTPd와 MySQL을 이용한 가상 호스팅 (쿼터 및 대역폭 관리 포함) - Mandriva 2008 Spring
Version 1.0
Author: Falko Timme
이 문서는 실제 시스템 사용자가 아닌 MySQL 데이터베이스의 가상 사용자를 사용하는 PureFTPd 서버를 설치하는 방법을 설명합니다. 이는 성능이 훨씬 더 뛰어나며 단일 머신에서 수천 개의 FTP 사용자를 가질 수 있습니다. 또한 이 설정에서 쿼타 및 업로드/다운로드 대역폭 제한의 사용을 보여드리겠습니다. 비밀번호는 데이터베이스에 MD5 문자열로 암호화되어 저장됩니다.
MySQL 데이터베이스 관리를 위해 phpMyAdmin과 같은 웹 기반 도구를 사용할 수 있으며, 이 방법서에서도 설치됩니다. phpMyAdmin은 명령줄을 다루지 않아도 되는 편리한 그래픽 인터페이스입니다.
이 튜토리얼은 Mandriva 2008 Spring (Mandriva 2008.1)을 기반으로 합니다. 이 튜토리얼의 처음 6장에 설명된 대로 기본 Mandriva 2008 Spring 시스템을 이미 설정했어야 합니다: https://www.howtoforge.com/perfect-server-mandriva-2008.1
이 방법서는 실용적인 가이드를 목적으로 하며, 이론적 배경은 다루지 않습니다. 이론적 배경은 웹의 다른 많은 문서에서 다루어집니다.
이 문서는 어떠한 종류의 보증 없이 제공됩니다! 이러한 시스템을 설정하는 유일한 방법이 아니라는 점을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 제가 선택한 방법입니다. 이것이 여러분에게 작동할 것이라는 보증을 제공하지 않습니다!
1 사전 참고
이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.0.100을 사용합니다. 이러한 설정은 여러분의 환경에 따라 다를 수 있으므로 적절한 곳에서 교체해야 합니다.
2 MySQL 및 phpMyAdmin 설치
이 모든 것은 단일 명령으로 설치할 수 있습니다:
urpmi MySQL MySQL-client phpmyadmin기본적으로 Mandriva 2008 Spring의 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 restartMySQL 사용자 root의 비밀번호를 생성합니다 (yourrootsqlpassword를 사용하려는 비밀번호로 교체):
mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword3 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 ftpuser4 PureFTPd용 MySQL 데이터베이스 생성
이제 pureftpd라는 데이터베이스와 PureFTPd 데몬이 나중에 pureftpd 데이터베이스에 연결하는 데 사용할 MySQL 사용자 이름 pureftpd를 생성합니다:
mysql -u root -pCREATE 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/ (server1.example.com 대신 IP 주소를 사용할 수도 있습니다)에서 phpMyAdmin에 접근할 수 있으며, 사용자 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() 또는 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 줄에서 ftpdpass 문자열을 MySQL 사용자 pureftpd의 실제 비밀번호로 교체해야 합니다! MYSQLCrypt 방법으로 md5를 사용하므로 사용자의 비밀번호를 데이터베이스에 MD5 문자열로 저장하게 되며, 이는 일반 텍스트 비밀번호보다 훨씬 더 안전합니다!
이제 PureFTPd를 시작합니다:
/etc/init.d/pure-ftpd start새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.