我在Raspberry Pi 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 up。但是,其他程序开始破解。例如,每当我输入字母“'”时,gnome-terminal就会崩溃。因此,我必须重新启用写入权限,然后在我的compinit -u
中运行.zshrc
。
我想知道的是: 有没有更好的方法可以解决这个问题? 我不确定让它成为一个好主意使用不安全的目录。我的dotfiles repo托管here,我现在运行compinit -u
的文件是here。
答案 0 :(得分: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
,并在跟踪文件fpath
中查找zsh-x.log
。
可以安全地使用/tmp
下的目录,但前提是您安全地创建了目录。 /tmp
上的权限允许任何人创建文件,但用户只能删除或重命名自己的文件(这就是the t
at the end of the permissions means)。因此,如果安全地创建目录(例如使用mktemp -d
),则可以在fpath
中使用它。 compaudit
不够复杂,无法识别这种情况,并且无论如何它都没有足够的信息,因为目录是否安全取决于它是如何创建的。