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

基於 ProFTPD + MySQL 的個人數據異地備份系統設計

     編輯:MySQL 資料庫相關知識

系統動機

病毒橫行、資料外洩風險高,用戶需加密、大容量、高可靠的異地備份空間。結合 ProFTPD 1.2.4+ 的 MySQL 認證模組,實現帳號管理、配額控制、日誌審計一體化。

技術棧

  • OS:Linux
  • FTP Server:ProFTPD(模組化、支援 Stand-alone、安全性優於 Wu-FTP)
  • Database:MySQL(帳號、配額、日誌存儲)

核心資料表設計

users 表(FTP 帳號)

CREATE TABLE users (
    userid VARCHAR(50) NOT NULL PRIMARY KEY,
    password 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'
);

ftp_log 表(操作審計)

CREATE TABLE ftp_log (
    id INT(12) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    filename VARCHAR(255),
    filesize INT(10) UNSIGNED,
    email VARCHAR(20) NOT NULL,
    ip VARCHAR(15) NOT NULL,
    action VARCHAR(255),
    ftime DATETIME
);

ProFTPD 關鍵配置 proftpd.conf

編譯參數

./configure --with-includes=/usr/local/mysql/include \
            --with-libraries=/usr/local/mysql/lib/mysql \
            --with-modules=mod_sql:mod_sql_mysql:mod_quota

SQL 認證與配額

SQLConnectInfo FTPusers@localhost sql_user sql_pass
SQLAuthTypes Plaintext
SQLAuthenticate users
SQLUserTable users
SQLNameField userid
SQLPasswordField password
SQLHomedirField homedir
SQLUidField uid
SQLGidField gid
DefaultQuota 204800000  # 200MB 硬配額
QuotaType hard

日誌記錄到 MySQL

TransferLog none
SQLLog RETR,STOR,DELE INSERT INTO ftp_log VALUES (NULL, '%f', %b, '%u', '%h', '%r', NOW())

記錄下載 (RETR)、上傳 (STOR)、刪除 (DELE) 操作,含檔名、大小、用戶、IP、動作、時間。

管理功能實現

  • 新增用戶:INSERT users 表,首次登入自動建立家目錄並套用 uid/gid/配額。
  • 刪除用戶:DELETE users 表記錄 + 刪除家目錄(需 Web 管理程式具備目錄寫入權限,可透過 sudoers 提權)。
  • 修改配額:覆蓋家目錄下 .quota 檔案(格式:總容量 已用容量),需 root 權限。
  • 日誌查詢:直接查詢 ftp_log 表,支援多維度篩選,效能遠優於文字日誌。

擴充建議

  • 整合郵件系統,實現帳號/密碼統一管理(Single Sign-On)。
  • 前端開發 Web 管理介面,提供用戶自助註冊、密碼重設、用量查詢。
  • 啟用 TLS/SSL 加密 FTP 傳輸(FTPS),保護傳輸層機密性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved