首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實作 Serv-U FTP 使用者帳號自動申請系統

     編輯:PHP 相關知識

舊版 Serv-U 設定檔直接操作的帳號管理實作

本程式針對 Windows 2000 環境下的 Serv-U FTP 伺服器,透過直接讀寫 ServUDaemon.ini 設定檔實現 Web 介面帳號自動建立功能。雖然作者自稱「很爛、初稿」,但展示了早期系統整合的實用技巧與 Ini 檔案結構操作邏輯。

核心架構與資料流

  1. 讀取現有設定:fopen($path, "r+") 開啟 Ini 檔,fread() 讀取完整內容至字串
  2. 帳號存在性檢查:strpos($str, "=".$userid) 搜尋用戶識別碼
  3. 新用戶編號計算:解析 User1 區段,統計現有用戶數決定新用戶代號
  4. 建立用戶目錄:@mkdir($userpath, 0700) 建立 FTP 根目錄
  5. 構建用戶設定區塊:組裝密碼、主目錄、配額、權限等參數
  6. 寫入設定檔:定位插入點 fseek(),fputs() 寫入新設定

關鍵程式碼片段解析

用戶編號自動計算邏輯

$start1 = strpos($str, "User1");
if ($start1) {
    $start = $start1 + 6;
    $end = strpos($str, "|", $start);
    $firstusername = substr($str, $start, $end - $start);
    $start2 = strpos($str, "[USER=".$firstusername."|1]");
    $usernum = count(split(" ", substr($str, $start1, $start2 - $start1)));
} else {
    $usernum = 1;
}
$userinfo = "User".$usernum."=".$userid."|1|0 ";

透過字串位置運算解析 Ini 結構,計算下一個可用用戶編號,構建 UserN=userid|1|0 格式記錄。

用戶詳細參數組裝

$maxsize = $size * 1024;  // MB 轉 KB
$userp = "[USER=".$userid."|1] ";
$userp .= "Password=".$password." ";
$userp .= "HomeDir=".$userpath." ";
$userp .= "RelPaths=1 ";
$userp .= "DiskQuota=1|".$maxsize."|0 ";
$userp .= "MaxUsersLoginPerIP=2 ";
$userp .= "TimeOut=600 ";
$userp .= "Access1=".$userpath."|RWAMLCDP ";

參數含義:

  • DiskQuota=1|容量|0:啟用磁碟配額,單位 KB,無硬性限制
  • Access1=路徑|RWAMLCDP:完整權限(讀寫刪列建目錄權限)
  • MaxUsersLoginPerIP=2:單 IP 最大並發連線數

安全性與維護性隱憂

問題風險改善方向
直接操作 Ini 檔Serv-U 運行時鎖定檔案導致寫入失敗/資料損毀使用 Serv-U COM API 或資料庫後端
明文密碼儲存設定檔洩露即帳號被盜啟用 Serv-U 密碼加密選項
無輸入驗證路徑遍歷、注入攻擊風險嚴格過濾 userid、password、size 參數
檔案鎖定機制不完整併發申請導致資料競爭引入資料庫交易或檔案獨佔鎖
硬編碼路徑 (E:\)部署環境遷移困難配置檔化路徑設定

現代化替代架構

  • Serv-U 管理 API:官方提供 COM/HTTP API,支援使用者 CRUD、權限管理、事件監聽
  • 資料庫後端模式:Serv-U 支援 ODBC/MySQL 使用者儲存,直接操作資料表即時生效
  • 標準化協定:改用 SFTP (SSH) 或 WebDAV,整合 LDAP/AD 統一身份認證
  • 容器化部署:使用 atmoz/sftp、stillialive/vsftpd 等現代映像,配合 Kubernetes 管理

此程式雖屬歷史產物,但其「解析結構化設定檔 → 計算新記錄 → 定位插入寫入」的核心邏輯,在現代基礎設施即代碼、配置管理工具中仍具通用參考價值。

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