Ale*_*lex 179 zsh zsh-completion
它是什么意思,我该如何解决?
zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?
Run Code Online (Sandbox Code Playgroud)
运行compaudit
返回如下:
There are insecure directories:
/usr/local/share/zsh/site-functions
Run Code Online (Sandbox Code Playgroud)
cha*_*rit 261
这为我修好了:
$ cd /usr/local/share/zsh
$ sudo chmod -R 755 ./site-functions
Run Code Online (Sandbox Code Playgroud)
Credit:zsh邮件列表上的帖子
编辑:正如@biocyberman在评论中指出的那样.您可能还需要更新所有者site-functions
:
$ sudo chown -R root:root ./site-functions
Run Code Online (Sandbox Code Playgroud)
在我的机器上(OSX 10.9),我不需要这样做但是YMMV.
EDIT2:在OSX 10.11上,只有这个工作:
$ cd /usr/local/share/
$ sudo chmod -R 755 zsh
$ sudo chown -R root:staff zsh
Run Code Online (Sandbox Code Playgroud)
用户:staff是OSX上正确的默认权限.
Wen*_* Li 183
compaudit | xargs chmod g-w
Run Code Online (Sandbox Code Playgroud)
将采取行动,请参阅http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/
Bra*_*ndt 132
一旦您了解了原因,解决方案就变得简单而明确。
原因:输出的目录compaudit
具有组或其他人的写权限(世界可写);或者那些文件归root或你自己以外的其他人所有。
示例:就我而言,compaudit
给了我:
% compaudit
There are insecure directories:
/usr/local/share/zsh/site-functions
/usr/local/share/zsh
Run Code Online (Sandbox Code Playgroud)
如果我们列出我们拥有的那些文件/目录的权限(在这种情况下)
% 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
Run Code Online (Sandbox Code Playgroud)
现在我们很容易发现问题,不是吗?请注意zsh/
和zsh/site-functions
目录与其他目录的不同之处... zsh 不欣赏w
允许admin
组修改它们的“ ” 。
% chmod g-w /usr/local/share/zsh
% chmod g-w /usr/local/share/zsh/site-functions
Run Code Online (Sandbox Code Playgroud)
就是这样!你很高兴去。打开一个新终端,您应该不会再看到“ zsh compinit: insecure directories
”消息;)
Han*_*han 54
自 High Sierra 更新以来,这适用于我的 Mac。
删除组写入权限:
sudo chmod g-w /usr/local/share/zsh/site-functions
sudo chmod g-w /usr/local/share/zsh
Run Code Online (Sandbox Code Playgroud)
最好将更改限制在 zsh 目录中。
lin*_*ndy 46
大多数答案都带有解决方案,但是没有提到为什么会出现此警告.下面是ZSH的摘录compinit:
出于安全原因,compinit还会检查完成系统是使用非root用户还是当前用户拥有的文件,还是使用世界或组可写或不属于root用户或当前用户的目录中的文件.如果找到这样的文件或目录,compinit将询问是否应该真正使用完成系统.要避免这些测试并使所有文件都可以在不问的情况下使用,请使用选项-u,并使compinit静默忽略所有不安全的文件和目录使用选项-i.给出-C选项时,将完全跳过此安全检查.
因此,解决方案意味着修复以下一个(或全部):
将当前用户设置为cause中所有目录/子目录/文件的所有者:
compaudit | xargs chown -R "$(whoami)"
Run Code Online (Sandbox Code Playgroud)删除原因中文件的组/其他人的写权限:
compaudit | xargs chmod go-w
Run Code Online (Sandbox Code Playgroud)另一种方法是使用跳过这些检查
compinit -u
Run Code Online (Sandbox Code Playgroud)
但我并没有真正建议这一点,因为在地毯下隐藏问题只能在短期内解决问题.
num*_*er5 23
当我sudo -i
启动root shell时,我得到了相同的警告,@ chakrit的解决方案对我不起作用.
但是我发现-u
了compinit
作品的切换,例如你的.zshrc/zshenv或你打过的地方compinit
compinit -u
Run Code Online (Sandbox Code Playgroud)
注意:不建议用于生产系统
另见http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization
Fre*_*icK 18
我最近在 Catalina 上也收到了同样的警告。一个简单的解决方法是将它放在 .zshrc 的顶部
ZSH_DISABLE_COMPFIX=true
Run Code Online (Sandbox Code Playgroud)
Ber*_*vik 18
这个答案主要是我自己将来使用的参考,因为大多数答案都没有提供成熟的解决方案。这里是:
第一次运行:
compinit
Run Code Online (Sandbox Code Playgroud)
compaudit
如果以上不起作用,请使用
对于打印的每个路径,运行以下命令:
sudo chown $(whoami) PATH_HERE
sudo chmod -R 755 PATH_HERE
Run Code Online (Sandbox Code Playgroud)
简单的例子,假设运行 compinit 后打印的路径之一是“/usr/local/share/zsh”。然后:
sudo chown $(whoami) /usr/local/share/zsh
sudo chmod -R 755 /usr/local/share/zsh
Run Code Online (Sandbox Code Playgroud)
小智 17
此命令以正确的权限更新所有文件/文件夹:
compaudit | xargs chmod g-w
您不需要使用sudo
来更改所有者 -除非文件属于 root
(在 macOS BigSur 上测试)
Sud*_*hir 13
在过去的五月里,我一直遇到这个问题,尝试了一些方法,但没有成功。最后对我有帮助的是这个。获取不安全目录的列表,然后按如下所述设置所有目录的 chmod。
CLI# compaudit
There are insecure directories:
/usr/local/share/zsh
CLI# sudo chmod -R 755 /usr/local/share/zsh
Password:
Run Code Online (Sandbox Code Playgroud)
jpm*_*tin 12
MAC OS X 解决方案:
$ sudo chmod -R 755 /usr/local/share/zsh
$ sudo chown -R root:staff /usr/local/share/zsh
Run Code Online (Sandbox Code Playgroud)
还有“user:staff = OSX 上的默认 root 用户。
小智 11
我尝试了发布的所有解决方案,最终没有一个适合我的特定情况。然而,我想向那些为我指明方向的用户表示感谢,他们指出所有权是多个帐户的真正问题,而不是模式。我将这个答案发布给具有类似设置的其他人(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
Run Code Online (Sandbox Code Playgroud)
更改模式没有任何作用,最终解决问题的方法是将每个问题文件和目录的所有权更改为 root:admin,如下所示:
sudo chown root:admin /opt/homebrew/share/zsh/site-functions/*
Run Code Online (Sandbox Code Playgroud)
最初,在问题出现之前,我的管理员用户拥有一切,因此所有权看起来像这样:usr :admin
这就是站点功能目录现在的样子,没有问题:
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
Run Code Online (Sandbox Code Playgroud)
sul*_*rza 10
我的机器:
System Version: macOS 10.15.4 (19E287)
Kernel Version: Darwin 19.4.0
Run Code Online (Sandbox Code Playgroud)
所以这就是我所做的,
运行compaudit
,它会给你一个它认为不安全的目录列表。
运行sudo chmod -R 755 target_directory
(例如:sudo chmod -R 755 /usr/local/share/zsh
)
例子:
compaudit
Run Code Online (Sandbox Code Playgroud)
返回:
/usr/local/share/zsh
所以我跑
sudo chmod -R 755 /usr/local/share/zsh
Run Code Online (Sandbox Code Playgroud)
小智 10
以下工作于 M1
ProductName: macOS
ProductVersion: 11.1
BuildVersion: 20C69
% compaudit
/opt/homebrew/share
Run Code Online (Sandbox Code Playgroud)
将组权限从 775 更改为 755
% sudo chmod 755 /opt/homebrew/share
drwxr-xr-x 33 xenea admin 1056 Feb 2 01:28 share
Run Code Online (Sandbox Code Playgroud)
这两行对我来说是固定的。
sudo chown -R _user_:root /usr/local/share/zsh
sudo chown -R _user_:root /usr/local/share/zsh/*
Run Code Online (Sandbox Code Playgroud)
小智 9
我通过做修复了它
sudo chown -R root:staff /usr/local/share/zsh
Run Code Online (Sandbox Code Playgroud)
在我的情况下, share/ 中的其他目录也分配了“员工”组
在 Mojave 上,这成功了:
sudo chmod go-w /usr/local/share
接受的答案对macOs Sierra(10.12.1)不起作用.不得不从/ usr/local递归
cd /usr/local
sudo chown -R <your-username>:<your-group-name> *
Run Code Online (Sandbox Code Playgroud)
注意:您可以随身携带您的用户名whoami
和id -g
运行compaudit
它会给你一个它认为不安全的目录列表
sudo chown -R username:root target_directory
sudo chmod -R 755 target_directory
这是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
Run Code Online (Sandbox Code Playgroud)
我没有看到任何引用homebrew
有关此主题的信息的答案:https://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh
\n\n要使 Homebrew\xe2\x80\x99s 补全在 zsh 中可用,您必须在初始化 zsh\xe2\x80\x99s 补全工具之前在 FPATH 上获取 Homebrew 管理的 zsh 站点函数。将以下内容添加到您的 ~/.zshrc 文件中:
\n
if type brew &>/dev/null; then\n FPATH=$(brew --prefix)/share/zsh/site-functions:$FPATH\n\n autoload -Uz compinit\n compinit\nfi\n
Run Code Online (Sandbox Code Playgroud)\n\n\n这必须在调用 compinit 之前完成。
\n
without
这解决了我手动更改所有权或其他方式的问题。