UUCP(Unix-to-Unix Copy)誕生於 1970 年代末貝爾實驗室,雖歷經數十年仍活躍於郵件、新聞傳輸與批次檔案同步場景。Taylor UUCP(1.04/1.05 版)作為當前 Linux 發行版主流實作,融合了 HDB、V2 等前輩優點,提供靈活配置語法與強大安全機制。本文系統梳理其核心架構、配置文件體系、撥入/撥出設定、權限控制與故障排查,助您構建可靠的 UUCP 節點網絡。
rmail、rnews)。用戶提交作業 → 寫入 /var/spool/uucp/<site> 假脫機目錄(含命令檔 C.、資料檔 D.、執行檔 X.)→ uucico 定期撥號 → 傳輸作業說明與資料 → 遠端斷線後由 uuxqt 執行。作業分級(A-Z,數字越小優先級越高):郵件通常 B/C 級,新聞 N 級,可透過 timegrade 控制傳輸時段。
login: → 發送帳號 → 等待 password: → 發送密碼uucico 啟動,交換主機名、協議列表、最大假脫機等級/usr/lib/uucp/)nodename your_uucp_hostname # 必設:UUCP 節點名(≤7 字元,建議與 FQDN 首段一致)
spool-dir /var/spool/uucp # 假脫機根目錄
pubdir /var/spool/uucppublic # 公開目錄
unknown permit # 允許匿名 UUCP(需配合 unknown 區塊)
system remote_site
time Any # 允許隨時撥號;或 "Wk 0800-1800" 工作日限時
timegrade C 60 # 僅傳輸 C 級以上作業,失敗 60 分鐘後重試
phone 123-4567 # 撥號號碼,'=' 等二次撥號音,'-' 暫停 1 秒
port serial1 # 對應 port 文件條目
protocol igG # 強制協議列表
chat "" \r\d\r "login:" "Uremote" "password:" "secret"
alternate # 備用配置(如備用電話號碼)
phone 987-6543
called-login Uremote # 強制遠端必須用此帳號登入,防偽裝
sequence true # 啟用呼叫序號檢查,防重放攻擊
forward-to remote_site # 允許轉發給該站點
forward-from trusted_site # 允許接受該站點轉發
關鍵字段:system(規範遠端主機名)、phone(支援撥號代碼轉換)、port/speed(匹配 port 文件)、chat(登入腳本,支援子對話處理 getty 重置)、alternate(多路徑備援)、time/timegrade(時間與等級管控)。
port serial1
type modem
device /dev/cua1 # 必須與鎖檔命名一致(LCK..cua1)
speed 38400
dialer hayes # 對應 dial 文件條目
port serial1-slow # 針對老舊 Modem 的低速備用埠
type modem
device /dev/cua1
speed 9600
dialer hayes-slow
同名埠條目會依序嘗試,自動跳過忙碌埠。type 可為 modem、direct(直連)、tcp(TCP 連線)。
dialer hayes
chat "" "ATZ" "OK" "ATDT\T" "CONNECT"
chat-fail "BUSY" "NO CARRIER" "ERROR" "NO DIALTONE"
\T 會被 sys 中電話號碼替換。chat-fail 讓 uucico 立即識別撥號失敗原因並記錄日誌,避免超時等待。
port tcpport
type tcp
service uucp # /etc/services 定義埠 540
system remote_tcp
port tcpport
time Any
chat "" "login:" "Uremote" "password:" "secret"
TCP 連線無需 dial,直接建立 Socket 進入登入對話。適合高速專線傳輸大量新聞組資料,可壓縮批次傳輸降低開銷。
sys 中 command 關鍵字)system remote_site
command rmail rnews rsmtp # 僅允許執行列出命令
command-path /usr/bin:/usr/local/bin
預設僅開放 rmail、rnews,嚴防任意命令執行風險。
system remote_site
local-send /home /var/spool/uucppublic # 本地可發送目錄
local-receive /home /var/spool/uucppublic/receive
remote-send /var/spool/uucppublic !/var/spool/uucppublic/incoming
remote-receive /var/spool/uucppublic/incoming
! 表示排除目錄。遠端僅能讀取公開目錄、寫入 incoming,徹底隔離本地檔案系統。
system trusted_relay
forward-to siteA siteB # 僅允許轉發給指定站點
forward-from siteA # 僅接受來自 siteA 的轉發請求
預設禁止轉發,防止成為開放郵件中繼或被盜用長途電話費。
Uremote),Shell 設為 /usr/lib/uucp/uucico,家目錄指向 /var/spool/uucppublic,群組 uuguest。ugetty 或 mgetty 支援撥入/撥出共用埠與鎖檔協調。sys 中每站點必設 called-login Uremote,拒絕偽裝主機名的中間人攻擊。.Sequence 計數器(mode 600, owner uucp),初始值隨機化,偵測重放與中間人。config 中 unknown 區塊限制命令、目錄、除錯請求,專用 anon-bin 目錄放置經審計的 rmail。| 協議 | 類型 | 適用場景 | 關鍵參數 |
|---|---|---|---|
| g / G | 滑動視窗封包 | Modem/直連,錯誤率高 | window (1-7/1-127), packet (64-4096) |
| i | 流式 | 可靠連線 (TCP) | 無 |
| t / e / f | 流式變體 | TCP 高速傳輸 | 無 |
| a / j | 舊版封包 | 相容舊實作 | packet size |
調優範例(sys 中):
system remote_site
protocol g
protocol-parameter g window 7 packet 512
嘈雜線路縮小封包與視窗;優質線路增大至 1024/4096 降低開銷。
| 現象 | 可能原因 | 排查步驟 |
|---|---|---|
Wrong time to call | 缺 time 或時間窗未到 | 檢查 sys time 設定 |
| 站點被鎖 | 殘留鎖檔或並發 uucico | 刪除 /var/spool/uucp/*/LCK..*,殺掉殘留進程 |
| 對話腳本失敗 | 速率不符、提示字串變更 | uucico -x all -s site 觀察實際收發,調整 chat |
| Modem 不撥號 | DTR 線路、裝置檔錯誤 | 終端機測試 ATZ,確認 device、dialer |
| 封包大量丟失 | 序列埠速率過高、無硬體流控 | 降低 speed,啟用 RTS/CTS,確認 UART 16550A |
握手失敗 RBADSEQ | 序號不同步 | 同步雙端 .Sequence,檢查 sequence true |
握手失敗 RLOGIN | 帳號/密碼錯誤 | 核對 chat 與遠端 /etc/passwd 或 /usr/lib/uucp/passwd |
/var/spool/uucp/Log(主日誌)、Stats(傳輸統計)、Debug(除錯輸出,mode 600)。/var/spool/uucp/.Log/uucico/<site>、.Log/uuxqt/<site> 分站點記錄;除錯輸出至 .Admin/audit.local(撥出)與 .Admin/audit(撥入)。Log 中 Out of sequence call rejected、Handshake failed (RBADSEQ) 等異常條目,及時發現入侵嘗試。Taylor UUCP 雖屬經典技術,其模組化設計、細顆粒權限模型、多層次安全機制(序號、called-login、轉發管控、匿名隔離)在當今混合雲、邊緣計算、離線同步場景仍具獨特價值。掌握其配置精髓,不僅能維護既有郵件/新聞網關,更能為受限頻寬、間歇性連線環境提供穩健的資料交換骨幹。願本指南助您駕馭這把「經典利器」,構建安全可靠的 UUCP 節點網絡。