【问题标题】:zsh compinit: insecure directories. Compaudit shows /tmp directoryzsh compinit:不安全的目录。 Compaudit 显示 /tmp 目录
【发布时间】:2016-04-10 18:49:34
【问题描述】:

我在 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 使用不安全的目录是否是个好主意。我的 dotfiles 存储库托管在 here,而我现在运行 compinit -u 的文件是 here

【问题讨论】:

  • 为什么 /tmp 甚至在您的$fpath 中?它实际上是否包含完成文件?
  • 这已为我修复使用此Link

标签: linux zsh zsh-completion


【解决方案1】:

首先,/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,并在跟踪文件zsh-x.log 中查找fpath

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

【讨论】:

  • 谢谢! zsh -x 2>zsh-x.log 告诉我,我为我的 fpath 加载了错误的文件。显然,我循环的是 oh-my-zsh 的 $ZSH 变量而不是我的 $DOTFILES_ZSH 变量(就像我在其他任何地方所做的那样)。永远不会抓住它。
猜你喜欢
  • 2021-11-14
  • 2012-11-25
  • 2019-07-27
  • 2021-04-05
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2021-04-21
  • 2021-01-04
相关资源
最近更新 更多