SELinux - CentOSx86_64:用户命令限制

SELinux - CentOSx86_64:用户命令限制

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 Admin GUI' 没有提供任何选项来更改策略,因此我尝试直接更改 /etc/selinux/config。重启后,结果出现“内核崩溃”,因此我决定使用原始安装的策略(即目标策略)。

(2) 我从 SELinux 管理 GUI 创建了一项新策略,其策略类型为“最小终端用户角色”。对于“名称”,我将其命名为“limiteduser”。我没有选择要转换到的角色。我没有选择其他角色。我选择了“所有”TCP 和 UDP 端口进行绑定/连接。我没有向策略添加布尔值。运行生成的 .sh 后,创建了新的 SELinux 用户和角色。然后我为“limiteduser”分配了一个登录名。正如预期的那样,这给了我一个权限非常有限的用户。

(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 restricted),但这可能不那么安全。

我认为我需要定义一个自定义策略并在其中:

(a)允许用户执行其主目录中的文件。

(b)允许用户脚本转换为不同类型,以运行用户没有权限执行的命令。

使用 SELinux 管理 GUI(和我所知道的配置文件)我不知道如何做到这一点。

感谢您的任何帮助,您可以提供。

答案1

从 CentOS 6 的软件包版本开始,我目前正在实施的解决此问题的方法,其主要优点是审计功能(通过 sudo)、简单性(不需要 MLS/MCS)和限制,如下所示:

  • 为用户提供一个HOME目录pam_namespace
  • 为用户提供rbash登录 shell
  • HOME 是固定的noexec,ro,可以HISTFILE指向家外的其他地方的受控位置
  • 用户映射到user_useuser
  • 用户拥有自己的PATH只读权限,并且仅限于~/bin,其中存在允许的(基本)二进制文件的符号链接
  • sudo对于任何其他不在的命令,必须使用~/bin
  • /etc/sudoers文件包含考虑目标用户/命令的角色和类型执行的规则,使用来SELinux_Spec指定roletypesudoers 选项。

博客文章描述了一个用例。 线程指的是与 RHEL5/CentOS5 和 RHEL6/CentOS6 相关的状态

相关内容