テクノロジー · 実用ガイド

zsh compinit が「insecure directories」と表示?chmod の前に補完の信頼経路を監査する

この警告は shell コードを読み込む経路を守ります。権限変更や検査無効化の前に、実ユーザー、fpath の各親、シンボリックリンク先、インストーラー所有者を固定します。

オリジナルイラスト:zsh 補完の信頼経路。
オリジナルイラスト:呼び出しユーザー、fpath 親、補完ファイル、実体を監査します。 Watch at Ease

zsh が不安全な補完ディレクトリを警告するのは、fpath のファイルが shell コードとして読み込まれるためです。再帰的 chmod や chown の指示ではなく信頼境界です。

実際に端末を開くユーザーで compaudit を実行し、各親と実リンク先、パッケージ所有者を調べ、可逆な最小修復と再検証を行います。

1. 実 shell ユーザーで監査を再現する

同じ対話 shell で zsh バージョン、id、groups、HOME、ZDOTDIR、fpath 順序を記録し compaudit を実行します。

sudo、キャッシュ削除、繰り返し回答を診断の代わりにしません。

2. 各パス、親、実体を棚卸しする

一覧のファイル、親ディレクトリ、リンク先について所有者、グループ、mode、ACL を記録します。

各書き込み主体と、そのパスを作ったパッケージやインストーラーを分類します。

3. 三つの所有モデルを分ける

ユーザー所有ツリーの事故なら証明した一箇所だけ直し、管理ツリーならパッケージ側のモデルを使います。

共有 prefix の全書き込み主体を信頼できないなら、ユーザー専用パスへ移すか除外します。

4. 持続的で戻せる修復にする

最小パスの旧値、新値、操作、ロールバックを記録し、未確認出力への再帰操作を避けます。

更新で再発するなら installer、package 設定、FPATH を直します。

5. 新 shell と負の境界を検証する

元ユーザーで新 shell を起動し compaudit と実際の補完を再試験します。

未信頼ユーザーが読み込まれるファイルや親を変更できないことと、更新後も状態が保たれることを確認します。

オリジナルイラスト:zsh 補完の持続的修復マトリクス。
オリジナルイラスト:正しい所有者に最小修復を割り当て更新後に再試験します。 Watch at Ease