서버 관리 · 5 min read · Jan 20, 2026
PureFTPd 및 MySQL을 이용한 가상 호스팅 (쿼터 및 대역폭 관리 포함) - Debian Lenny - 2페이지
5 PureFTPd 구성
/etc/pure-ftpd/db/mysql.conf를 편집합니다. 다음과 같이 보여야 합니다:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf| MYSQLSocket /var/run/mysqld/mysqld.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") |
ftpdpass 문자열을 MySQL 사용자 pureftpd의 실제 비밀번호로 바꾸는 것을 잊지 마세요! MYSQLCrypt 방법으로 md5를 사용하므로 사용자의 비밀번호를 데이터베이스에 MD5 문자열로 저장하게 되며, 이는 평문 비밀번호를 사용하는 것보다 훨씬 안전합니다!
그런 다음 /etc/pure-ftpd/conf/ChrootEveryone 파일을 생성하고 문자열 yes를 포함합니다:
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone이렇게 하면 PureFTPd가 모든 가상 사용자를 자신의 홈 디렉토리로 chroot하게 되어, 사용자가 자신의 홈 디렉토리 외부의 디렉토리와 파일을 탐색할 수 없게 됩니다.
또한 /etc/pure-ftpd/conf/CreateHomeDir 파일을 생성하고 다시 문자열 yes를 포함합니다:
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir이렇게 하면 사용자가 로그인할 때 홈 디렉토리가 존재하지 않으면 PureFTPd가 사용자의 홈 디렉토리를 생성합니다.
이제 PureFTPd를 독립 실행형 데몬으로 구성해야 합니다(현재 inetd에 의해 제어되고 있습니다). 이를 위해 /etc/default/pure-ftpd-common을 열고 STANDALONE_OR_INETD 매개변수의 값을 standalone으로 변경합니다:
vi /etc/default/pure-ftpd-common| # pure-ftpd에 대한 구성 # (이 파일은 /bin/sh에 의해 소스됨, 적절히 편집) # STANDALONE_OR_INETD # 유효한 값은 "standalone" 및 "inetd"입니다. # 여기서의 모든 변경은 debconf의 설정을 무시합니다. STANDALONE_OR_INETD=standalone # VIRTUALCHROOT: # virtualchroot 지원이 있는 바이너리를 사용할지 여부 # 유효한 값은 "true" 또는 "false"입니다. # 여기서의 모든 변경은 debconf의 설정을 무시합니다. VIRTUALCHROOT=false # UPLOADSCRIPT: 이것이 설정되고 데몬이 독립 실행 모드에서 실행되면, # pure-uploadscript도 아래에 주어진 프로그램을 실행하여 업로드를 처리합니다. # /usr/share/doc/pure-ftpd/README.gz 또는 pure-uploadscript(8)를 참조하세요. # 예: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT= # 설정된 경우, pure-uploadscript는 주어진 uid 및 gid로 $UPLOADSCRIPT를 실행합니다. UPLOADUID= UPLOADGID= |
다음으로 /etc/inetd.conf를 수정하고 ftp 줄을 주석 처리합니다:
vi /etc/inetd.conf| [...] #:STANDARD: 이것들은 표준 서비스입니다. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper [...] |
그 후, Inetd와 PureFTPd를 재시작합니다:
/etc/init.d/openbsd-inetd restart
/etc/init.d/pure-ftpd-mysql restart6 데이터베이스 채우기 및 테스트
데이터베이스를 채우기 위해 MySQL 셸을 사용할 수 있습니다:
mysql -u root -pUSE pureftpd;이제 상태 1(즉, ftp 계정이 활성화됨)인 사용자 exampleuser를 생성하고, 비밀번호 secret(이는 MySQL의 MD5 함수로 암호화되어 저장됨), UID 및 GID 2001(2단계 끝에서 생성한 사용자/그룹의 userid 및 groupid 사용), 홈 디렉토리 /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( exampleuser의 홈 디렉토리) 디렉토리가 자동으로 생성되었고, ftpuser 및 ftpgroup(3단계 끝에서 생성한 사용자/그룹)이 소유하고 있음을 확인할 수 있습니다:
server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2009-06-05 16:09 www.example.com
server1:~#7 데이터베이스 관리
대부분의 사람들에게는 MySQL의 그래픽 프론트 엔드가 더 쉽기 때문에, pureftpd 데이터베이스를 관리하기 위해 phpMyAdmin(이 예제에서는 http://server1.example.com/phpmyadmin/ 아래)을 사용할 수 있습니다.

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

- UID: 2단계 끝에서 생성한 ftp 사용자의 userid(예: 2001).
- GID: 2단계 끝에서 생성한 ftp 그룹의 groupid(예: 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(홈 디렉토리 /home/ftp)와 그룹 ftp를 생성합니다:
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp그런 다음 /etc/pure-ftpd/conf/NoAnonymous 파일을 생성하고 문자열 no를 포함합니다:
echo "no" > /etc/pure-ftpd/conf/NoAnonymous이 구성으로 PureFTPd는 익명 로그인을 허용합니다.
PureFTPd를 재시작합니다:
/etc/init.d/pure-ftpd-mysql restart그런 다음 /home/ftp/incoming 디렉토리를 생성하여 익명 사용자가 파일을 업로드할 수 있도록 합니다. 우리는 /home/ftp/incoming 디렉토리에 311의 권한을 부여하여 사용자가 업로드할 수 있지만 해당 디렉토리의 파일을 보거나 다운로드할 수 없도록 합니다. /home/ftp 디렉토리는 555의 권한을 가져서 파일을 보고 다운로드할 수 있도록 합니다:
cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/이제 익명 사용자가 로그인할 수 있으며, /home/ftp에서 파일을 다운로드할 수 있지만 업로드는 /home/ftp/incoming으로 제한됩니다(그리고 /home/ftp/incoming에 파일이 업로드되면 해당 파일은 읽거나 다운로드할 수 없으며, 서버 관리자가 이를 /home/ftp로 이동해야 다른 사용자가 사용할 수 있습니다).
9 링크
- PureFTPd: http://www.pureftpd.org
- MySQL: http://www.mysql.com
- phpMyAdmin: http://www.phpmyadmin.net
- Debian: http://www.debian.org
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.