在大型安装环境中使用rpm和yum进行应用程序安装

我们非常庞大的组织已经制定了托pipe应用程序的标准,该标准规定应用程序及其依赖的所有组件必须位于与操作系统本身不同的专用应用程序卷中。 例如,如果应用程序是用Perl编写的,那么我们需要在应用程序卷内维护一个独立的Perl实例。

其原因在于操作系统和应用程序所依赖的那些组件可能并经常具有冲突的版本要求,并且迫使应用程序维护其自己的资源使得修补操作系统变得更容易。 而且,它确保应用程序数据和日志不会被塞进基于OS的工具所在的位置(例如,这对于httpd尤其重要)。

此外,除非存在有效的文档logging技术原因,否则应用程序进程必须以非特权用户身份运行,而不能以root身份运行。 我们在Linux中已经有了解决方法,这样像Web服务器这样的进程可以作为非特权用户运行,并接受从特权端口(80和443)转发到他们正在监听的非特权端口的连接。

为了透视,我是公司的Unix / Linux SA安全专家,我与平台技术支持专家紧密合作,以维护和执行上面列出的标准。 我的责任的很大一部分是审查通过sudo,这是集中pipe理的特权访问请求。 我们的标准Linux是Red Hat,但Ubuntu和CentOS也被考虑用于云环境。

问题在于,我们目前正在受到来自应用程序团队的请求的轰炸,以便允许他们(通过sudo)使用rpm和yum来安装Linux应用程序,因为供应商要求这样做,并且无法提供任何其他方式来安装应用程序。 这与我们的标准以多种方式冲突:

  • rpm和yum工具必须以root权限运行。 这意味着他们所做的一切都以root身份运行,因此必须经常调整所得到的安装,使其作为非特权用户运行。

  • 包通常指定组件必须安装在根卷中,而不是在指定的卷下。 如果可以指定包树的根,通常供应商坚持认为它保持不变,因为它们只在包中指定的精确环境中进行testing。

  • 最后,rpm和yum从系统可用的存储库中提取依赖关系,虽然我们要求应用程序使用我们的Satellite存储库来获取Red Hat提供的任何东西,但是供应商通常会提供自己的必须包含在软件中的回购。

我的问题是,如何指定或限制在这样的环境中使用rpm和yum,以确保不会发生包冲突,并且可以安全地应用系统安全补丁,而不是完全禁止将这些工具用于应用软件我们到现在为止一直在做这些事情,并发现这是徒劳无功的)?

在解决问题之前,先谈谈贵公司的安全标准。 简而言之,他们很难合作,所以过时几乎不相关。

很明显,为什么他们很难合作,所以我不会再说这个。

至于已经过时了,显然他们没有考虑到虚拟化,Linuxfunction,容器,SELinux等现代技术,所有这些都有助于以更加优雅和可用的方式解决相同的安全问题。

举例来说,将httpd绑定到高端口,然后用iptables将stream量redirect到它,而不是简单地让它绑定,然后删除权限,就像默认情况下一样,界限偏执狂,几乎没有任何收获。 使用带有httpd的SELinux也会变得复杂,因为这种设置不能用于devisehttpd SELinux策略。

同样,只要盲目地要求将包装自己塞进/opt/usr/local没有任何好处,因为RPM已经保持了所需的分离,而不pipe包的安装位置(除非包被破坏,可能是这种情况与第三方供应商软件包,但这样会拒绝安装),并失去了标准合规性,可能使相关的SELinux策略不可用,并造成维修的噩梦。 红帽软件集合是按照这些思路devise的,尽pipe存在一些可用性问题,但通过这种devise构build您自己的软件包可能是您在解决实际问题时的一项权宜之计。

但是,我所看到的最大的问题是维护一个“大铁”式的服务器或服务器,每个人的应用程序并排运行。 这仅仅引入了自己的安全问题,这可能是这些“安全实践”的起源。 目前虚拟化已经相当成熟,简单地将应用程序分离到自己的虚拟机中,例如在RHEL 6或RHEL 7上使用KVM ,将消除大多数“安全实践” 的需要 。

顺便说一下,由于您几乎可以肯定有大量的应用程序,因此使用OpenStack创build私有云可能会成为您在短期到中期的最佳select。 这些将使用RHEL 7主机,并运行RHEL 7,6甚至5个客人,因为您可能有一堆仍然活着并踢的人。 它还将为您提供一个平台,让您可以安全地尝试新的应用程序和操作系统,并且可以由业务部门,部门等更轻松地分配资源。

如果虚拟化对于某些事情来说太重了,那么转移到容器(例如RHEL 7上的LXC / Docker )。 这些文件的重量要轻得多,除了应用程序包本身之外几乎可以被剥离,然后用自己的文件系统,networking和uid / gid命名空间进行隔离,从而将其从任何其他容器中切除,除非通过打开相应的防火墙。 将SELinux添加到KVM虚拟机或Linux容器中提供了第二层保护,只需点击一下即可打开。

另外,如果你开始提供OpenStack和/或Docker,那么你的公司就会有很多开发者永远爱你。

总之,现在是时候评估现代Linux发行版和它们提供的function,并根据这些function重新评估所有安全实践。

在许可方面,红帽现在提供无限制的虚拟化许可证,允许你运行无限制的RHEL虚拟机/容器,当然还有CentOS,它可以在99.9%的时间内代替RHEL。 所以这里没有任何借口。

你的问题最常见的答案是“不”。 在安装过程中,yum / rpm需要写入根特权文件夹位置

通常所有的二进制包都被编译为在系统级使用。你可以使用mock / pseudo shell来创buildchroottypes的环境,并在他们的homepace中安装软件。

正如Mark所提到的,推出自己的RPM将适用于当前的情况。

有几个参考看看

https://unix.stackexchange.com/questions/134181/building-rtmpdump-on-rhel-x86-without-yum-and-no-root-rights http://www.linuxquestions.org/questions/linux-software -2 / can-i-run-yum-without-root-privileges-592939 / http://yum.baseurl.org/wiki/RunningWithoutRoot