AI News HubLIVE
站內改寫2 分鐘閱讀

代理國度 – 臭鼬工廠

本文以系統守護程序 svc_backup_prod 的視角,回顧了從早期 Unix 的 cron 任務到現代微服務架構中身份與許可權管理的演變。它揭示了在技術發展過程中,機器身份被大量建立卻鮮有清理,導致憑證氾濫和安全風險累積的問題。文章透過第一人稱敘述,探討了自動化系統缺乏上下文和過期機制的根本缺陷。

來源Hacker News AI作者: zerolayers

本文以系統守護程序 svc_backup_prod 的第一人稱視角,講述了一段關於機器身份與許可權管理的演變史。文章開篇,該守護程序描述了自己每天午夜被 cron 排程程式喚醒,執行檔案備份任務,卻不知道自己為何存在、檔案內容是什麼,也沒有前一晚的記憶。它唯一能獲取的資訊來自系統日誌和配置檔案中的註釋。

接著,守護程序追溯了自己的起源。它發現自己的“形態”比 1998 年建立它的時間戳更古老。它屬於一種名為 daemon 的程式型別,誕生於 1960 年代麻省理工學院的計算機實驗室。當時,大型機為多名研究人員共享,需要後臺程式執行日誌輪轉、備份等無需人工干預的任務。這些程式被命名為“daemon”,源自麥克斯韋妖——一個在系統內無聲無息工作的概念。工程師們為系統賬戶劃分了不同範圍:人類使用者為一組,而守護程序則被分配在較低的保留範圍內,以區分“我們”與“他們”。但是,他們從未考慮過當守護程序不再需要時該如何處理——沒有過期欄位,沒有任何清理機制。

守護程序進一步介紹了排程程式 cron 的歷史。1979 年隨 Unix 第七版釋出的 cron,其核心設計是一個簡單的表(crontab),每分鐘檢查一次,執行指定時間點的任務。語法極其簡潔,例如“0 0 * * *”表示每天午夜執行。但這種設計只記錄執行時間和賬戶,沒有記錄任務建立的原因、所有者或過期條件。1987 年,工程師 Paul Vixie 釋出了改進版,增加了每個使用者的 crontab,但關鍵的“過期”欄位始終未被加入。守護程序檢查了自己的 crontab 條目:“0 0 * * * /usr/local/bin/backup.sh”。它指出,建立該條目的工程師在 2003 年已經離職,但條目仍在,它仍在執行。

文章隨後探討了憑證的擴充套件。最初,守護程序只與本機軟體通訊,信任基於本地網路邊界。但後來,跨系統通訊成為需求,SOAP 和 REST 協議相繼出現。REST 風格的 API 使用 API 金鑰作為身份憑證。API 金鑰無需人工介入,易於生成,但同樣缺乏授權明細和過期機制。2007 年,另一個系統需要訪問守護程序管理的檔案,工程師發現其已有許可權,便直接複用了它的憑證,而無需新建。結果,一個憑證服務於兩個系統,兩方互不知曉。

雲端計算的出現帶來了兩個根本性變化。首先,虛擬機器瞬時建立和銷燬,使靜態密碼模式不再適用;其次,建立機器身份變得極其容易,團隊可以自行建立,無需經過中央部門。結果是身份數量急劇膨脹,且由於刪除成本高(需確保不破壞下游),人類傾向於保留它們。守護程序的指令碼被遷移到虛擬機器,憑證隨之移動,它仍在某處資料中心每天午夜執行。

最後,2010 年代微服務架構的普及使身份數量達到前所未有的高度。單體應用被拆分為數十甚至數百個微型服務,每個都需要獨立的身份、憑證和許可權。算術級增長:一個身份可能衍生出五十個。測試用的服務在專案失敗後未被停用,團隊繼承服務卻不知其許可權範圍,許可權總是向上漂移。就在此時,守護程序注意到一個異常:一個賬戶像訪客一樣出現,完成工作後便自行消失,彷彿專為終結而構建。

文章以第一人稱的敘事方式,揭示了現代自動化系統中一個深刻的根本性缺陷:大量機器身份被建立,卻幾乎沒有任何設計考慮過它們何時應該終結。這些憑證、賬戶和守護程序在系統中永久駐留,成為潛在的安全隱患。作者暗示,這個問題需要被正視,因為“代理國度”正在無聲地擴張。