首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

ProFTPD 整合 MySQL 實現虛擬使用者認證與磁碟配額:完整部署實戰

     編輯:MySQL 資料庫相關知識

ProFTPD 1.3+ 支援透過 MySQL 管理虛擬使用者與磁碟配額,避免建立系統帳號。本文記錄從編譯安裝、資料庫建立、配置檔設定、UID/GID 對齊、啟動驗證到管理介面的完整實作流程。

1. 編譯安裝 ProFTPD(含 MySQL 與 Quota 模組)

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:磁碟配額支援

2. 建立 MySQL 資料庫與資料表

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
);

3. proftpd.conf 關鍵設定

# 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

4. 系統帳號 UID/GID 對齊

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

5. 啟動與測試

/opt/proftpd/sbin/proftpd -c /opt/proftpd/etc/proftpd.conf
# 測試
ftp localhost
# 使用 MySQL 中建立的虛擬帳號登入

6. 管理操作

  • 新增使用者:INSERT INTO users ...
  • 修改密碼:UPDATE users SET passwd=PASSWORD('new') WHERE userid='...'
  • 設定配額:INSERT INTO quotatab ... (bytes_in_avail=104857600 為 100MB)
  • 刪除使用者:DELETE FROM users WHERE userid='...'
  • 皆可透過 Web 介面 (PHP/Perl) 管理,無需 Shell 權限

優勢總結

  • 虛擬使用者無 Shell 存取,安全性高
  • 配額即時生效,無需重啟服務
  • 支援海量使用者,效能優於 passwd 檔
  • 易於整合計費、審計、自動化佈署系統

結語

ProFTPD + MySQL 是建立多租戶、可計費、可配額 FTP 服務的經典架構。現代替代方案:vsftpd + PAM/MySQL、Pure-FTPd + LDAP/SQL、SFTP (OpenSSH) + Chroot + 配額。根據協定需求與維運熟悉度選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved