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

個人資料備份系統方案:Linux + ProFTPD + MySQL 實現虛擬使用者與磁碟配額

     編輯:MySQL 資料庫相關知識

針對病毒威脅與資料隱私,設計基於網路儲存的個人備份系統。採用 Linux + ProFTPD + MySQL 架構,實現虛擬使用者認證、磁碟配額、Web 管理介面,避免系統帳號風險。

架構選型理由

  • Wu-FTPD:Red Hat 預裝但漏洞多
  • ProFTPD:模組化、支援 SQL 認證、Standalone 模式、配額模組、安全性佳
  • MySQL:虛擬帳號/配額資料儲存、並發支援、Web 管理易整合

系統總體設計

  • 後端:ProFTPD 提供 FTP 服務,支援各類 FTP 用戶端
  • 認證/配額:MySQL 儲存虛擬帳號 (uid/gid/homedir/密碼) 與配額規則
  • 管理介面:Web (PHP/Perl) 供管理員建立/修改/刪除帳號、調整配額、審計日誌
  • 核心挑戰:動態配置 ProFTPD 管理大量虛擬使用者

實作步驟

1. 安裝 MySQL、建立符號連結

ln -s /usr/local/mysql /usr/local/mysql  # 確保路徑一致

2. 編譯 ProFTPD (含 SQL + 配額模組)


./configure --with-includes=/usr/local/mysql/include \
  --with-libraries=/usr/local/mysql/lib/mysql \
  --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \
  --prefix=/opt/proftpd
make && make install

3. 建立 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
);

4. proftpd.conf 關鍵 SQL 配置


SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users
SQLConnectInfo          proftpd@localhost root password
SQLUserInfo             users userid passwd uid gid homedir shell
SQLDefaultUID           1000
SQLDefaultGID           1000
SQLHomedirOnDemand      on

QuotaEngine             on
QuotaDirectoryTally     on
QuotaDisplayUnits       Mb
QuotaShowQuotas         on

LoadModule              mod_sql.c
LoadModule              mod_sql_mysql.c
LoadModule              mod_quotatab.c
LoadModule              mod_quotatab_sql.c

5. 系統帳號 UID/GID 對齊


groupadd -g 1000 ftpusers
useradd -u 1000 -g 1000 -d /home/ftp -s /bin/false ftpuser
chown -R 1000:1000 /home/ftp

6. 啟動驗證


/opt/proftpd/sbin/proftpd -c /opt/proftpd/etc/proftpd.conf
# FTP 用戶端以虛擬帳號登入測試

管理操作 (可封裝為 Web 介面)

  • 新增使用者:INSERT INTO users ...
  • 修改密碼:UPDATE users SET passwd=PASSWORD('new') WHERE userid='...'
  • 設定配額:INSERT INTO quotatab ... (bytes_in_avail 設定上限)
  • 刪除使用者:DELETE FROM users WHERE userid='...'
  • 查看使用情況:SELECT * FROM users WHERE userid='...'

優勢總結

  • 虛擬使用者無 Shell 存取,消除系統帳號風險
  • 配額即時生效,無需重啟服務
  • 支援海量使用者,MySQL 並發優於 passwd 檔
  • 易整合計費、審計、自動化佈署 (Ansible/Terraform)

結語

ProFTPD + MySQL 是多租戶、可計費、可配額 FTP 服務的經典實作。現代替代:vsftpd + PAM/MySQL、Pure-FTPd + LDAP/SQL、SFTP (OpenSSH) + Chroot + Quota、Nextcloud/Seafile/MinIO (WebDAV/S3 API、更豐富協同功能)。根據協定需求、維運熟悉度、擴展性選擇。

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