zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?
このメッセージが出る理由は、Zshの補完システム(compinit)が起動時に行っているセキュリティチェックにあります。
Zshは、補完用の設定ファイルが置かれているディレクトリ(fpathに含まれるディレクトリ)の中に、「自分以外のユーザー(またはグループ)が書き込み権限を持っている場所」がないかを調べます。もし他人が書き換えられる状態だと、悪意のあるスクリプトを仕込まれて実行されるリスクがあるため、警告を出して確認を求めているのです。
具体的に何が足りていないのか、そしてどう解決すべきかを解説します。
1. 原因を特定する
まずは、Zshが「安全ではない」と判断しているディレクトリを特定します。ターミナルで以下のコマンドを実行してください。
compaudit
実行すると、問題のあるディレクトリの一覧が表示されます。一般的には、Homebrewでインストールしたツールや、Zinitが管理しているディレクトリが表示されることが多いです。
2. 解決策(正攻法):権限を修正する
表示されたディレクトリの書き込み権限を、自分だけに絞ることで解決します。多くの場合は「グループ」への書き込み権限が付いていることが原因です。
以下のコマンドで、compaudit で見つかったディレクトリの権限を一括修正できます。
# compauditの結果をchmodに渡して、グループ・その他の書き込み権限を剥奪する
compaudit | xargs chmod g-w,o-w
※もし権限エラーが出る場合は、sudo を付けて実行してください。
3. 解決策(設定での回避):チェックを無視する
環境によっては(共有サーバーや特定のOS設定など)、権限を自由に変更できない場合があります。その際は、.zshrc 内の compinit の呼び出し方を変更することで、警告をスキップできます。
# 修正後(セキュリティチェックを無視して強制的に続行)
compinit -u
-u オプションを付けることで、「安全でないディレクトリがあっても黙って続行する(Ignore)」という意味になり、毎回の質問が出なくなります。
まとめ
- 起きていること: Zshが「補完設定を誰かに書き換えられる恐れがある」と警告している。
- やるべきこと: 理想は
compauditで出たディレクトリの権限をchmodで直すこと。 - 手っ取り早い解決:
.zshrcのcompinitに-uを足す。

コメント