web-dev-qa-db-ja.com

zsh compinit:安全でないディレクトリ

それはどういう意味ですか、どうすれば修正できますか?

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

compauditを実行すると、次が返されます。

There are insecure directories:
/usr/local/share/zsh/site-functions
170
Alex

これは私のためにそれを修正しました:

$ cd /usr/local/share/zsh
$ Sudo chmod -R 755 ./site-functions

クレジット: zshメーリングリストへの投稿


EDIT:@biocybermanがコメントで指摘したとおり。 site-functionsの所有者も更新する必要がある場合があります。

$ Sudo chown -R root:root ./site-functions

私のマシン(OSX 10.9)では、これを行う必要はありませんが、YMMVです。

EDIT2:OSX 10.11では、これのみが機能しました:

$ cd /usr/local/share/
$ Sudo chmod -R 755 zsh
$ Sudo chown -R root:staff zsh

また、user:staffはOSXの正しいデフォルト許可です。

251
chakrit
compaudit | xargs chmod g-w

http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/ を参照してください。

177
Wenbing Li

ほとんどの回答には解決策がありますが、この警告が発生する理由については触れません。 ZSHの compinit からの抜粋を次に示します。

セキュリティ上の理由から、compinitは、完了システムがルートまたは現在のユーザーが所有していないファイル、またはワールドまたはグループで書き込み可能なディレクトリ内のファイル、またはルートまたは現在のユーザーが所有していないファイル。そのようなファイルまたはディレクトリが見つかった場合、compinitは補完システムを実際に使用するかどうかを尋ねます。これらのテストを回避し、確認せずにすべてのファイルが使用されるようにするには、オプション-uを使用し、compinitがすべての安全でないファイルとディレクトリをサイレントに無視するには、オプション-iを使用します。 -Cオプションを指定すると、このセキュリティチェックは完全にスキップされます。

したがって、解決策は、次のいずれか(またはすべて)を修正することを意味します。

  • 現在のユーザーをすべてのディレクトリ/サブディレクトリ/ファイルの所有者として設定します:

    compaudit | xargs chown -R "$(whoami)"
    
  • 原因のファイルのグループ/その他の書き込み権限を削除します:

    compaudit | xargs chmod go-w
    

別のアプローチは、以下を使用してこれらのチェックをスキップすることです

compinit -u

しかし、問題を敷物の下に隠すことは短期的には問題を解決するだけなので、私はこれを本当に提案しません。

43
linkyndy

ルートシェルをSudo -i起動したときに同じ警告が表示されましたが、@ chakritのソリューションはうまくいきませんでした。

しかし、compinit-uスイッチが機能することを発見しました。 .zshrc/zshenvまたはcompinitを呼び出した場所

compinit -u

NB:実動システムには推奨されません

http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization も参照してください。

20
number5

MacOs Sierra(10.12.1)では、受け入れられた答えがうまくいきませんでした。/usr/localから再帰的に実行する必要がありました

cd /usr/local
Sudo chown -R <your-username>:<your-group-name> *

注:whoamiでユーザー名を取得し、id -gでグループを取得できます

7
Franco

MacOS Sierraでは、次を実行する必要があります:Sudo chown -R $(whoami):staff /usr/local

4
kkodev

これらの2行は修正されました。

Sudo chown -R _user_:root /usr/local/share/zsh

Sudo chown -R _user_:root /usr/local/share/zsh/*
3
arglee

mojaveで、これはトリックを行いました:Sudo chmod g-w /usr/local/share

1
Sebastien H.

して修正しました

Sudo chown root:staff -R /usr/local/share/zsh

私の場合、share /内の他のディレクトリにも「スタッフ」グループが割り当てられています

0
Franck

これはHigh Sierraにアップデートした後、私のMacで機能します。

グローバル書き込みアクセスを削除します。

Sudo chmod g-w /usr/local/share/zsh/site-functions
Sudo chmod g-w /usr/local/share/zsh
0
Hank Chan