zsh compinit:不安全的目录

时间:2012-12-07 11:34:44

标签: zsh zsh-completion

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

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

27 个答案:

答案 0 :(得分:243)

这为我解决了这个问题:

$ 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),我不需要这样做但是YMMV。

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

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

另外,用户:staff是OSX的正确默认权限。

答案 1 :(得分:167)

compaudit | xargs chmod g-w

会做到这一点,请参阅http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/

答案 2 :(得分:61)

一旦您了解原因,解决方案就变得简单明确

  • 原因compaudit输出的目录具有 group others < / em>(可写入世界);或这些文件由 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'。

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

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

答案 3 :(得分:35)

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

  

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

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

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

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

    compaudit | xargs chmod go-w
    

另一种方法是使用

跳过这些检查
compinit -u

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

答案 4 :(得分:20)

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

但我发现-u的{​​{1}}切换有效,例如在你的.zshrc / zshenv或​​你调用compinit

的地方
compinit

注意:不建议用于生产系统

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

答案 5 :(得分:13)

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

compaudit | xargs chmod g-w

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

(在 macOS BigSur 上测试)

答案 6 :(得分:13)

我最近对卡塔琳娜州也有同样的警告。 一个简单的解决方法是将其放在.zshrc

的顶部
ZSH_DISABLE_COMPFIX=true

答案 7 :(得分:9)

在我的mac OS Catalina上运行此命令对我有用:

compaudit | xargs chmod g-w,o-w

答案 8 :(得分:7)

接受的答案对macOs Sierra(10.12.1)没有用。不得不从/ usr / local

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

注意:您可以使用whoamiid -g

的小组获取您的用户名

答案 9 :(得分:6)

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

首次运行:

compinit

对于每个打印的路径,请运行以下命令:

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

答案 10 :(得分:5)

我的机器:

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

此处更多link

答案 11 :(得分:5)

这是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

答案 12 :(得分:4)

我的建议是运行compaudit,然后仅对审核发现的目录上的权限进行修复。 确保标识的目录没有对组或其他目录的写权限。

答案 13 :(得分:4)

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

答案 14 :(得分:3)

MAC OS X解决方案:

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

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

答案 15 :(得分:3)

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

CLI# compaudit
There are insecure directories:
/usr/local/share/zsh
CLI# sudo chmod -R 755 /usr/local/share/zsh
Password:

答案 16 :(得分:2)

在 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

答案 17 :(得分:2)

这两行已经为我修好了。

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

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

答案 18 :(得分:1)

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

答案 19 :(得分:1)

运行google-cloud-sdk安装脚本后出现此问题,该脚本通过.zshrc中的条目将命令完成功能添加到shell中。

跟随Homebrew's instructions for configuring completions in zsh很有帮助。

此外,如果在尝试加载这些完成时收到“ zsh compinit:不安全的目录”警告,则可能需要运行以下命令:chmod -R go-w "$(brew --prefix)/share"

答案 20 :(得分:1)

我没有看到任何引用有关此主题的 import 'package:metv/presentation/routes/router.gr.dart' as app_router; ... final _appRouter = app_router.Router(); ... child: MaterialApp( title: 'Notes', themeMode: darkMode ? ThemeMode.dark : ThemeMode.light, theme: Themes().themeLight, darkTheme: Themes().themeDark, debugShowCheckedModeBanner: false, home: MaterialApp.router( routerDelegate: _appRouter.delegate(), routeInformationParser: _appRouter.defaultRouteParser(), ), ), 信息的答案:https://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh

<块引用>

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

homebrew
<块引用>

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

这为我解决了问题if type brew &>/dev/null; then FPATH=$(brew --prefix)/share/zsh/site-functions:$FPATH autoload -Uz compinit compinit fi 手动更改所有权或以其他方式。

答案 21 :(得分:0)

  1. 运行compaudit,它将为您提供它认为不安全的目录列表

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory

答案 22 :(得分:0)

列出的所有解决方案都不适合我。相反,我最终卸载并重新安装了Homebrew,从而达到了目的。卸载说明可在此处找到:http://osxdaily.com/2018/08/12/how-uninstall-homebrew-mac/

答案 23 :(得分:0)

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

答案 24 :(得分:0)

在更新High Sierra之后,这适用于我的Mac。

删除全局写访问权:

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

答案 25 :(得分:0)

我通过

修复了它
sudo chown root:staff -R /usr/local/share/zsh

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

答案 26 :(得分:0)

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

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

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

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

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

备注: >