我在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
使用它是fpath
。 compaudit
不够复杂,无法识别这种情况,并且在任何情况下它都没有足够的信息,因为目录是否安全取决于它是如何创建的。