这自由桌面组织定义标准对于.desktop
文件。不幸的是它没有定义权限文件的(参见免费桌面邮件列表)并且软件是通过以下方式分发的
a) executable .desktop files
b) non executable .desktop files
c) mixed a) and b) in one software package.
这对于Linux 发行商,他们的目标是提供一个一致的系统。我想利用sx的广大受众,去了解一下
.desktop 文件有什么优点没有执行位?.desktop
如果文件系统允许,是否有任何原因导致所有文件都可执行?
是否存在已知的安全问题?是否有程序对可执行文件有困难.desktop
?
答案1
a 不一定设置可执行位的一个明显原因.desktop
是这些文件一开始就不是可执行的。文件.desktop
包含告诉桌面环境如何将程序与文件类型关联的元数据,但从未设计为自行执行。
然而,由于.desktop
文件间接告诉图形环境要执行什么,因此它具有启动其中定义的任何程序的间接能力,从而为漏洞利用打开了大门。为了避免恶意.desktop
文件导致恶意或不需要的程序的启动,KDE 和 gnome 开发人员引入了一种自定义 hack,它在某种程度上偏离了预期的 Unix 文件执行权限目的,以添加安全层。通过这个新层,.desktop
桌面环境仅考虑设置了可执行位的文件。
仅仅将非可执行文件(例如.desktop
文件)转换为可执行文件将是一种值得怀疑的做法,因为它会带来风险。没有 shebang 的非二进制可执行文件由 shell 执行(无论是 shellbash
还是sh
其他)。要求 shell 执行非 shell 脚本的文件会产生不可预测的结果。
为了避免这个问题,文件中需要存在一个 shebang .desktop
,并且应该指向旨在处理它们的正确命令,xdg-开放,就像 Thunderbird 在这里所做的那样:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Name=Thunderbird
GenericName=Email
Comment=Send and Receive Email
...
在这种情况下,执行该.desktop
文件将执行xdg-open
(以及您的桌面环境)认为正确的操作,可能只是使用浏览器或文本编辑器打开文件,这可能不是您所期望的。
答案2
类型 1 桌面文件的安全注意事项
桌面文件是文件管理器和窗口管理器使用的文本配置文件。如上所述,它们的格式是 由 FreeDesktop 标准指定:
KDE 和 GNOME 桌面环境都采用了类似的“桌面条目”格式,即描述如何启动特定程序、如何在菜单中显示等的配置文件。统一标准对更大的社区有利。得到所有各方的一致同意,以便两个环境之间的互操作以及实际上实现该规范的任何其他环境之间的互操作变得更简单。
这当前的 FreeDesktop 规范 列出了三种不同类型的桌面条目:
该规范定义了 3 种类型的桌面条目:(
Application
类型 1)、Link
(类型 2)和Directory
(类型 3)。为了允许将来添加新类型,实现应忽略类型未知的桌面条目。
(类型 1)桌面文件的安全隐患Application
已在 FreeDesktop 邮件列表上多次详细讨论:
我很久以前就注意到,freedesktop.org 指定的 .desktop 文件会打开一个进入 GNU/Linux 的窗口,其中包含各种病毒和木马。我认为这个问题之前已经讨论过。我发现问题尚未解决,因此我想建议一种解决方法。
传统上从互联网下载的文件不能简单地“点击”在unix/GNU/Linux下运行它们,必须授予执行权限(或者使用安装程序或提取存档)。
——萨姆·沃特金斯,“.desktop 文件、严重的安全漏洞、病毒友好性”,2006 年 4 月(LWN总结)
如果根据前述限制禁止启动,则用户可以选择自动使服务可执行,然后启动。虽然这部分让我有点不安,但我认为这是轻松允许现有桌面图标、面板启动器等继续工作的最佳选择。
——迈克尔·派恩,“.desktop 文件安全”,2009 年 2 月
据我所知,只有一个与桌面文件关联的 CVE: CVE-2017-14604。
3.23.90 之前的 GNOME Nautilus 允许攻击者使用 .desktop 文件扩展名来欺骗文件类型,如 .desktop 文件的 Name 字段以 .pdf 结尾但该文件的 Exec 字段启动恶意“sh -c”的攻击所证明的那样。 “ 命令。换句话说,Nautilus 没有提供 UI 指示来表明文件实际上具有潜在不安全的 .desktop 扩展名;相反,UI 仅显示 .pdf 扩展名。一个(稍微)缓解因素是攻击需要 .desktop 文件具有执行权限。解决方案是要求用户确认该文件应被视为 .desktop 文件,然后在metadata::trusted 字段中记住用户的答案。
如果您好奇的话,这里还有更多背景知识:
nautilus:CVE-2017-14604:.desktop 文件可以隐藏 Nautilus 中的恶意软件
Nautilus 中存在一个错误,可以将恶意脚本伪装成无害文档(例如 PDF 或 ODT),并在用户打开时执行。
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=860268
我创建的漏洞是一个名为
sgos_handbook.pdf.desktop
(尽管我可以命名它malware.desktop
并且它在 Nautilus 中看起来相同)的文件。这是里面的内容。请注意,名称设置为sgos_handbook.pdf
,图标 是gnome-mime-application-pdf
Subgraph 中 PDF 的默认图标 - 这两件事使得您在 Nautilus 中查看时无法辨别这不是 PDF。
https://micahflee.com/2017/04/breaking-the-security-model-of-subgraph-os/
以下是概念验证恶意桌面文件的简化版本:
[Desktop Entry]
Name=my-file.pdf
Exec=sh -c "xeyes"
Type=Application
Icon=gnome-mime-application-pdf
该图标看起来像一个 PDF 文件,但它不是打开 PDF 文件,而是运行一个 shell 脚本,该脚本运行xeyes
.当然,xeyes
也可能很容易是rm -rf $HOME
恶意的或类似的恶意行为。此后,通过要求用户在文件管理器显示自定义图标和名称之前主动信任桌面文件来解决此问题。
桌面文件的其他用途。
然而,桌面文件不仅仅用于关联 mime 类型和启动应用程序。
让我们从类型 3 开始,它们是桌面条目,但也是.directory
文件,不完全是.desktop
文件。
目录文件(类型 3)
目录文件(类型3)主要用于在分层菜单中创建类别;这就是Categories
类型 1 桌面文件中密钥的用途。例如,考虑以下示例/usr/share/desktop-directories/Utility.directory
:
[Desktop Entry]
Name=Accessories
Comment=Desktop accessories
Icon=applications-utilities
Type=Directory
X-Ubuntu-Gettext-Domain=gnome-menus-3.0
因此,如果桌面文件的Categories
键中包含“Utility”,它将显示在Utility
菜单子目录中。
Dolphin 文件管理器还使用目录文件,例如启用/禁用图像的缩略图预览。
据我所知,文件没有理由.directory
可执行。
链接型桌面文件(类型 2)
链接类型的桌面文件可以指向任意 URL。这使得在给定目录中存储相关链接或 URL 变得容易。
目前,大多数文件管理器要求链接类型的桌面文件在打开 URL 之前可执行。这是有道理的,因为尽管打开 URL 并不等同于运行任意代码,但
file://
URL 可以指向可执行文件,而且 URL 通常可能是恶意的。
文件网址
例如,在 Ubuntu 中,example-content
软件包在主目录中添加了一个与此类似的类型 2 桌面文件:
[Desktop Entry]
Type=Link
Name=Examples
Comment=Example content for Ubuntu
URL=file:///usr/share/example-content/
Icon=folder
在文件管理器中双击此桌面文件将导航到该/usr/share/example-content/
文件夹。
链接型桌面文件也可以指向文件。例如,下面是打开 LaTeX 包手册的一个hyperref
:
[Desktop Entry]
Type=Link
Name=hyperref manual
URL=file:///usr/share/doc/texlive-doc/latex/hyperref/manual.pdf
http/https 网址
链接类型的桌面文件也可用于在浏览器中打开 HTTP URL。例如,以下是链接到此页面的桌面文件:
[Desktop Entry]
Name=What is the advantage of .desktop files without executable bit set?
Type=Link
URL=https://unix.stackexchange.com/questions/373239/what-is-the-advantage-of-desktop-files-without-executable-bit-set
其他网址
链接型桌面文件可以包含任意URL;只要有一个为 URI 方案注册的处理程序,它们就可以工作。例如,桌面文件可能包含mailto:
URL:
[Desktop Entry]
Name=Email Linus Torvalds
Type=Link
URL=mailto:[email protected]
或smb://
网址:
[Desktop Entry]
Name=My Samba share
Type=Link
URL=smb://username@server/my-samba-share
或者像这样的特殊文件管理器 URL:
[Desktop Entry]
Name=Trash
Type=Link
Icon=user-trash-full
EmptyIcon=user-trash
URL=trash:///
或这个:
[Desktop Entry]
Name=Recent documents
Type=Link
Icon=document-open-recent
URL=recent:///