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
这对我来说是固定的:
$ 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。
编辑2:在OSX 10.11,只有这个工作:
$ cd /usr/local/share/ $ sudo chmod -R 755 zsh $ sudo chown -R root:staff zsh
此外,用户:员工是OSX上正确的默认权限。
compaudit | xargs chmod gw
将做的伎俩,见http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/
当我sudo -i
启动一个root shell的时候,我得到了相同的警告,@ chakrit的解决scheme对我不起作用。
但是我发现compinit
-u
开关工作,例如在你的.zshrc / zshenv或者你调用compinit
compinit -u
注意:不build议用于生产系统
另见http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization
大多数答案都带有一个解决scheme,但是不要提到为什么会出现这个警告。 这里是ZSH的compinit的摘录:
出于安全原因,compinit还会检查完成系统是否使用非root用户或当前用户所拥有的 文件 ,或者全局或组可写目录中的文件 ,或者非root用户或当前用户拥有的 文件 。 如果find这样的文件或目录,compinit会询问是否应该使用完成系统。 为了避免这些testing,并使所有find的文件都不用问,就使用选项-u,并使compinit静默地忽略所有不安全的文件和目录,使用选项-i。 这个安全检查在给出-C选项时完全跳过。
因此,解决scheme意味着修复以下一项(或全部):
-
将当前用户设置为原因中所有目录/子目录/文件的所有者:
compaudit | xargs chown -R "$(whoami)"
-
删除原因组中的文件/其他人的写入权限:
compaudit | xargs chmod go-w
另一种方法是通过使用跳过这些检查
compinit -u
但我并不真正暗示这一点,因为隐藏地毯下的问题只能在短期内解决问题。
接受的答案在macOs Sierra(10.12.1)上不适用于我。 必须从/ usr / local进行recursion
cd /usr/local sudo chown -R <your-username>:<your-group-name> *
注意:您可以通过使用id -g
来获取whoami
和您的用户名
在macOS Sierra上,您需要运行: sudo chown -R $(whoami):staff /usr/local
这两条线对我来说是固定的。
sudo chown -R _user_:root /usr/local/share/zsh sudo chown -R _user_:root /usr/local/share/zsh/*