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 我知道授予读取访问权限可以允许真正想要复制文件的用户从他们将使用的应用程序中复制和粘贴它们;我只是在寻找第一道防线。
编辑
为了更好地解释我的用例:
我认为重要的是要注意,这cat
不是我上面评论中的问题,而是 shell 重定向。您是否试图限制二进制文件或文本文件的复制?如果它是二进制文件,那么我相信您可以使用 rbash 解决问题(请参阅http://blog.bodhizazen.net/linux/how-to-restrict-access-with-rbash/)。
但是,如果是文本文件,我不确定如何阻止某人从本地终端复制。
我不确定任何通用的 SELinux 解决方案在这里会有帮助。您的读取文件的应用程序是否需要在任何地方写入数据?如果不是,并且这些文件只需要由您的应用程序读取,您可以只为您的应用程序的类型提供对您希望其读取的类型的文件的只读访问权限,而不是在任何地方对其进行写入。
我认为有关您的用例所需的确切权限的更多信息可能会有所帮助,对于模糊的答案感到抱歉。
更新 - 更具体的答案
我认为你可以在没有 SELinux 的情况下实现你想要的,因为这就是处理的事情(例如普通用户通过命令在 /etc/shadow 中更改密码passwd
):
chmod g+s
或chmod 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