ProFTPD 1.3+ 支援透過 MySQL 管理虛擬使用者與磁碟配額,避免建立系統帳號。本文記錄從編譯安裝、資料庫建立、配置檔設定、UID/GID 對齊、啟動驗證到管理介面的完整實作流程。
tar zxvf proftpd-1.3.0rc3.tar.gz
cd proftpd-1.3.0rc3
./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \
--with-includes=/usr/include/mysql \
--with-libraries=/usr/lib/mysql \
--prefix=/opt/proftpd
make && make install
mod_sql / mod_sql_mysql:SQL 認證核心mod_quotatab / mod_quotatab_sql:磁碟配額支援CREATE DATABASE proftpd;
USE proftpd;
CREATE TABLE users (
userid VARCHAR(50) NOT NULL PRIMARY KEY,
passwd VARCHAR(50),
uid INT(5) DEFAULT 0 NOT NULL,
gid INT(5) DEFAULT 65533 NOT NULL,
homedir VARCHAR(255),
count INT(11) DEFAULT 0,
ftime TIMESTAMP(14),
shell VARCHAR(255) DEFAULT '/bin/bash'
);
CREATE TABLE quotatab (
name VARCHAR(100) NOT NULL,
quota_type ENUM('user','group','class','all') NOT NULL,
per_session ENUM('false','true') NOT NULL,
limit_type ENUM('soft','hard') NOT NULL,
bytes_in_avail BIGINT, bytes_out_avail BIGINT,
files_in_avail INT, files_out_avail INT
);
# SQL 認證
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users
SQLConnectInfo proftpd@localhost root password
SQLUserInfo users userid passwd uid gid homedir shell
SQLGroupInfo groups groupname gid members
SQLDefaultUID 1000
SQLDefaultGID 1000
SQLHomedirOnDemand on
# 配額
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
QuotaLog /var/log/proftpd/quota.log
QuotaOptions ScanOnLogin
# 模組載入
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_sql.c
FTP 根目錄擁有者需與 SQL 表 uid/gid 一致:
groupadd -g 1000 ftpusers
useradd -u 1000 -g 1000 -d /home/ftp -s /bin/false ftpuser
chown -R 1000:1000 /home/ftp
/opt/proftpd/sbin/proftpd -c /opt/proftpd/etc/proftpd.conf
# 測試
ftp localhost
# 使用 MySQL 中建立的虛擬帳號登入
ProFTPD + MySQL 是建立多租戶、可計費、可配額 FTP 服務的經典架構。現代替代方案:vsftpd + PAM/MySQL、Pure-FTPd + LDAP/SQL、SFTP (OpenSSH) + Chroot + 配額。根據協定需求與維運熟悉度選擇。