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

基於 ProFTPD + MySQL 的企業級個人數據備份系統架構設計

     編輯:MySQL 資料庫相關知識

系統背景與動機

病毒橫行、資料外洩風險下,企業需為員工提供「大容量、高可靠、高安全、權限可控」的個人備份空間。方案採用 Linux + ProFTPD 1.2.4+ + MySQL,以資料庫取代傳統 /etc/passwd 管理 FTP 帳號,解決並發寫入、Telnet 風險、瀏覽器改密難等痛點。

核心資料模型

FTP 帳號表 users

CREATE TABLE users (
    userid VARCHAR(50) PRIMARY KEY,
    password VARCHAR(50),
    uid INT DEFAULT 0,
    gid INT DEFAULT 65533,
    homedir VARCHAR(255),
    count INT DEFAULT 0,
    ftime TIMESTAMP(14),
    shell VARCHAR(255) DEFAULT '/bin/bash'
);

操作審計表 FTP_log

CREATE TABLE FTP_log (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    filename VARCHAR(255),
    filesize INT UNSIGNED,
    email VARCHAR(20),
    ip VARCHAR(15),
    action VARCHAR(255),
    ftime DATETIME
);

ProFTPD 關鍵配置 proftpd.conf

# MySQL 連線
SQLConnectInfo FTPusers@localhost db_user db_pass
SQLAuthTypes Plaintext
SQLAuthenticate users
SQLUserTable users
SQLNameField userid
SQLPasswordField password
SQLHomedirField homedir
SQLUidField uid
SQLGidField gid
SQLLoginCountField count
SQLShellField shell

# 配額預設 200MB
DefaultQuota 204800000
QuotaType hard

# 日誌寫入資料庫
TransferLog none
SQLLog RETR,STOR,DELE INSERT INTO FTP_log VALUES (NULL, '%f', %b, '%u', '%h', '%r', NOW())

業務流程實現

操作資料庫動作檔案系統動作
新增用戶INSERT INTO users ...首次登入自動建立 homedir,依 uid/gid 設權限,生成 .quota
刪除用戶DELETE FROM users WHERE userid=?遞歸刪除 homedir(需 Web 進程有寫權限,配合 sudoers)
修改配額—覆蓋 homedir/.quota(格式:總量 已用量),需 root 權限
修改密碼UPDATE users SET password=PASSWORD(?) WHERE userid=?—

安全與效能優勢

  • 帳號與系統用戶完全隔離,消除 Shell 存取風險。
  • 審計日誌入庫,支援 SQL 多維度查詢(IP、用戶、時間、動作、檔案大小),遠快於文字日誌 grep。
  • 配額管理透過資料庫驅動,支援即時調整無需重啟 FTP 服務。

部署提示

  1. 編譯 ProFTPD 需 --with-modules=mod_sql:mod_sql_mysql:mod_quota 並指定 MySQL header/lib 路徑。
  2. Web 管理介面以 PHP/Perl 連接 MySQL 執行上述 DML,前端僅負責參數校驗與呈現。
  3. 生產環境建議啟用 TLS/SSL(mod_tls)加密傳輸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved