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

jo1*_*bar 5 linux zsh zsh-completion

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

$ compaudit
There are insecure directories:
/tmp
$ ls -ld /tmp
drwxrwxrwt 13 root root 16384 Apr 10 11:17 /tmp
Run Code Online (Sandbox Code Playgroud)

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

$ sudo su
% chmod g-w /tmp
% chmod a-w /tmp
% exit
$ compaudit
# nothing shows up, zsh is happy
Run Code Online (Sandbox Code Playgroud)

这让 zsh 闭嘴。然而,其他程序开始崩溃。例如,每当我输入字母“l”时,gnome-terminal 就会崩溃。因此,我不得不重新打开写权限,然后compinit -u在我的.zshrc.

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

Gil*_*il' 4

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

\n\n

compaudit抱怨 中的目录fpath,因此您的目录之一fpath具有以下形式/tmp/\xe2\x80\xa6(不一定/tmp是其本身)。检查如何fpath设置。通常, 中的目录fpath应该只是 zsh 安装目录的子目录,并放置在您的主目录中。如果你没有做一些不寻常的事情,子目录/tmp就不会进入那里。

\n\n

如果您无法找到杂散目录添加到的位置fpath,请运行并在跟踪文件中zsh -x 2>zsh-x.log查找。fpathzsh-x.log

\n\n

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

\n