雖 vsftpd、ProFTPD 更現代,但 wu-ftpd 仍廣泛應用於傳統系統,其配置指令涵蓋存取控制、頻寬限制、虛擬主機、上傳權限等企業級需求。本文詳述原始碼編譯安裝、核心配置指令語法與實戰範例。
官方:`ftp://ftp.wu-ftpd.org/pub/wu-ftpd/` 下載 `wu-ftpd-2.6.0.tar.gz`。
cp wu-ftpd-2.6.0.tar.gz /usr/src
cd /usr/src
tar xvfz wu-ftpd-2.6.0.tar.gz
cd wu-ftpd-2.6.0
./build CC=gcc lnx
# lnx 為 Linux 目標平台識別碼
編譯產出執行檔:`ftpd` (主程式)、`ftpshut` (關閉)、`ftpcount` (計數)、`ftpwho` (連線查看)、`ckconfig` (配置檢查)、`ftprestart` (重啟)、`privatepw` (群組密碼管理)。
./build install
# 自動複製執行檔至 /usr/sbin、/usr/bin,man page 至 /usr/man
編輯 `/etc/inetd.conf` 或 `/etc/xinetd.d/wu-ftpd`,指向新 `ftpd`,建議加入 `-a` 參數啟用 `ftpaccess` 進階配置。
常用參數:
`-d` 偵錯日誌 → `/var/log/messages`
`-l` 記錄每次會話
`-t 600` 閒置 10 分鐘斷線
`-a` 使用 ftpaccess 配置
`-i` 記錄上傳至 `xferlog`
`-L` 記錄所有指令
cp /bin/tar /bin/gzip /bin/gunzip /bin/compress /bin/uncompress ~ftp/bin/
cp /bin/ls ~ftp/bin/ls
ckconfig
# 依提示修復缺失配置檔,參考 doc/examples/ 範例
此檔案控制 FTP 伺服器行為核心,採指令式語法,支援類別、限制、訊息、記錄、上傳、別名、虛擬主機等豐富功能。
class all real,guest,anonymous *
class friend real,guest,anonymous *.linuxaid.com.cn 202.102.13.*
• 類別名自定義 • 類型:real(實體帳號)、guest(客體)、anonymous(匿名) • IP 遮罩支援萬用字元。
limit local 20 Any /tmp/message/msg.toomany
limit outworld 100 MoTu|Any 2200-0800 /tmp/message/msg.limit
• 類別、最大連線數、時段、超限提示訊息檔。
readme README* login
readme README* cwd=*
message /welcome.msg login
message .message cwd=*
• `readme` 顯示檔案內容 • `message` 顯示指定檔案 • `cwd=*` 任意目錄切換觸發。
compress yes all
tar yes all
log commands real
log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
# 以 ftpshut 建立時間檔,刪除檔案即恢復服務
passwd-check rfc822 enforce
# 僅接受 RFC822 郵件格式密碼,不符拒絕登入
upload /var/ftp * no
upload /var/ftp /incoming yes ftp daemon 0666
upload /var/ftp /incoming/gifs yes jlc guest 0600 nodirs
• 僅允許 `/incoming` 及 `/incoming/gifs` 上傳 • 新檔擁有者/群組/權限指定 • `nodirs` 禁止建立子目錄。
alias xwin /pub/linux/xwindows
cdpath /pub/linux /pub /
• `cd xwin` 即進入 `/pub/linux/xwindows` • `cdpath` 模擬 PATH 變數行為。
path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^.-
# 僅允許字母數字底線點連字號,禁止以 . 或 - 開頭
guestuser *
realgroup admin
# 所有非匿名用戶視為 guest (chroot 限制),admin 群組例外保持 real 身分
• `/etc/passwd` 中 home 目錄格式:`/ftp/./incoming` → `chroot("/ftp")` + `chdir("/incoming")`。
virtual 192.168.1.10 root /var/ftp/vhost1
virtual 192.168.1.10 banner /var/ftp/vhost1/banner.msg
virtual 192.168.1.10 logfile /var/log/xferlog_vhost1
virtual 192.168.1.10 allow user1 user2
virtual 192.168.1.10 deny baduser
virtual 192.168.1.10 private
• 同一 IP 綁定多個虛擬 FTP 站點,各自獨立根目錄、歡迎訊息、日誌、存取控制。
deny 202.102.15* *.hacker.com /tmp/message/deny.msg
noretrieve /etc/passwd core
allow-retrieve /pub/README
wu-ftpd 配置雖繁複,但每一指令皆直映業務需求。建立標準化 `ftpaccess` 模板、版本控管配置檔、自動化 `ckconfig` 驗證納入 CI/CD,讓 FTP 服務配置從「玄學」變為「工程」。