我想将用户的文件存储在加密文件系统中。每个用户都有自己的文件系统和自己的密钥。用户可以登录系统并挂载自己的文件系统。挂载后,即使是 root 也无法访问它们。
设置如下:
- LVM -> dm_crypt -> xfs。
- 当用户登录时,他会以所有者为他的方式挂载他的文件系统
- 他可以启动程序,他们将拥有与用户相同的权利,因此他们可以读取文件
但是我希望 root 不访问任何用户挂载的文件系统。首先,我想编写一个 VFS 内核模块(使用内核编译),如果 root 想要访问其他用户的文件,则劫持文件系统特定的命令。问题是 root 可以执行如下操作:
# su -secureuser
然后就可以读取已挂载的文件系统了。
我被告知要四处张望posix 文件功能,聚丙烯酰胺,SELinux,但是我不知道这些,而且我敢肯定,即使有这些东西,实现我的要求也一点也不方便。
这里还有一些,但它们即将限制整个 root 访问: http://www.centos.org/docs/4/4.5/Security_Guide/s2-wstation-privileges-noroot.html
你有什么想法吗?谢谢你的回答!:)
答案1
首先,您必须意识到,即使您限制了 root 帐户,管理员也可以访问物理服务器并从 Live CD 更改服务器配置。因此,您应该首先信任您的管理员。
我能看到一些解决方案。虽然都不是简单的解决方案,但它们是可行的。它们如下:
- 使用不同的绑定命名空间。使用 PAM 来配置它们。您可能需要开发一个 PAM 模块。
- SELinux(Michael Hampton 提到的)、AppArmor 或其他一些内核空间“应用程序防火墙”。
- Linux 容器,每个用户一个。我认为这是最简单的解决方案。
- 虚拟机(XEN、KVM),每个用户一个。
- LD_PRELOAD 库将检查 FS 操作(open、getdents)的访问。
- 开发一个执行过滤的内核模块(类似于 SELinux......)
请注意,您必须根据所选的解决方案单独限制根访问权限。您还需要限制对原始设备的访问。
答案2
你应该能够使用SELinux MLS(多级安全)策略作为基础,并根据您的需要进行调整。这是不是这是一个简单的任务,如果您还不了解 SELinux,那么您必须学习,或者找一个了解的人。
这也不是一个单人操作的政策,因为它将通常由 root 负责的安全角色分成了三个(或更多)方式,因此理想情况下应该有三个(或更多)人来管理系统的各个方面。
答案3
在 Unix/Linux 中,您无法限制 root 访问由用户挂载的文件。这根本行不通。