在 Linux 上安全运行专有软件

信息安全 操作系统 linux 沙盒
2021-08-30 20:35:50

作为一个夏季项目,我希望防止任何专有软件(例如我运行的许多游戏)访问我的个人文件。在看了很多沙盒之后,我决定像 chroot 这样的东西对我来说太复杂了,因为 simple=security。我创建了一个用户,所有这些应用程序都将以身份运行,并确保只有我的个人帐户组的成员(该用户不属于该组)才能访问我的文档。从表面上看,事情似乎在起作用(尤其是在我将其添加到视频组之后),但我认为询问仍然存在哪些安全问题是谨慎的做法。

  • 应用程序能否窃取 Control-Alt-Fn[1-12] 的控制权?
    • 应用程序可以读取另一个用户运行的另一个 x 服务器上发生的事情吗?
  • 如果我的专有软件帐户的密码较弱,这有关系吗?
  • 由于我的 /home/$USER 文件夹本身不授予任何不属于我的组或我的任何人的权限,因此其中的文件具有什么权限并不重要,不是吗?里面的文件名是读不出来的吧?
  • Wine 不会做任何会成为漏洞的时髦系统级的事情,不是吗?
  • /tmp 目录是否存在漏洞?
  • 是否有任何其他漏洞,在该帐户中运行的任何应用程序都可以用来访问我的文档?
  • 这种事情有什么好的做法?

我正在运行 debian 测试。任何意见,将不胜感激。

2个回答

无论如何,Chroot 不会为您提供任何安全性,它只是为非常特定的用例而设计的。请参阅Debian 不稳定的 chroot 安全问题chroot "jail" - 它是什么以及如何使用它?.

任何可以访问 X 服务器的应用程序都可以做很多事情。它可以窥探在同一服务器上显示窗口的其他应用程序。它可以记录按键。它可以重新绑定键。它可以将按键注入其他应用程序。它可以访问剪贴板。如果您在 X 服务器上运行不受信任的应用程序,而您从未以普通用户身份运行任何应用程序,则这不是问题,除非该应用程序可以消除您切换到另一个控制台的能力。

Wine 本身并不以提升的权限运行。X 服务器确实如此(它以 root 身份运行),所以如果其中存在漏洞,你就输了。正在努力避免以 root 身份运行 X 服务器,但这涉及将部分代码移动到以最高权限级别运行的内核驱动程序中。你总是需要信任你的内核。

任何应用程序都可以访问/tmp和中的文件/var/tmp如果这是一个问题,请不要将这些目录用于您自己的文件。设置每个用户的临时目录非常容易:安装libpam-tmpdir应用程序还可以访问您可能认为敏感的其他数据,例如系统上的用户列表、已安装程序的列表等。应用程序无法访问应用程序。

如果应用程序要求不高(特别是图形密集度不高),请在虚拟机的专用操作系统安装中运行它们。这是缺少专用硬件所能获得的最大隔离。拒绝该虚拟机网络访问,并且不要将任何敏感数据放入其中 - 这可以为您提供双重保护,防止侵犯隐私。

最安全的方法是在虚拟机 (VM) 中运行专有软件。这设置起来非常简单,您可以找到免费的虚拟机(例如,VirtualBox)。但是,由于您提到游戏,这可能不适用于游戏(在某些图形密集型游戏中可能会产生不可接受的性能下降)。

另一种可能性是在硬盘驱动器的单独分区上安装操作系统的第二个副本,然后在您想要运行专有应用程序时重新启动到您的“有趣”操作系统。但是,在实践中使用这可能太痛苦了。

如果您可以从用户(非 root)帐户安装软件,第三种可能性是为您的专有软件创建一个新的用户帐户,将软件安装为该帐户,然后从该帐户运行它。如果您使用 sudo 或“ssh -X”,您甚至可能不需要注销并重新登录(尽管由于 X 协议中的基本漏洞,这可能会导致一些安全性损失)。

第四种可能,如果您在支持 SELinux 的 Linux 发行版上运行,则使用 SELinux 的沙盒程序。参见,例如,这篇 Linux Foundation 文章,或Dan Walsh 的博客文章Dan Walsh 的幻灯片但是,我会警告您,这可能会更难使用。

如果您想了解一下,sandboxing.org列出了许多其他沙盒技术。出于您的目的,Plash(另请参见Plash wiki)可能是最复杂和最成熟的沙箱,因此如果您愿意,也可以尝试 Plash。

不幸的是,这一切都不是超级容易的。我希望操作系统能让这变得更容易,但目前恐怕有点痛苦。