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
有人知道为什么会出现此警告吗?
布拉萨德

3
@Blaszard提出有效问题(作为评论)一年后,“ linkyndy”在下面回答了该问题(作为回答)。
快乐的小孩子午睡

Answers:


341

这为我解决了:

$ 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
如果您没有根
怎么办

2
@kirill_igum by“ no root”的意思是“ no root access ”?如果是这样,则应将文件复制到您有权访问的文件夹中,修复.zshenv.zshrc使用新文件夹,并chmod在新文件夹上执行与我随该文件夹发布的相同操作。
chakrit

@kirill_igum请参阅我链接到的邮件列表消息。
chakrit

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

264
compaudit | xargs chmod g-w

可以解决问题,请参阅http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/


6
就是这个!删除分组写权限。谢谢
glarrain 2014年

8
更好的答案是,应注意compaudit可用于诊断和修复此类问题。
Wolph'3

7
请注意,您可能还必须将文件的所有者也更改为root用户-我必须:compaudit | xargs chown root
Brad Parks

4
这绝对是我的最佳解决方案。我用Homebrew安装了zsh和zsh-completions,因此显然不想将其更改为root拥有。
凯蒂·拉瓦利

2
compaudit | xargs chmod g-w一起ompaudit | xargs chown root为我工作,似乎让HomeBrew感到高兴。有人可以解释一下发生了什么。
nyxee

76

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

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

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

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

    compaudit | xargs chown -R "$(whoami)"
    
  • 删除组/其他文件的写许可权,原因是:

    compaudit | xargs chmod go-w
    

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

compinit -u

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


1
谢谢。我很惊讶人们会随机输入命令而没有真正理解问题。
shriek

3
那么多用户系统呢?在这种情况下,chown -R "$(whoami)"对于主目录之外的文件,/usr/local/将无法正常工作。根据文档,将文件设为根目录拥有所有权更有意义吗?
goetzc

我最喜欢这个答案。让我思考为什么这发生在我身上。原来是在将另一个用户添加到我的用户的主组之后发生的。$ HOME / .antigen / bundles下的目录归我的用户和我的组所有。因此,以我为例,将该用户从群组中删除即可解决此问题。
塞缪尔

25

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

但是我发现工作的-u切换compinit,例如在您的.zshrc / zshenv或​​您致电的地方compinit

compinit -u

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

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


那是唯一对我有用的感觉。我试图在Windows 10的linux子系统上使用带有compinit的zsh
denns

14

更新到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

这是在Mac Catalina上对我
有用

12

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

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

注意:您可以使用来获取您的用户名whoamiid -g


4
我在Sierra上也没有这样做,尽管在多用户系统上正确的用户/组应该是root:staff
Marshall Eubanks

5

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

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

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



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

切换后131142root,从zsh的此错误消息就走了。



2

我最近在卡塔利娜岛上也有同样的警告。一个简单的解决方法是将其放在.zshrc的顶部

ZSH_DISABLE_COMPFIX=true



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用户。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.