SELinux - CentOSx86_64:用户命令限制
SELinux 是适合这项工作的工具吗?如果是这样,最好的方法是什么?
我想限制特定用户仅运行一些预定义命令/脚本列表(可能在他们的主目录中)。此外,用户脚本可能有权运行用户无法直接运行的命令(例如,用户脚本 test.sh 可以调用“ping localhost”,但用户无法直接从命令行调用“ping localhost”)。值得一提的是,我认为这些限制只需要一个用户帐户(我不需要为不同的用户帐户进行多个不同的配置)。
操作系统为CentOSx86_64,启用SELinux如下:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
我对 SELinux 很陌生,但已经尝试过以下方法:
(1) 我认为 MLS 政策可能是最适合的(此链接看起来很有希望:http://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html)对于这个任务,所以我首先尝试打开它。 “SELinux 管理 GUI”不提供任何选项来更改目标策略,因此我尝试直接更改 /etc/selinux/config。重新启动后,这以“内核恐慌”结束,因此我决定使用原始安装的策略(即有针对性的)。
(2) 在 SELinux 管理 GUI 中,我创建了一个策略类型为“最小终端用户角色”的新策略。对于“名称”,我将其称为“有限用户”。我没有选择它将过渡到的角色。我没有选择其他角色。我选择了“所有”TCP 和 UDP 端口进行绑定/连接。我没有向该策略添加布尔值。运行生成的 .sh 后,创建了新的 SELinux 用户和角色。然后我为“受限用户”分配了一个登录名。正如预期的那样,这给了我一个权限非常有限的用户。
(3) 最初,这个新用户可以在其主目录中创建脚本,但无法执行它。在我设置了一个名为“allow_guest_exec_content”的布尔值后,用户就可以执行该脚本了。最初,脚本只包含一个“echo”,但当我将其更改为 ping 时,它再次失败。为了允许这个新用户“ping”,我取消选择了布尔值 user_ping(尽管我认为这仅适用于 user_u 而不是 guest_u)。为了做我想做的事,我认为另一种选择可能是定义基于“user_u”的类型,然后删除权限(而不是采用我所采取的方法,即使用基于 guest_u 的类型并添加权限 - 但是我不这样做也不知道该怎么做!)。
(4) 许多在线资源讨论了 src 目录中的策略文件,但未安装该文件,而且我无法确定要安装哪个软件包来添加该文件。我安装了以下selinux相关软件包:
libselinux.x86_64 2.0.94-5.3.el6 installed
libselinux-devel.x86_64 2.0.94-5.3.el6 installed
libselinux-python.x86_64 2.0.94-5.3.el6 installed
libselinux-utils.x86_64 2.0.94-5.3.el6 installed
selinux-policy.noarch 3.7.19-126.el6_2.4 @updates
selinux-policy-targeted.noarch 3.7.19-126.el6_2.4 @updates
setools-console.x86_64 3.3.7-4.el6 @base
setools-devel.x86_64 3.3.7-4.el6 @base
setools-gui.x86_64 3.3.7-4.el6 @base
setools-libs.x86_64 3.3.7-4.el6 @base
setools-libs-java.x86_64 3.3.7-4.el6 @base
setools-libs-python.x86_64 3.3.7-4.el6 @base
setools-libs-tcl.x86_64 3.3.7-4.el6 @base
(5) 我研究了另一种有限的 shell,例如http://lshell.ghantoos.org/但我的公司要求要么使用 SELinux,要么使用操作系统已经提供的东西(例如 bash 限制),但这可能不太安全。
我认为我需要定义一个自定义策略,其中:
(a) 允许用户执行其主目录中的文件。
(b) 允许用户脚本转换为不同类型,以便运行用户没有权限的命令。
使用 SELinux 管理 GUI(以及我知道的配置文件)我不知道如何做到这一点。
感谢您的任何帮助,您可以提供。
答案1
正如您所建议的,rbash
或多或少提供了您想要的东西。它将执行限制为仅执行 PATH 中已有的可执行文件,并禁止更改运行时环境的大部分细节。但是当然,除非您对授予访问权限的程序非常小心,否则很容易有人破解(允许访问任何解释器,例如 perl 或 Python,然后一切就结束了)。
另一种传统解决方案通常涉及 chroot 和/或仔细选择的安装选项。您可以挂载文件系统noexec
或nosuid
,这会禁止这些功能。因此,通过安装任何可写文件系统noexec
,这将阻止执行不属于只读系统的任何程序。您可以将它们组合起来创建一个特殊的 chroot 环境,该环境密切控制可以执行的操作。