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

zsh compinit: insecure directories. Compaudit shows /tmp directory

我 运行ning zsh 在 Raspberry Pi 2 (Raspbian Jessie) 上。 zsh compinit 抱怨 /tmp 目录不安全。所以,我检查了目录的权限:

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

显然任何人都可以在 /tmp 目录中做任何事情。考虑到它的目的,这是有道理的。所以我尝试了 this Whosebug question 上的建议。我还在其他网站上尝试了类似的建议。具体来说,它建议关闭对该目录的组写权限。由于根据 ls -ld 的权限,我还必须关闭 'all' 写入权限。所以:

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

这让 zsh 闭嘴了。但是,其他程序开始中断。例如,每当我输入字母 'l' 时,gnome-terminal 就会崩溃。因此,我不得不重新打开写权限,并且 运行 compinit -u 在我的 .zshrc.

我想知道的是:有没有更好的方法来解决这个问题?我不确定这是个好主意让 compinit 使用不安全的目录。我的点文件存储库托管在 here, and the file where I now run compinit -u is here.

首先,/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的杂散目录,在trace文件中寻找fpathzsh-x.log.

使用 /tmp 下的目录 可以 是安全的,但前提是您安全地创建了它。 /tmp 的权限允许任何人创建文件,但用户只能删除或重命名他们自己的文件(这就是 the t at the end of the permissions means)。因此,如果一个目录是安全创建的(例如 mktemp -d),那么在 fpath 中使用它是安全的。 compaudit 不够复杂,无法识别这种情况,而且无论如何它都没有足够的信息,因为目录是否安全取决于它的创建方式。