SELinux:我可以禁用某些文件的复制吗?

Jos*_* R. 5 permissions administration selinux file-copy

如果这太基本并且您想向我抛出 RTFM,请原谅我。我想防止用户复制某些文件,同时授予他们对相同文件的读取权限。我认为这是不可能的,直到我在 SELinux Wiki 中看到这个例子:

 allow firefox_t user_home_t : file { read write };
Run Code Online (Sandbox Code Playgroud)

所以我在想,是否可以为有问题的文件提供 0700 模式,并使用 SELinux 仅授予用户通常用于读取文件的应用程序的读取访问权限?

再次,如果这太基本,我很抱歉,只是我的日程安排很紧,我想尽快以一种或另一种方式(如果可能的话)给我的老板一个答案,我对 SELinux 一无所知,所以我担心自己阅读以确定是否可能会花费我太多时间。请注意,我本身并不反对阅读如果相关文档存在,我将非常感谢指向相关文档的指针。

所以基本上,我的问题是,有没有办法在 SELinux 中做到这一点,还是我在浪费时间追求这样的替代方案?

PS 我知道授予读取访问权限可以允许真正想要复制文件的用户从他们将使用的应用程序中复制和粘贴它们;我只是在寻找第一道防线。


编辑

为了更好地解释我的用例:

  • 有问题的文件是文本和二进制文件的混合。
  • 它们需要由专有商业软件读取:它们是电子仿真软件的仿真模型。
  • 这些模型本身是专有的,我们不希望与它们一起模拟的用户将它们泄露出去以供未经授权的使用。
  • 该软件只需要读取模型并从这些文件中运行一些脚本;它不会在任何地方写入它们的内容。
  • 简而言之,我只希望仿真软件对这些文件具有读取和执行访问权限,同时防止用户进行读取访问。

zje*_*zje 3

我认为重要的是要注意,这cat不是我上面评论中的问题,而是 shell 重定向。您是否试图限制二进制文件或文本文件的复制?如果它是二进制文件,那么我相信您可以使用 rbash 解决问题(请参阅http://blog.bodhizazen.net/linux/how-to-restrict-access-with-rbash/)。

但是,如果是文本文件,我不确定如何阻止某人从本地终端复制。

我不确定任何通用的 SELinux 解决方案在这里会有帮助。您的读取文件的应用程序是否需要在任何地方写入数据?如果不是,并且这些文件只需要由您的应用程序读取,您可以只为您的应用程序的类型提供对您希望其读取的类型的文件的只读访问权限,而不是在任何地方对其进行写入。

我认为有关您的用例所需的确切权限的更多信息可能会有所帮助,对于模糊的答案感到抱歉。


更新 - 更具体的答案

我认为你可以在没有 SELinux 的情况下实现你想要的,因为这就是处理的事情(例如普通用户通过命令在 /etc/shadow 中更改密码passwd):

  • 为您的商业软件创建一个单独的用户和/或组(可能已经完成)
  • 授予所述用户和/或组的文件只读访问权限
  • 确保普通用户无权访问这些文件
  • 使您的可执行文件 setuid 或 getgid (取决于您是否使用组或用户)例如chmod g+schmod u+s
  • 当用户运行应用程序时,他们现在将拥有与应用程序用户或组相同的权限,从而允许对所需应用程序中的那些特定文件进行读取访问。

UPDATE2 - 多个用户和组 如果您有多个应用程序和组,您很可能可以使用 来实现您正在寻找的功能sudo。许多人都知道它可以让您以 root 身份运行命令,但它的用处远远超出了这个示例。我不确定这是否是理想的设置,但这是实现您正在尝试的操作的一种方法。

您仍然可以使所有应用程序文件归该应用程序所有,但随后您可以为每组文件创建单独的组。您的/etc/sudoers文件或其中的文件/etc/sudoers.d/可能如下所示:

User_Alias    FILEGROUP1 = user1, user2
User_Alias    FILEGROUP2 = user3, user4
Cmnd_Alias    MYEDITOR = /usr/local/bin/myeditor, /usr/local/bin/mycompiler

FILEGROUP1    ALL=(:fileset1) NOPASSWD: MYEDITOR 
FILEGROUP2    ALL=(:fileset2) NOPASSWD: MYEDITOR 
Run Code Online (Sandbox Code Playgroud)

需要user1访问user2该组拥有的文件fileset1并且user3需要user4访问该组拥有的文件fileset2。您还可以使用组而不是用户。

用户可以通过编辑器sudo -g fileset1 /usr/local/bin/myeditor或类似的操作来访问他们的文件。

它可能有助于sudo -g为用户的必要命令创建一些包装脚本,特别是因为它听起来可能是一个图形应用程序。

更多细节:

http://www.garron.me/linux/visudo-command-sudoers-file-sudo-default-editor.html

https://serverfault.com/questions/166254/change-primary-group-with-sudo-u-g

http://linux.die.net/man/8/sudo