神话还是现实:SELinux可以限制root用户吗?


20

我在某处(也许在LinuxCBT的SELinux课程中;但我不确定)读或听到过,有在线Linux服务器,并且还提供了root用户的密码。Linux服务器使用SELinux规则进行了加固,因此每个人都可以使用root用户登录,但不会对操作系统造成任何损害。

在我看来,这似乎是个神话,但我想确保:是否可以加固Linux机器(可能使用SELinux),从而即使root用户也不能对其进行特定的恶意活动?(例如:删除系统文件,清除日志文件,停止关键服务等)

这样的Linux盒子将是构建蜜罐的一个很好的起点。

编辑: 基于一个答案(现已删除)和一点谷歌搜索,我至少得到了两个指向此类加固Linux服务器的链接。不幸的是,两个服务器都关闭了。作为记录,我将在此处复制粘贴说明:

1)从http://www.coker.com.au/selinux/play.html

SE Linux机器上的免费root用户访问权限!

要以root用户身份访问我的Debian播放机ssh到play.coker.com.au,密码为...

请注意,如果要成功运行这些机器,则需要大量技能。如果必须询问是否应该运行一个,则答案为“否”。

这样做的目的是证明SE Linux可以在没有任何Unix权限的情况下提供所有必要的安全性(但是仍然建议您对真实服务器也使用Unix权限)。此外,它还使您有机会登录SE机器并查看其外观。

登录到SE Linux播放机时,请确保在登录前使用-x选项禁用X11转发或在/ etc / ssh / ssh_config文件中设置ForwardX11 no。另外,在登录之前,请确保使用-a选项禁用ssh代理转发或在/ etc / ssh / ssh_config文件中将ForwardAgent设置为no。如果您没有正确禁用这些设置,那么登录到游戏机将使您面临通过SSH客户端受到攻击的风险。

这是讨论这样的一个IRC频道,它是#selinuxirc.freenode.net

这是一个快速常见问题解答

2)来自http://www.osnews.com/comments/3731

Hardened Gentoo的目的是使Gentoo在高安全性,高稳定性的生产服务器环境中可行。该项目不是与Gentoo脱节的独立项目;它旨在成为一个Gentoo开发人员团队,专注于为Gentoo提供可提供强大安全性和稳定性的解决方案。该机器是Hardened Gentoo的SELinux 演示机器。它的主要用途是测试和审核SELinux集成和策略。


2
这里也有人声称。尽管从理论上讲肯定有可能,但是对我来说似乎很难(除非您将根用户限制得太多,以至于它无法做任何有用的事情)。在最好的情况下,编写SELinux规则以真正执行您打算要做的事情是困难的。
吉尔斯(Gilles)“所以,别再邪恶了”

4
使用最新的内核,非root用户可以在其中拥有UID 0的名称空间中创建。由于它们在顶级名称空间中不是UID 0,因此它们不会损害系统。与SELinux方法不同,这些方法本质上没有获得伤害的机会,在SELinux中,所有这些机会都必须被消除。请参阅内核:命名空间支持,并且完全分开两个帐户而不安装单独的操作系统?
吉尔斯(Gillles)“所以-别再邪恶了”

取决于您的图形驱动程序是否确实安全。
2015年

Answers:


17

现实:是的,SELinux可以限制root用户。

之所以可能这样做是因为SELinux实际上并不关心当前的Unix用户:它看到的只是称为上下文的补充元数据(其中包括域字段,其中包括字段),它使SELinux可以决定所请求的操作是否可以被授权或不。

通常认为是root用户的用户将在SELinux中映射为运行unconfined_tsysadm_tSELinux域的root Unix用户。它是经典的全功能万能root用户。

但是,可以完美地设置他的系统以生成运行受限用户user_tSELinux域的root shell(我的意思是root Unix用户shell)。根据SELinux策略,这种外壳与任何其他受限制的用户外壳没有什么不同,并且在系统上没有特殊特权,从而有效地限制了根用户。

Appart从实验的角度来看,这样做实际上是没有用的,但是类似的实践却在现实世界中找到了方法。一个经典的例子是数据库管理员需要能够停止/启动数据库守护程序,编辑配置文件等。如果没有SELinux,所有这些操作都将要求用户升级为root特权(即使通常只针对单个特权)。命令行sudo(例如通过工具),但是即使这样也可能会导致泄漏)。

由于SELinux的,我们可以给这个用户一个真正的root shell,但不是运行unconfined_tsysadm_t域它将运行dbadm_t域。这意味着他将比受限用户拥有更多特权,但是这些新特权将仅限于管理数据库服务器所需的特权:该用户将无法篡改其他服务,文件或运行其他管理命令严格要求做好他的工作。

同样,Web服务器和其他服务管理员也可以使其他root shell在同一系统上并行运行,每个人都将看到他们当前的Unix用户为root,但是由于使用SELinux,每个人实际上将拥有不同的特权,而这些特权仅限于是为了自己的需要


1

是的,有可能。但是不是很有用。

从理论上讲,您可以禁止根用户运行可能用于恶意目的的二进制文件,并通过SELinux之类的方法强制执行策略。但是,这带来了一个问题,即即使最初禁止root用户执行某项操作,他或她也可以使用其他方法来更改或删除SELinux策略。由于这个问题,您将必须有效地禁止root用户执行任何操作,这使其不太有用。


首先,我和你一样悲观。但是,获得了更多的知识之后,似乎没有必要“根本禁止root用户执行任何操作”。检查我编辑的答案,其中包括概念验证的链接和信息。不幸的是,它们不再可用。但似乎这些实现并没有严格的限制。
MS Dousti

-5

是否可以加固Linux机器(可能使用SELinux),以使即使root用户也不能对其进行特定的恶意活动?

这听起来很便宜,但是很简单:将用户root的uid更改为非零。只需进入/ etc / passwd和/ etc / shadow,将现有的uid = 0条目从“ root”修改为其他名称,然后添加一个名称为“ root”的uid,其uid不为零且未使用。

它没有达到目的。这也是一种声称任何人都可能具有“ root用户访问权限”而实际上并未提供升级特权的方法。


3
是的,但是root实际上该用户实际上不是root用户。问题是,是否可以以这种方式限制实际的超级用户。
terdon

听起来很危险-当然要用uid 0创建另一个帐户。但这与重命名root并重用名称“ root”相同。
Volker Siegel

该问题仅涉及“根”,它不一定等效于超级用户,即uid = 0。在极少数情况下,这是一个有用的区别。
Otheus

2
尽管如此,上下文清楚地表明OP正在询问是否root可以通过这种方式来限制超级用户,而不是某些用户名受限的随机用户。
terdon

1
好。至少,请编辑您的答案,并说明如何实现您的建议。由于其长度,它一直被标记为低质量。这就是为什么它越来越不赞成。
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.