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_u
seuser - 用户拥有自己的
PATH
只读权限,并且仅限于~/bin
,其中存在允许的(基本)二进制文件的符号链接 sudo
对于任何其他不在的命令,必须使用~/bin
/etc/sudoers
文件包含考虑目标用户/命令的角色和类型执行的规则,使用来SELinux_Spec
指定role
和type
sudoers 选项。