科技 · 實用指南
zsh compinit 顯示「不安全目錄」?chmod 前先稽核補全信任鏈
這個警告保護會載入 shell 程式碼的路徑。修改權限或關閉檢查前,先綁定真實使用者、每個 fpath 父目錄、符號連結目標與安裝器擁有者。

zsh 會警告不安全的補全目錄,因為 fpath 中的檔案可能當作 shell 程式碼載入。這是信任邊界,不是遞迴 chmod 或 chown 的指令。
以實際開啟終端的使用者執行 compaudit,沿每個路徑檢查父目錄與真實連結目標,找出套件管理器或安裝器擁有者,再做一次可復原修復並驗證。
1. 以真實 shell 使用者重現稽核
在出現警告的同一互動式 shell 中記錄 zsh 版本、id、groups、HOME、ZDOTDIR 與有序 fpath,再執行 autoload -Uz compaudit 和 compaudit。
不要把 sudo、刪除補全快取或反覆回答提示當成診斷。
2. 盤點每個路徑、父目錄與真實目標
對每個結果記錄檔案、父目錄與符號連結目標的擁有者、群組、模式與 ACL,並對照 fpath 順序。
分類每個寫入者,保留變更前狀態及建立路徑的套件或安裝器。
3. 區分三類擁有權場景
使用者目錄的意外漂移只修正已證明的擁有者或寫入位元;套件管理目錄採用官方支援的模型。
有意共享前綴必須確認所有寫入者都可信,否則移入每使用者路徑或保持排除。
4. 讓修復持久且可復原
只修改最小路徑,記錄舊值、新值、命令與復原方式。禁止對未審讀輸出做遞迴 chmod、chown 或 xargs。
若更新會重建問題,修復安裝器、套件設定或 FPATH。
5. 驗證新 shell 與負向邊界
以原使用者啟動新 shell,重跑 compaudit 並測試該路徑提供的補全。
證明不可信帳戶無法修改已載入檔案或父目錄,並重放原升級流程後才驗收。
