linux - zsh compinit : insecure directories. Compaudit 显示/tmp 目录

标签 linux zsh zsh-completion

我在 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 闭嘴了。但是,其他程序开始崩溃。例如,每当我输入字母“l”时,gnome-terminal 就会崩溃。因此,我不得不重新打开写入权限,然后在我的 .zshrc 中运行 compinit -u

我想知道的是:有没有更好的方法来解决这个问题?我不确定让 compinit 使用不安全的目录是否是个好主意。我的点文件存储库托管 here ,我现在运行 compinit -u 的文件是 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,然后寻找 fpath 在跟踪文件 zsh-x.log 中。

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

关于linux - zsh compinit : insecure directories. Compaudit 显示/tmp 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36534044/

相关文章:

linux - 如何在 zshell 中以关键字拆分字符串并保存结果?

Zsh:智能自动完成功能?

python - Linux中的Python和python3有不同的pip吗?

c - 有什么最简单的方法可以在子进程中等待标志/事件更改吗?

linux - 为什么 "kill"命令在 bash 和 zsh 中的工作方式不同

shell - 我如何(从脚本)向 zsh 命令历史记录添加一些内容?

bash - 如何在 Zsh 缩写后移动光标?

autocomplete - 如何在 zsh 中动态选择完成功能?

xml - 在 bash 中基于 XML 内容验证获取内容

linux - 无法通过 SSH 连接到 Vagrant VM(不使用 vagrant ssh)第 2 部分