서버 설정 · 4 min read · Jan 19, 2026
PureFTPd 및 MySQL을 이용한 가상 호스팅 (쿼터 및 대역폭 관리 포함) - 페도라 20 - 2페이지
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 is VERY RECOMMENDABLE uppon cleartext 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의 시스템 시작 링크를 생성하고 시작합니다:
systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service6 데이터베이스 채우기 및 테스트
데이터베이스를 채우기 위해 MySQL 셸을 사용할 수 있습니다:
mysql -u root -pUSE pureftpd;이제 상태 1(즉, FTP 계정이 활성 상태임을 의미)인 사용자 exampleuser를 생성하고, 비밀번호는 secret(이는 MySQL의 MD5 함수로 암호화되어 저장됨), UID 및 GID는 2001(2단계 끝에서 생성한 사용자/그룹의 사용자 ID 및 그룹 ID 사용), 홈 디렉토리는 /home/www.example.com, 업로드 및 다운로드 대역폭은 100 KB/sec(킬로바이트/초), 쿼터는 50 MB로 설정합니다:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');quit;이제 작업 스테이션에서 FTP 클라이언트 프로그램(Windows 시스템에서는 WS_FTP 또는 SmartFTP, Linux 데스크탑에서는 gFTP와 같은)을 열고 연결을 시도합니다. 호스트 이름으로 server1.example.com(또는 시스템의 IP 주소)을 사용하고, 사용자 이름은 exampleuser, 비밀번호는 secret입니다.
연결할 수 있다면 축하합니다! 그렇지 않다면 뭔가 잘못되었습니다.
이제 다음을 실행하면
ls -l /home/home/www.example.com(예제 사용자의 홈 디렉토리) 디렉토리가 자동으로 생성되었으며, ftpuser 및 ftpgroup(2단계 끝에서 생성한 사용자/그룹)이 소유하고 있어야 합니다:
[root@server1 system]# ls -l /home/
total 4
drwxr-xr-x 2 ftpuser ftpgroup 4096 May 2 02:35 www.example.com
[root@server1 system]# 7 데이터베이스 관리
대부분의 사람들은 MySQL에 대한 그래픽 프론트 엔드가 있는 것이 더 쉽기 때문에 phpMyAdmin(이 예제에서는 http://server1.example.com/phpMyAdmin/에서) 을 사용하여 pureftpd 데이터베이스를 관리할 수 있습니다.

새 사용자를 생성하려면 항상 ftpd 테이블에 항목을 생성해야 하므로 이 테이블의 열을 설명하겠습니다:
ftpd 테이블:
- User: 가상 PureFTPd 사용자의 이름(예: exampleuser).
- status: 0 또는 1. 0은 계정이 비활성화되어 사용자가 로그인할 수 없음을 의미합니다.
- Password: 가상 사용자의 비밀번호. 비밀번호를 MD5 문자열로 암호화하여 저장하기 위해 MySQL의 MD5 함수를 사용해야 합니다:

- UID: 2단계 끝에서 생성한 FTP 사용자의 사용자 ID(예: 2001).
- GID: 2단계 끝에서 생성한 FTP 그룹의 그룹 ID(예: 2001).
- Dir: 가상 PureFTPd 사용자의 홈 디렉토리(예: /home/www.example.com). 존재하지 않으면 새 사용자가 처음으로 FTP를 통해 로그인할 때 생성됩니다. 가상 사용자는 이 홈 디렉토리에 감금되며, 즉, 홈 디렉토리 외부의 다른 디렉토리에 접근할 수 없습니다.
- ULBandwidth: 가상 사용자의 업로드 대역폭(KB/sec. 킬로바이트/초). 0은 무제한을 의미합니다.
- DLBandwidth: 가상 사용자의 다운로드 대역폭(KB/sec. 킬로바이트/초). 0은 무제한을 의미합니다.
- comment: 여기에 임의의 주석을 입력할 수 있습니다(예: 내부 관리용). 일반적으로 이 필드는 비워 둡니다.
- ipaccess: 이 FTP 계정에 연결할 수 있는 IP 주소를 입력합니다. *는 모든 IP 주소가 연결할 수 있음을 의미합니다.
- QuotaSize: FTP 서버에서 가상 사용자가 사용할 수 있는 저장 공간(MB 단위, ULBandwidth 및 DLBandwidth는 KB 단위가 아님!). 0은 무제한을 의미합니다.
- QuotaFiles: FTP 서버에서 가상 사용자가 저장할 수 있는 파일의 수. 0은 무제한을 의미합니다.
8 익명 FTP
비밀번호 없이 누구나 로그인할 수 있는 익명 FTP 계정을 생성하려면 ftp라는 사용자와 그룹이 필요합니다. 두 개 모두 pure-ftpd 패키지를 설치할 때 자동으로 생성되므로 수동으로 생성할 필요가 없습니다. 그러나 ftp의 홈 디렉토리는 기본적으로 /var/ftp이지만, 익명 FTP 디렉토리를 /home/ftp에 생성하고 싶습니다(일반 사용자 FTP 디렉토리도 /home에 있습니다. 예: /home/www.example.com). 물론 원하신다면 익명 FTP에 /var/ftp 디렉토리를 사용할 수 있습니다.
/home/ftp를 사용하려면 /etc/passwd를 열고 ftp 사용자의 홈 디렉토리를 /var/ftp에서 /home/ftp로 변경합니다(원하신다면 /var/ftp를 사용하려면 이 작업을 하지 마세요):
vi /etc/passwd| [...] #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin [...] |
그런 다음 /var/ftp를 /home으로 이동합니다(원하신다면 /var/ftp를 사용하려면 이 작업을 하지 마세요):
mv /var/ftp /home그런 다음 익명 사용자가 파일을 업로드할 수 있도록 /home/ftp/incoming 디렉토리를 생성합니다. /home/ftp/incoming 디렉토리의 권한을 311로 설정하여 사용자가 업로드할 수 있지만 해당 디렉토리의 파일을 볼 수 없거나 다운로드할 수 없도록 합니다. /home/ftp 디렉토리는 파일을 보고 다운로드할 수 있도록 555 권한을 가집니다:
chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/(원하신다면 /var/ftp를 사용하려면 위 명령어에서 /home/ftp를 /var/ftp로 바꾸세요.)
익명 사용자는 로그인할 수 있으며, /home/ftp에서 파일을 다운로드할 수 있지만 업로드는 /home/ftp/incoming으로 제한됩니다(그리고 /home/ftp/incoming에 파일이 업로드되면 해당 파일은 읽거나 다운로드할 수 없습니다; 서버 관리자가 이를 /home/ftp로 이동해야 다른 사용자가 사용할 수 있습니다).
이제 익명 FTP를 위해 PureFTPd를 구성해야 합니다. /etc/pure-ftpd/pure-ftpd.conf를 열고 다음 설정이 포함되어 있는지 확인합니다:
vi /etc/pure-ftpd/pure-ftpd.conf| [...] NoAnonymous no [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...] |
(AnonymousBandwidth 설정은 선택 사항입니다 - 익명 사용자의 업로드 및 다운로드 대역폭을 제한할 수 있습니다. 8은 8 KB/sec를 의미합니다. 원하는 값을 사용하거나 대역폭을 제한하고 싶지 않다면 이 줄을 주석 처리하세요.)
마지막으로 PureFTPd를 재시작합니다:
systemctl restart pure-ftpd.service9 링크
- PureFTPd: http://www.pureftpd.org/
- MySQL: http://www.mysql.com/
- phpMyAdmin: http://www.phpmyadmin.net/
- Fedora: http://fedoraproject.org/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.