没有设置可执行位的 .desktop 文件有什么优势?

Jon*_*ein 3 security permissions x11 files .desktop

freedesktop的组织定义了标准.desktop文件。不幸的是,它没有定义文件的权限(请参阅freedesktop 邮件列表)并且软件是随

a) executable .desktop files
b) non executable .desktop files
c) mixed a) and b) in one software package. 
Run Code Online (Sandbox Code Playgroud)

这对于旨在提供一致系统的Linux 发行商来说并不是很令人满意。我想用sx的广大观众,一探究竟

没有执行位的 .desktop 文件有什么优势?.desktop如果文件系统允许,是否有任何理由不让所有文件都可执行?

是否存在已知的安全问题?是否有程序对可执行.desktop文件有困难?

jll*_*gre 7

a.desktop不一定要设置可执行位的一个明显原因是这些文件最初并不打算执行。一个.desktop文件包含元数据,它告诉桌面环境如何将程序与文件类型相关联,但从来没有被设计为自己执行。

然而,作为一个.desktop文件间接告诉图形环境要执行什么,它具有启动其中定义的任何程序的间接能力,为漏洞利用打开了大门。为了避免恶意.desktop文件对启动恶意程序或有害程序负责,KDE 和 gnome 开发人员引入了一种自定义黑客,该黑客在某种程度上偏离了预期的 Unix 文件执行权限目的,以添加安全层。有了这个新层,.desktop桌面环境只考虑设置了可执行位的文件。

仅仅将非可执行文件(如文件)转换为可执行文件是.desktop一种有问题的做法,因为它会带来风险。没有家当非二进制可执行文件是由一个shell执行(无论是bashsh或其他)。要求 shell 执行一个不是 shell 脚本的文件会产生不可预测的结果。

为了避免这个问题,.desktop文件中需要有一个shebang,并且应该指向旨在处理它们的正确命令,xdg-open,例如Thunderbird在这里做的:

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Name=Thunderbird
GenericName=Email
Comment=Send and Receive Email
...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,执行.desktop文件将执行xdg-open(和您的桌面环境)认为正确的操作,可能只是使用浏览器或文本编辑器打开文件,这可能不是您所期望的。

  • 这是更长时间辩论的结果 [正如我在这里指出的](https://unix.stackexchange.com/questions/294952/should-usr-bin-env-xdg-open-be-included-in-desktop- files#comment517347_294952)(顺便说一句,该问题的公认答案完全错误......)并且它也在 GNOME 中实现(可能还有其他 DE,但我不知道)。但是,这些“安全措施”(即shebang 和_chmod+x_)不适用于来自上游并放置在`$XDG_DATA_DIRS/applications` 中的桌面文件,仅适用于放置在`$XDG_DATA_HOME/applications` 中的本地文件 (2认同)