zsh完成缓存安全模型损坏?

zsh完成缓存安全模型损坏?,zsh,zsh-completion,Zsh,Zsh Completion,这可能是zsh中的一个bug或错误功能,但我不太清楚,可能是误解 compinit(初始化完成的函数)运行compaudit,以强制执行一个安全模型,它将仅从$fpath中被视为“安全”的目录(由root或me拥有,不可全世界写等)加载完成函数。它将警告用户不安全的路径,并提示跳过或中止这些路径。那很好 它在~/.zcompdump处创建结果缓存。在AFAICT中,它仅手动失效(即删除) 我不完全清楚缓存中有什么,所以我不能说这是否真的是一个大的安全问题。但是,至少, COMPITE< 将考虑缓

这可能是zsh中的一个bug或错误功能,但我不太清楚,可能是误解

compinit
(初始化完成的函数)运行
compaudit
,以强制执行一个安全模型,它将仅从
$fpath
中被视为“安全”的目录(由root或me拥有,不可全世界写等)加载完成函数。它将警告用户不安全的路径,并提示跳过或中止这些路径。那很好

它在
~/.zcompdump
处创建结果缓存。在AFAICT中,它仅手动失效(即删除)

我不完全清楚缓存中有什么,所以我不能说这是否真的是一个大的安全问题。但是,至少, COMPITE< <代码>将考虑缓存是有效的,即使它是由不同的用户拥有的,从而避免加载对当前用户有效但不属于前一个用户的完成功能。 每当我使用
sudo-s
时,这种情况就会发生在我身上,我的zsh安装由我所有(OSX自制)。它写入不完整的完成缓存。然后我启动下一个shell,它加载损坏的缓存,并且没有看到任何完成


这是我的问题吗?ZSH的?Homebrews?

~/
是您主目录的快捷方式,为什么其他用户会拥有您主目录中的文件?他们将如何将完成的内容留在您的主目录中?“当我使用sudo时,它会在我的主目录(而不是root目录)中以root用户的身份写入一个新缓存。”“当然,
sudo\u USER
home
是唯一合理的选择,因为在多用户系统中可能有多个sudoer,让所有sudoer与root共享同一个缓存将是一个更大的问题。如果您不喜欢,请运行一个真正的登录根shell:
su-l
。让我们看看另一个问题:“它写入了一个不完整的完成缓存。然后下一个shell启动,它加载损坏的缓存,并且没有看到任何完成。”我不知道是否有失效机制,我也不想费心测试,但是,缓存是644,root作为所有者,所以即使zsh想要重写缓存,它也不能。。。您应该真正使用
compdump-d一些自定义路径
来避免冲突,并在homedir中消除一个额外的混乱。对我来说,自定义路径是
${XDG_DATA_HOME:-$HOME/.local/share}/zsh/compdump
@nfirvine sorin-ionescu在过去一年里在Prezto上几乎不活动,有很多合法的修复程序(有些来自我)没有合并。我建议你用叉子叉Prezto。@n他回复了一些bug修复PRs,甚至说了一些好话,但他们并没有合并。你明白了。
~/
是你主目录的快捷方式,为什么不同的用户会拥有你主目录中的文件?他们将如何将完成的内容留在您的主目录中?“当我使用sudo时,它会在我的主目录(而不是root目录)中以root用户的身份写入一个新缓存。”“当然,
sudo\u USER
home
是唯一合理的选择,因为在多用户系统中可能有多个sudoer,让所有sudoer与root共享同一个缓存将是一个更大的问题。如果您不喜欢,请运行一个真正的登录根shell:
su-l
。让我们看看另一个问题:“它写入了一个不完整的完成缓存。然后下一个shell启动,它加载损坏的缓存,并且没有看到任何完成。”我不知道是否有失效机制,我也不想费心测试,但是,缓存是644,root作为所有者,所以即使zsh想要重写缓存,它也不能。。。您应该真正使用
compdump-d一些自定义路径
来避免冲突,并在homedir中消除一个额外的混乱。对我来说,自定义路径是
${XDG_DATA_HOME:-$HOME/.local/share}/zsh/compdump
@nfirvine sorin-ionescu在过去一年里在Prezto上几乎不活动,有很多合法的修复程序(有些来自我)没有合并。我建议你用叉子叉Prezto。@n他回复了一些bug修复PRs,甚至说了一些好话,但他们并没有合并。你明白了。