zsh compinit: 不安全的目录。Compaudit显示/tmp目录。

5

我在树莓派2(Raspbian Jessie)上运行zsh。 zsh compinit 抱怨 /tmp 目录不安全。 因此,我检查了目录的权限:

$ compaudit
There are insecure directories:
/tmp
$ ls -ld /tmp
drwxrwxrwt 13 root root 16384 Apr 10 11:17 /tmp

显然,任何人都可以在/tmp目录中执行任何操作。这是有道理的,因为它的目的就是如此。所以我尝试了this stackoverflow question上的建议。我还尝试了其他网站上类似的建议。具体而言,建议关闭该目录上的组写权限。由于根据ls -ld的权限设置情况,我还必须关闭“所有”写权限。所以:

$ sudo su
% chmod g-w /tmp
% chmod a-w /tmp
% exit
$ compaudit
# nothing shows up, zsh is happy

这解决了zsh的问题,但是其他程序开始出现问题。例如,每当我键入字母“l”时,gnome-terminal就会崩溃。因此,我不得不重新开放写权限,并在我的.zshrc中运行compinit -u。
我想知道:有没有更好的方法来解决这个问题?我不确定让compinit使用一个不安全的目录是一个好主意。我的dotfiles repo托管在这里,我现在运行compinit -u的文件在这里

为什么$fpath中会包含/tmp?它真的包含补全文件吗? - jackrabbit
这对我来说已经解决了。请使用此链接:Link - arglee
1个回答

4

首先,/tmp 上的原始权限是正确的。确保您已经正确地恢复了它们:ls -ld / tmp 必须以 drwxrwxrwt 开头。您可以使用 sudo chmod 1777 / tmp 设置正确的权限。/tmp应该可以被所有人写入,任何其他权限都很可能会导致问题。

compaudit 抱怨 fpath 中的目录,因此您的 fpath 中的一个目录形式为 /tmp/ ...(不一定是/tmp本身)。检查如何设置 fpath。通常,fpath 中的目录应仅为 zsh 安装目录的子目录和您的主目录中的位置。位于 /tmp 的子目录如果没有您做出异常操作,就不会出现在其中。

如果找不到添加到 fpath 的杂项目录,请运行 zsh -x 2>zsh-x.log,并在跟踪文件 zsh-x.log 中查找 fpath

如果您安全地创建了一个目录,那么在/tmp目录下使用该目录可能是安全的。 /tmp上的权限允许任何人创建文件,但用户只能删除或重命名自己的文件(这就是权限结尾处的t的含义)。因此,如果目录是安全创建的(例如使用mktemp -d),则可以安全地在fpath中使用它。 compaudit不足以识别这种情况,在任何情况下,它也没有足够的信息,因为目录是否安全取决于其如何创建。


谢谢!zsh -x 2>zsh-x.log 告诉我我的 fpath 加载了错误的文件。显然,我在循环 oh-my-zsh 的 $ZSH 变量而不是我的 $DOTFILES_ZSH 变量(就像我在其他地方做的那样)。我永远不会发现它。 - jo12bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接