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

我在Raspberry Pi 2上运行zsh(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目录下做任何事情。 这是有道理的,因为它的目的。 所以我尝试了这个stackoverflow问题的build议。 我也在其他网站上尝试了类似的build议。 特别是,它build议closures该目录的组写权限。 由于根据ls -ld查看权限的方式,我不得不closures“全部”写入权限。 所以:

 $ sudo su % chmod gw /tmp % chmod aw /tmp % exit $ compaudit # nothing shows up, zsh is happy 

这closureszsh了。 但是, 其他scheme开始打破 。 例如,只要input字母“l”,gnome-terminal就会崩溃。 因此,我必须重新打开写入权限,只需在我的compinit -u中运行compinit -u

我想知道的有没有更好的方法来解决这个问题? 我不确定让compinit使用不安全的目录是一个好主意。 我的dotfiles回购托pipe在这里 ,我现在运行compinit -u的文件在这里 。

首先, /tmp上的原始权限是正确的。 确保你已经恢复正确: ls -ld /tmp必须以drwxrwxrwt 。 你可以使用sudo chmod 1777 /tmp来设置正确的权限。 /tmp应该是每个人都可写的,任何其他的权限很可能会打破东西。

compaudit抱怨fpath中的目录,所以你的fpath中的一个目录的形式是/tmp/… (不一定是/tmp本身)。 检查如何设置fpath 。 通常, fpath的目录应该只是zsh安装目录的子目录,并放在您的主目录中。 /tmp一个子目录不会在那里没有任何不寻常的东西。

如果无法找到将fpath目录添加到fpath ,请运行zsh -x 2>zsh-x.log ,然后在跟踪文件zsh-x.log查找fpath

/tmp下使用一个目录是安全的,但只有在安全的情况下才能使用它。 /tmp上的权限允许任何人创建文件,但用户只能删除或重命名他们自己的文件(这是权限结束时的意思 )。 所以如果一个目录是安全创建的(例如使用mktemp -d ),那么在fpath使用它是fpathcompaudit不够复杂,无法识别这种情况,并且在任何情况下它都没有足够的信息,因为目录是否安全取决于它是如何创建的。