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


238

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

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

2
この警告が発生する理由を誰かが知っていますか?
Blaszard

3
@Blaszardが(コメントとして)有効な質問をした1年後、 'linkyndy'が(回答として)以下に回答しました。
ハッピーグリーン

回答:


342

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

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

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


編集:コメントで@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の正しいデフォルトの権限です。


1
rootがいない場合はどうなりますか
kirill_igum '20

2
@kirill_igumの「rootなし」は、「root アクセスなし」という意味ですか?もしそうなら、あなたはへのアクセス権を持っているフォルダにファイルをコピーする必要があり、修正し、あなた.zshenv.zshrc新しいフォルダを使用して同じことを行うためにchmod、私は、フォルダに投稿したように、新しいフォルダに。
chakrit 2013

@kirill_igum私がリンクしたメーリングリストのメッセージを見てください。
chakrit 2013

1
所有者をrootに設定した後、グループとその他の両方に対して書き込みアクセス権を取り消す必要があることに気付きました。chmodコマンドをに変更しましたsudo chmod -R go-w zsh
gdvd

1
注:これが機能する前/usr/local/share/zsh/site-functions/usr/local/Cellar、私はにシンボリックリンクを持っている必要がchown -R root:staff /usr/local/Cellarあります。
mVChr 2016年

265
compaudit | xargs chmod g-w

トリックを行います。http: //www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/を参照してください


6
これだよ!グループへの書き込み権限を削除します。ありがとう
glarrain 2014年

8
はるかに良い答えは、compauditこれらのような問題の診断と修正に使用できることに注意してください。
Wolph

7
ファイルの所有者もrootに変更する必要があるかもしれないことに注意してください-私は次のことをしなければなりませんでした:compaudit | xargs chown root
Brad Parks

4
これは間違いなく私にとって最良の解決策です。Homebrewでzshとzsh-completionsをインストールしたので、rootが所有するように変更したくなかったのは明らかです。
katy lavallee

2
compaudit | xargs chmod g-w一緒ompaudit | xargs chown rootに私のためにも働いて、HomeBrewを幸せに保つように見えました。誰かがもう少し起こっていることを説明できますか?
nyxee 2017

76

ほとんどの回答には解決策が付属していますが、この警告が発生する理由については触れません。以下は、ZSHのcompinitからの抜粋です

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

したがって、解決策は以下の1つ(またはすべて)を修正することを意味します。

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

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

    compaudit | xargs chmod go-w
    

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

compinit -u

しかし、敷物の下に問題を隠すことは短期的に問題を解決するだけなので、私はこれを実際にはお勧めしません。


1
ありがとう。人々が実際に問題を理解せずにランダムにコマンドを入力することに驚いています。
悲鳴

3
マルチユーザーシステムはどうですか?このようなシナリオでchown -R "$(whoami)"は、ホームディレクトリの外部にあるファイルなど/usr/local/は機能しません。ドキュメントによると、ファイルをルート所有にする方が理にかなっていますか?
goetzc

私はこの答えが一番好きです。なぜこれが起こったのか考えさせられました。ユーザーのメイングループに別のユーザーを追加した後に発生したことがわかりました。$ HOME / .antigen / bundlesの下のディレクトリは、私のユーザーとグループによって所有されていました。したがって、私の場合、そのユーザーをグループから削除すると問題が解決しました。
サミュエル

25

sudo -iルートシェルを起動すると同じ警告が表示されましたが、@ chakritの解決策は機能しませんでした。

しかし、私-ucompinit作品の切り替えを見つけました。compinit

compinit -u

注意:本番システムには推奨されません

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


それは私のために働いた唯一のsoutionでした。Windows 10のLinuxサブシステムでcompinitを使用してzshを使用しようとしていました
Denns

17

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

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

sudo chmod g-w /usr/local/share/zsh/site-functions
sudo chmod g-w /usr/local/share/zsh

変更をzshディレクトリに限定することをお勧めします。


1
sudo chmod gw / usr / local / share / zsh / site-functions(Mac 10.15で私のために動作しました)
shijin

2
これは、Mac Catalinaで私のために機能した唯一の修正でした
user8467470

1
この修正は、MacOS Catalinaでも同様に機能しました。ありがとう!
タイラー

12

受け入れられた回答はmacOs Sierra(10.12.1)では機能しませんでした。/ usr / localから再帰的に実行する必要がありました

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

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


4
Sierraでもこの方法でこれを実行しませんでしたが、マルチユーザーシステムでは、正しいユーザー/グループはroot:staffである必要があります
Marshall Eubanks

5

これらの2行は私のために修正しました。

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

sudo chown -R _user_:root /usr/local/share/zsh/*

3
私のために働きなさい!私は自分のPCでネットワークアカウントを使用しています-Ubutun 16.04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv

5

macOS Sierraで実行する必要があります: sudo chown -R $(whoami):staff /usr/local


4

私はそれを修正しました

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

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


この質問は、ヘルプセンターで定義されているStack Overflowのトピックではありません。そのような質問には答えないでください。代わりに、注意のためにそれらにフラグを立てる必要があり、それらは適切にクローズまたは移行されます。
Toby Speight


3

私の提案は、監査を実行してから、監査で見つかったディレクトリの権限を修正することです。識別されたディレクトリにグループまたはその他の書き込み権限がないことを確認してください。



3

私のマシン:

System Version: macOS 10.15.4 (19E287)
Kernel Version: Darwin 19.4.0

これが私がしたことです

  1. 実行するcompauditと、安全でないと思われるディレクトリのリストが表示されます。

  2. 実行sudo chmod -R 755 target_directory (例:sudo chmod -R 755 /usr/local/share/zsh

例:

compaudit

戻り値:

/ usr / local / share / zsh

だから走る

sudo chmod -R 755 /usr/local/share/zsh

詳細はこちらリンク


2

今朝、私のシステムの一部のパッケージが更新され、このエラーメッセージが表示されました。Ubuntu 18.04を使用しています。

どうやら、アップデートで何かがユーザー名とグループをの代わりに数字に変更しrootました:

# There are insecure files: /usr/share/zsh/vendor-completions/_code
# sudo ls -alh
-rw-r--r-- 1  131  142 2.6K 2019-10-10 16:28 _code

私はこのファイルのユーザーとグループを変更しrootて、問題を解消しました。アクセス許可を変更する必要はありませんでした。問題の根本的な原因が理解されていない限り、変更しないように注意してください。

sudo chown root _code && sudo chgrp root _code

に切り替え131てに142戻した後root、zshからのこのエラーメッセージは消えました。



2

最近、カタリナについて同じ警告を受けました。簡単な回避策は、これを.zshrcの先頭に置くことです

ZSH_DISABLE_COMPFIX=true


1

このコマンドを実行すると、私の上でうまくいきましたmac OS Catalina

compaudit | xargs chmod g-w,o-w


1

MAC OS Xソリューション:

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

また、「user:staff = OSXのデフォルトのrootユーザー。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.