![有没有办法在表中指定哪些可执行文件(通过位置和哈希)可以在 Debian 上运行?](https://linux22.com/image/182700/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%9C%A8%E8%A1%A8%E4%B8%AD%E6%8C%87%E5%AE%9A%E5%93%AA%E4%BA%9B%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%EF%BC%88%E9%80%9A%E8%BF%87%E4%BD%8D%E7%BD%AE%E5%92%8C%E5%93%88%E5%B8%8C%EF%BC%89%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Debian%20%E4%B8%8A%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我想要一个允许在机器上运行的可执行文件表一切否则即使设置了可执行标志也不会执行。例如通过这样的配置文件:
|命令 |地点 |允许 |哈希 |访问选项 |----------------|----------------------------------------|---- ----|--------------------|-------------------- | youtube-dl | /usr/local/bin/youtube-dl | /usr/local/bin/youtube-dl | x| ... | firejail youtube-dl
(该表还可以定义允许调用软件的方式 - “访问选项” - 默认选项允许直接调用,否则仅允许某些命令或授权软件列表来启动它。)
我认为从安全角度来看,这对于授权软件在机器上运行并通过哈希确保其完整性的机制是有意义的。更具体地说:这也可以散列全部软件具有的依赖性(表中的散列可以例如是软件的所有相关散列的散列),从而确保软件的完整性。
Debian 是否存在类似的东西(可能作为 Linux 内核的一部分;它需要有 Linux/GNU/DE 所需的所有软件的默认条目,以便它可以正确启动)?
答案1
- 说到验证文件:
有
- fs-真实性https://www.kernel.org/doc/html/latest/filesystems/fsverity.html
- dm-验证https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html
问题是我不知道有任何手册/操作方法来设置前者,而后者据我所知仅在 Android 中实现。
然后还有AIDE、Tripwire(不再开发)之类的工具,穆格西,萨姆哈恩但它们大多都是监视器,而不是具有根据其哈希和停止/允许应用程序运行所需的能力的东西。
最后,让我们考虑一下您将在其中存储文件哈希值的这个文件。我猜你想这样做的原因是为了避免运行在你背后修改过的软件,但如果发生这种情况,攻击者就完全破坏了你的系统,并且可以更改你存储所有数据和所有内容的文件的内容。保护已变得无效,这意味着不幸的是,fs-verity/dm-verity 是唯一的出路,但两者都需要只读存储和深度系统锁定,因为攻击者可以以读写模式重新安装您的存储,并再次使您的保护变得无用。
- 至于只允许运行特定的应用程序:
我不知道有任何现成的解决方案,但这可以通过以下方式实现
将所需的目录权限从 755 更改为 750,然后将所有允许的应用程序复制到用户可访问的特殊路径,例如 /usr/local/allowbin
编写一个 sudo 包装器,它将根据您指定的权限文件检查运行的应用程序,然后根据该文件允许/拒绝其执行。
创建一个chroot监狱。
TLDR 据我所知,桌面 Linux 还没有现成的解决方案来解决您的任何问题。