659

这是什么意思,我该如何解决?

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
4

28 回答 28

855

这为我修复了它:

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

信用:zsh 邮件列表上的帖子


编辑:正如@biocyberman 在评论中指出的那样。您可能还需要更新以下内容的所有者site-functions

$ sudo chown -R root:root /usr/local/share/zsh/site-functions

在我的机器(OSX 10.9)上,我不需要这样做,但 YMMV。

EDIT2:在 OSX 10.11 上,只有这个有效:

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

user:staff 也是 OSX 上正确的默认权限。

于 2012-12-09T08:07:40.343 回答
670

删除组写入权限

compaudit | xargs chmod g-w

会成功的。

http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/

于 2014-03-31T03:54:46.503 回答
227

大多数答案都带有解决方案,但不要提及为什么会出现此警告。这是 ZSH 的compinit的摘录:

出于安全原因,compinit 还会检查完成系统是否会使用不属于 root 或当前用户的文件,或者是全局或组可写目录中的文件,或者不属于 root 或当前用户的文件。如果找到这样的文件或目录,compinit 将询问是否真的应该使用完成系统。要避免这些测试并使所有找到的文件无需询问即可使用,请使用选项 -u,并让 compinit 静默忽略所有不安全的文件和目录,请使用选项 -i。当给出 -C 选项时,此安全检查将完全跳过。

因此,该解决方案意味着修复以下一项(或全部):

  • 将当前用户设置为所有目录/子目录/文件的所有者:

    compaudit | xargs chown -R "$(whoami)"
    
  • 删除组/其他人对原因文件的写权限:

    compaudit | xargs chmod go-w
    

另一种方法是通过使用跳过这些检查

compinit -u

但我并不真正建议这样做,因为将问题隐藏在地毯下只能在短期内解决问题。

于 2017-04-21T14:02:03.090 回答
173

一旦你了解了原因,解决方法就很简单

  • 原因:输出的目录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其他目录的不同之处...... zsh 不喜欢w允许组修改它们的“ ” 。admin

  • 解决方案:关闭该组可写权限!
% chmod g-w /usr/local/share/zsh 
% chmod g-w /usr/local/share/zsh/site-functions 

就是这样!你可以走了。打开一个新终端,您应该不会再看到“ zsh compinit: insecure directories”消息了;)

于 2020-08-17T09:05:20.900 回答
56

自 High Sierra 更新以来,这适用于我的 Mac。

删除组写入权限:

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

最好将更改限制在 zsh 目录中。

于 2018-03-26T13:23:39.743 回答
34

此命令使用正确的权限更新所有文件/文件夹:

compaudit | xargs chmod g-w

您不需要使用sudo来更改所有者 -除非文件属于 root

(在 macOS BigSur 上测试)

于 2021-03-02T01:45:22.610 回答
30

当我sudo -i启动 root shell 时,我得到了同样的警告,@chakrit 的解决方案对我不起作用。

但我发现-u了工作转换compinit,例如在你的 .zshrc/zshenv 或你打电话的地方compinit

compinit -u

注意:不推荐用于生产系统

另请参阅http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization

于 2013-10-26T01:28:56.763 回答
27

这个答案主要是供我自己将来使用的参考,因为大多数答案都没有提供完整的解决方案。这里是:

首轮:

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
于 2020-07-30T11:59:27.367 回答
21

我最近在 Catalina 上也收到了同样的警告。一个简单的解决方法是将它放在 .zshrc 的顶部

ZSH_DISABLE_COMPFIX=true
于 2020-05-11T06:43:04.440 回答
15

在 macOS Sierra(10.12.1)上,接受的答案对我不起作用。必须从 /usr/local 递归

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

注意:您可以获取您的用户名whoami和您的群组id -g

于 2016-12-02T16:01:54.337 回答
13

运行此命令对我有用mac OS Catalina

compaudit | xargs chmod g-w,o-w

于 2020-05-12T20:12:49.857 回答
13

我的机器:

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

在这里阅读更多链接

于 2020-05-19T13:37:53.653 回答
12

MAC OS X 解决方案:

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

还有“user:staff = OSX 上的默认 root 用户。

于 2020-06-05T22:18:09.357 回答
10

我通过这样做来修复它

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

在我的情况下, share/ 中的其他目录也分配了“员工”组

于 2018-01-08T15:33:06.630 回答
10

在过去的可能几个月里,我遇到了这个问题,尝试了几件事,但没有奏效。最后帮助我的是这个。获取不安全目录的列表,然后按如下所述设置所有目录的 chmod。

CLI# compaudit
There are insecure directories:
/usr/local/share/zsh
CLI# sudo chmod -R 755 /usr/local/share/zsh
Password:
于 2021-04-29T08:26:50.600 回答
9

这两行对我来说是固定的。

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

sudo chown -R _user_:root /usr/local/share/zsh/*
于 2017-01-16T11:03:44.360 回答
9

在莫哈韦沙漠,这成功了: sudo chmod go-w /usr/local/share

于 2019-03-08T11:24:57.460 回答
7

这是https://github.com/zsh-users/zsh-completions/issues/433#issuecomment-600582607中唯一对我有用的东西。感谢https://github.com/malaquiasdev

  $ cd /usr/local/share/
  $ sudo chmod -R 755 zsh
  $ sudo chown -R root:staff zsh
于 2020-04-03T12:11:55.640 回答
6

以下工作于 M1

ProductName:    macOS
ProductVersion: 11.1
BuildVersion:   20C69

% compaudit
/opt/homebrew/share

将群组权限从 775 更改为 755

% sudo chmod 755 /opt/homebrew/share

drwxr-xr-x   33 xenea  admin   1056 Feb  2 01:28 share
于 2021-02-01T20:26:22.770 回答
5

在 macOS Sierra 上,您需要运行: sudo chown -R $(whoami):staff /usr/local

于 2017-04-26T11:05:25.693 回答
5
  1. 运行compaudit它会给你一个它认为不安全的目录列表

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory

于 2019-12-15T06:40:47.720 回答
5

我的建议是运行 compaudit,然后只修复审计发现的目录的权限。确保识别的目录没有组或其他的写入权限。

于 2020-03-16T21:14:05.687 回答
3

今天早上,我系统中的一些软件包更新了,并给我留下了这个错误消息。我正在使用 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

切换131142返回后root,来自 zsh 的此错误消息消失了。

于 2019-10-15T18:38:31.157 回答
3

我在运行google-cloud-sdk安装脚本后遇到了这个问题,该脚本通过.zshrc.

遵循Homebrew 在 zsh 中配置完成的说明很有帮助。

此外,如果您在尝试加载这些补全时收到“zsh compinit: insecure directory”警告,您可能需要运行以下命令:chmod -R go-w "$(brew --prefix)/share"

于 2020-06-11T11:38:37.320 回答
3

我没有看到任何引用homebrew此主题信息的答案:https ://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh

要使 Homebrew 的完成功能在 zsh 中可用,您必须在初始化 zsh 的完成功能之前在 FPATH 上获取 Homebrew 管理的 zsh 站点功能。将以下内容添加到您的 ~/.zshrc 文件中:

if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh/site-functions:$FPATH

  autoload -Uz compinit
  compinit
fi

这必须在调用 compinit 之前完成。

这解决了我without手动更改所有权或其他方式的问题。

于 2021-03-19T16:34:18.933 回答
2

列出的解决方案都不适合我。相反,我最终卸载并重新安装了 Homebrew,这成功了。卸载说明可以在这里找到:http: //osxdaily.com/2018/08/12/how-uninstall-homebrew-mac/

于 2019-11-07T16:32:17.630 回答
1

y使用 向脚本的输入流发送一个字符compinit,以便自动回答忽略不安全的目录和文件并继续 [y] 或中止 compinit [n]?问题

echo "y" > source <GOOGLECLOUDSDK>/completion.zsh.inc

该解决方案在以下情况下很有用

  • 不能对文件夹进行所有权/访问权限更改
  • 当您无法使用 -u 选项删除警告时(可能是因为您自己没有明确调用“compinit”,而是由您调用的脚本调用)

备注:它不能解决问题,只会隐藏警告(与此处涉及删除“组写访问”或“将所有权更改为 root”的其他答案相反)。

于 2020-12-12T17:42:58.287 回答
1

我尝试了所有发布的解决方案,最后没有一个适用于我的特殊情况。但是,我要感谢那些向我指出所有权方向的用户,这是关于多个帐户的真正问题,而不是模式。我正在为具有类似设置(M1 + 两个帐户 + /opt/homebrew/share)的其他任何人发布此答案。

这是我的设置:

我有一个 M1,运行 macOS Monterey 12.0.1,使用 Homebrew。

我有两个帐户,一个管理员和一个普通用户(工作需要拆分)。我只有普通用户的不安全目录问题,两个用户都使用相同的自制设置,以下目录和文件受到问题的影响:

/opt/homebrew/completions/zsh/_brew
/opt/homebrew/share/zsh
/opt/homebrew/share/zsh/site-functions
/opt/homebrew/share/zsh/site-functions/_brew
/opt/homebrew/share/zsh/site-functions/_brew_services
/opt/homebrew/share/zsh/site-functions/_cargo
/opt/homebrew/share/zsh/site-functions/_gh
/opt/homebrew/share/zsh/site-functions/_git
/opt/homebrew/share/zsh/site-functions/_j
/opt/homebrew/share/zsh/site-functions/_lf
/opt/homebrew/share/zsh/site-functions/_task
/opt/homebrew/share/zsh/site-functions/_tldr
/opt/homebrew/share/zsh/site-functions/_vifm

改变模式什么也没做,最终解决问题的是将每个问题文件和目录的所有权更改为 root:admin,如下所示:

sudo chown root:admin /opt/homebrew/share/zsh/site-functions/*

最初,在问题出现之前,我的管理员用户拥有一切,因此所有权看起来像这样:usr :admin

这是 site-functions 目录现在的样子,没有问题:

lrwxr-xr-x  1 root admin  30 Jul 19 19:41 _brew ->../../../completions/zsh/_brew
lrwxr-xr-x  1 root admin  79 Aug 10 20:26 _brew_services -> ../../../Library/Taps/homebrew/homebrew-services/completions/zsh/_brew_services
lrwxr-xr-x  1 root admin  59 Nov  6 16:28 _cargo -> ../../../Cellar/rust/1.56.1/share/zsh/site-functions/_cargo
lrwxr-xr-x  1 root admin  53 Dec  2 23:37 _gh -> ../../../Cellar/gh/2.3.0/share/zsh/site-functions/_gh
lrwxr-xr-x  1 root admin  56 Nov 30 15:21 _git -> ../../../Cellar/git/2.34.1/share/zsh/site-functions/_git
lrwxr-xr-x  1 root admin  61 Oct 13 11:12 _j -> ../../../Cellar/autojump/22.5.3_3/share/zsh/site-functions/_j
lrwxr-xr-x  1 root admin  50 Oct 23 18:52 _lf -> ../../../Cellar/lf/26/share/zsh/site-functions/_lf
lrwxr-xr-x  1 root admin  57 Nov  6 16:28 _task -> ../../../Cellar/task/2.6.1/share/zsh/site-functions/_task
lrwxr-xr-x  1 root admin  57 Nov 18 01:45 _tldr -> ../../../Cellar/tldr/1.4.2/share/zsh/site-functions/_tldr
lrwxr-xr-x  1 root admin  56 Oct 13 11:11 _vifm -> ../../../Cellar/vifm/0.12/share/zsh/site-functions/_vifm
于 2021-12-11T15:33:31.517 回答