PureFTPd 支持 MySQL 後端認證,實現 FTP 用戶集中管理、配額限制、帶寬控制。本文記錄源碼編譯安裝(含中文支持)、MySQL 認證表結構、主/認證配置文件參數、系統用戶/目錄權限規劃、FACL 精細權限控制、服務啟動與測試全流程。
./configure --prefix=/usr/local/pureftpd \ --with-mysql=/usr/local/mysql \ --with-language=simplified-chinese \ --with-cookie --with-throttling --with-ratios --with-quotas \ --with-sysquotas --with-uploadscript --with-virtualhosts \ --with-virtualchroot --with-diraliases --with-peruserlimits \ --with-paranoidmsg --with-altlog make && make check && make install
複製配置模板:
mkdir -m 777 /usr/local/pureftpd/etc cp pureftpd-mysql.conf /usr/local/pureftpd/etc/ cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/ cp configuration-file/pure-config.pl /usr/local/pureftpd/bin/
註冊 SystemV 服務:修改 /etc/init.d/pureftpd 路徑指向 /usr/local/pureftpd,chkconfig --add pureftpd。
CREATE DATABASE pureftpd;
GRANT ALL ON pureftpd.* TO pureftpd@localhost IDENTIFIED BY 'pureftpd';
USE pureftpd;
CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`User` VARCHAR(16) NOT NULL DEFAULT '',
`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 '',
`QuotaSize` SMALLINT(5) NOT NULL DEFAULT '0',
`QuotaFiles` INT(11) NOT NULL DEFAULT '0',
`ULBandwidth` SMALLINT(5) NOT NULL DEFAULT '0',
`DLBandwidth` SMALLINT(5) NOT NULL DEFAULT '0',
`ULRatio` SMALLINT(6) NOT NULL DEFAULT '0',
`DLRatio` SMALLINT(6) NOT NULL DEFAULT '0',
`comment` TINYTEXT NOT NULL,
`ipaccess` VARCHAR(15) NOT NULL DEFAULT '*',
`status` ENUM('0','1') NOT NULL DEFAULT '0',
`create_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`modify_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`,`User`), UNIQUE KEY `User` (`User`)
) ENGINE=MyISAM;
# 上傳用戶(寫權限) groupadd upload -g 2001; useradd -u 2001 -g upload -s /sbin/nologin upload # 下載用戶(讀權限) groupadd download -g 2000; useradd -u 2000 -g download -s /sbin/nologin download # FTP 根目錄 mkdir /ftproot chown -R upload /ftproot chgrp -R download /ftproot chmod 750 /ftproot # upload rwx, download r-x, other ---
pure-ftpd.conf 關鍵項:
ChrootEveryone yes NoAnonymous yes CreateHomeDir yes MaxClientsNumber 50 MaxClientsPerIP 8 PassivePortRange 30000 50000 # 防火牆放行 21, 30000-50000
pureftpd-mysql.conf:
MYSQLServer 127.0.0.1 MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword pureftpd MYSQLDatabase pureftpd MYSQLCrypt cleartext MYSQLGetPW SELECT Password FROM users WHERE User='\L' MYSQLGetUID SELECT Uid FROM users WHERE User='\L' MYSQLGetGID SELECT Gid FROM users WHERE User='\L' MYSQLGetDir SELECT Dir FROM users WHERE User='\L' MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User='\L' MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User='\L'
插入測試用戶(映射系統 Uid/Gid):
INSERT INTO users VALUES (1,'upload','upload','2001','2001','/ftproot',0,0,0,0,0,0,'','*',1,NOW(),NOW()); INSERT INTO users VALUES (2,'download','download','2000','2000','/ftproot',0,0,0,0,0,0,'','*',1,NOW(),NOW());
啟動:/usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf。
瀏覽器訪問 ftp://ServerIP:21 驗證上傳/下載權限。
setfacl -R -d -m u:download:rx /ftproot # 默認 ACL:新建文件繼承 download 讀執行 setfacl -R -m u:download:rx /ftproot # 當前文件生效
上傳用戶擁有完整權限,下載用戶僅讀,無需系統級用戶切換。