这是什么意思,我该如何修复它?
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
这是什么意思,我该如何修复它?
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
注意:这个答案是从2012年的。
这个方法对我起作用:
$ sudo chmod -R 755 /usr/local/share/zsh/site-functions
编辑:如@biocyberman在评论中指出的那样。 您可能还需要更新site-functions
的所有者:
$ sudo chown -R root:root /usr/local/share/zsh/site-functions
在我的电脑上(OSX 10.9),我不需要这样做,但你的情况可能会有所不同。
EDIT2: 在OSX 10.11上,只有这个方法有效:
$ sudo chmod -R 755 /usr/local/share/zsh
$ sudo chown -R root:staff /usr/local/share/zsh
在OSX上,用户(user):工作人员(staff)是正确的默认权限。
.zshenv
和.zshrc
以使用新的文件夹,并对新文件夹执行与我发布的文件夹相同的chmod
操作。 - chakritchmod
命令为sudo chmod -R go-w zsh
。 - gdvd/usr/local/share/zsh/site-functions
目录下我有符号链接指向 /usr/local/Cellar
,在此之前我还需要运行 chown -R root:staff /usr/local/Cellar
,这样才能正常工作。 - mVChrroot:staff
还是 user:staff
。令人困惑。 - Franklin Yu使用以下命令去除组写入权限:
compaudit | xargs chmod g-w
就能解决问题。
详见http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/
compaudit | xargs chown root
。 - Brad Parkscompaudit | xargs chmod g-w
的作用是去掉某些文件的写权限,第二个命令 ompaudit | xargs chown root
的作用是将某些文件的所有权转移给根用户。通过执行这两个命令,可以让 HomeBrew(软件管理器)正常工作。 - nyxee大多数答案都提供了解决方案,但没有说明为什么会出现此警告。以下是来自ZSH的compinit摘录:
出于安全原因,compinit还会检查补全系统是否会使用非根用户或当前用户拥有的文件,或世界可写或组可写的目录中的文件,或者不属于根用户或当前用户拥有的文件。如果找到这样的文件或目录,compinit将询问是否真的应该使用补全系统。要避免这些测试并使找到的所有文件在不询问的情况下被使用,请使用选项-u,并使用选项-i使compinit默默地忽略所有不安全的文件和目录。当给出-C选项时,将完全跳过此安全检查。
因此,解决方案意味着修复以下内容之一(或全部):
将当前用户设置为所涉及的所有目录/子目录/文件的所有者:
compaudit | xargs chown -R "$(whoami)"
取消有关文件的组/其他用户的写入权限:
compaudit | xargs chmod go-w
另一种方法是通过使用跳过这些检查:
compinit -u
但我并不建议这样做,因为把问题藏起来只能短期解决问题。
/usr/local/
),执行chown -R "$(whoami)"
就不起作用了。根据文档,把这些文件改为属于root会更合理,你觉得呢? - goetz一旦你理解了原因,解决方案就会变得琐碎和明确无误。
原因:由compaudit
输出的目录具有写入权限,可以被任何组或其他人(世界可写)所访问;或这些文件的所有者是除root或你自己之外的其他人。
示例:在我的情况下,compaudit
给了我这个:
% compaudit
There are insecure directories:
/usr/local/share/zsh/site-functions
/usr/local/share/zsh
如果我们列出我们拥有的这些文件/目录的权限(在这种情况下)
% ls -lh /usr/local/share
total 0
drwxr-xr-x 12 chbrandt admin 384B Aug 14 10:45 aclocal
drwxr-xr-x 8 chbrandt admin 256B Aug 14 10:45 doc
drwxr-xr-x 3 chbrandt admin 96B Jul 24 21:00 fish
lrwxr-xr-x 1 chbrandt admin 36B Aug 14 10:45 gettext -> ../Cellar/gettext/0.21/share/gettext
lrwxr-xr-x 1 chbrandt admin 41B Aug 14 10:45 gettext-0.21 -> ../Cellar/gettext/0.21/share/gettext-0.21
lrwxr-xr-x 1 chbrandt admin 37B Aug 14 10:45 gtk-doc -> ../Cellar/libidn2/2.3.0/share/gtk-doc
drwxr-xr-x 9 chbrandt admin 288B Aug 14 10:45 info
drwxr-xr-x 58 chbrandt admin 1.8K Aug 14 10:45 locale
lrwxr-xr-x 1 chbrandt admin 41B Jul 27 17:12 luajit-2.0.5 -> ../Cellar/luajit/2.0.5/share/luajit-2.0.5
drwxr-xr-x 5 chbrandt admin 160B Jul 27 17:12 man
lrwxr-xr-x 1 chbrandt admin 33B Aug 14 10:45 nvim -> ../Cellar/neovim/0.4.4/share/nvim
drwxrwxr-x 3 chbrandt admin 96B Jul 24 20:57 zsh
%
% ls -lh /usr/local/share/zsh
total 0
drwxrwxr-x 4 chbrandt admin 128B Jul 24 21:00 site-functions
%
% ls -lh /usr/local/share/zsh/site-functions
total 0
lrwxr-xr-x 1 chbrandt admin 39B Jul 24 21:00 _brew -> ../../../Homebrew/completions/zsh/_brew
lrwxr-xr-x 1 chbrandt admin 44B Jul 24 21:00 _brew_cask -> ../../../Homebrew/completions/zsh/_brew_cask
现在我们很容易发现问题,不是吗?注意 zsh/
和 zsh / site-functions
目录与其他目录的区别...
w
' 允许 admin
组对它们进行修改,但 Zsh 不希望这样。
% chmod g-w /usr/local/share/zsh
% chmod g-w /usr/local/share/zsh/site-functions
就是这样了!你可以开始了。打开一个新的终端,你应该不会再看到“zsh compinit: insecure directories
”的信息了;)
chbrandt
是一个“su”,而admin
是一个特权组等等...)。在这种情况下 - 现在回答你的问题 - 那些“错误”的权限可能是/曾经是zsh/homebrew领域中微小错误的结果...或者是一个被误解的功能 ;) - Brandtcompaudit | sed -n '2,$ p' | xargs -I{} chmod g-w {}
。 - GMaster自从 High Sierra 更新以来,这适用于我的 Mac。
移除组写入权限:
sudo chmod g-w /usr/local/share/zsh/site-functions
sudo chmod g-w /usr/local/share/zsh
最好将更改限制在zsh目录中。
这个答案主要是为了我自己以后参考使用,因为大多数答案并没有提供完整的解决方案。以下是解决方案:
首先运行:
compinit
如果上述方法不起作用,请使用 compaudit
对于打印的每个路径,运行以下命令:
sudo chown $(whoami) PATH_HERE
sudo chmod -R 755 PATH_HERE
简单的例子,假设运行compinit后打印出来的路径之一是“/usr/local/share/zsh”。然后:
sudo chown $(whoami) /usr/local/share/zsh
sudo chmod -R 755 /usr/local/share/zsh
以下命令将更新所有文件/文件夹的正确权限:
compaudit | xargs chmod g-w
更改所有者时,除非文件属于root,否则不需要使用sudo
(在macOS BigSur上测试通过)
compaudit
仍然列出不安全的目录。 - Farid当我使用sudo -i
启动root shell时,我收到了与@chakrit的解决方法相同的警告,但这并没有对我起作用。
但是我发现compinit
的-u
开关可以解决问题,例如在你的.zshrc/zshenv或者你调用compinit
的地方使用。
compinit -u
注意:不建议在生产系统中使用
另请参见http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization
sudo chmod go-w /usr/local/share
[2022年更新]
如果使用ZSH Completions,则应该使用以下命令:
chmod -R go-w "$(brew --prefix)/share"
sudo chmod -R go-w /usr/local/share
。该命令会递归地移除其他用户和组的写权限,以确保/usr/local/share目录下的文件和子目录不会被误操作修改。 - ecmanaut/usr/local/share/zsh
就可以了。 - greatvovanchmod -R go-w "$(brew --prefix)/share"
- dijonkitchen最近在Catalina上我也遇到了同样的警告。 一个简单的解决方法是将以下内容放置在你的.zshrc文件的顶部:
ZSH_DISABLE_COMPFIX=true
compaudit | xargs chmod go-w
或 compinit -u
的方法似乎在这个版本的 macOS 上都不起作用。 - Denis L
.zshrc
文件并在文件开头放置此行ZSH_DISABLE_COMPFIX=true
。 - codeman48