2012-12-07 615 views
130

這是什麼意思,我該如何解決它?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 
+1

任何人都知道爲什麼會出現警告「員工」組? – Blaszard

回答

202

這個固定對我來說:

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

信用:a post on zsh mailing list


編輯:正如@biocyberman在評論中指出的那樣。您可能需要更新的site-functions所有者以及:

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

在我的機器(OSX 10.9),我不需要這樣做,但情況因人而異。

EDIT2:在OSX 10.11,僅此工作:

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

而且用戶:員工是在OSX正確的默認權限。

+0

如果你沒有根 –

+1

@kirill_igum「no root」,你的意思是「沒有root_access_」?如果是這樣,那麼你應該將文件複製到你有權訪問的文件夾中,修復'.zshenv'和'.zshrc'以使用新文件夾,並在我發佈的新文件夾上執行相同的'chmod'文件夾。 – chakrit

+0

@kirill_igum查看我已鏈接的郵件列表郵件。 – chakrit

17

當我啓動一個根shell的sudo -i時,我收到了相同的警告,@ chakrit的解決方案對我無效。

但是我發現-u開關的compinit工作,例如,在您的.zshrc/zshenv或​​者你叫compinit

compinit -u 

注意:不建議在生產系統

參見http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization

+0

這是我唯一的工作。我試圖在Windows 10上使用Linux上的子系統上的compinit的zsh – denns

3

我接受的答案在macOs Sierra(10.12.1)上無效。不得不這樣做從/ usr /本地

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

注遞歸:你可以得到你的whoami的用戶名和組id -g

+0

我在Sierra上也是這樣做的,儘管在多用戶系統中,正確的用戶/組應該是root:工作人員 –

2

這兩條線有固定的我。

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

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

適合我!我在我的電腦上使用網絡帳戶 - Ubutun 16.04 'sudo chown -R $(whoami):root/usr/local/share/zsh' 'sudo chown -R $(whoami):root/usr/local/share/zsh/*' – hoangdv

12

大多數答案都提供了一個解決方案,但沒有提到爲什麼會發生這種警告。下面是ZSH的compinit的摘錄:

出於安全原因compinit還檢查完成後系統將使用而不是以root或者當前用戶,或文件是世界 - 或組 - 目錄擁有文件可寫的或者不屬於root或由當前用戶擁有的。如果找到這樣的文件或目錄,compinit會詢問是否真的應該使用完成系統。爲了避免這些測試,並且使所有找到的文件都不用詢問就可以使用,請使用選項-u,並使compinit靜默地忽略所有不安全的文件和目錄,使用選項-i。當給出-C選項時,這個安全檢查會被完全跳過。

因此,解決方案意味着固定下列中的一個(或全部):

  • 設置當前用戶爲所有的目錄/子目錄/文件中引起的所有者:

    compaudit | xargs chown -R "$(whoami)" 
    
  • 消除對組/人寫權限在事業中的文件:

    compaudit | xargs chmod go-w 
    

另一種方法是通過使用

compinit -u 

跳過這些檢查,但我真的不建議此,作爲地毯下隱藏的問題只解決短期的問題。

3

在MacOS塞拉利昂你需要運行: sudo chown -R $(whoami):staff /usr/local

0

我用下面的命令來刪除錯誤。

sudo chmod -R 755 /usr/local/share/zsh/site-functions 
0

我固定它在我的情況做

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

內共享其他目錄/也有分配

+0

問題不在於[help]中定義的Stack Overflow的主題。請不要回答這些問題;相反,你應該標記他們的注意力,他們將被關閉或適當遷移。 –