openstack 通过限制每个模块的权限范围,可以最大限度减少被滥用的风险,提高系统安全性。 Privsep(Privilege Separation)是OpenStack的安全体系模块,是典型应用“最少特权原则”的例子。
最小特权原则
“最少特权原则”(Principle of Least Privilege)是信息安全中的一个重要原则。它要求在系统和应用设计中,每个模块(如进程、用户、程序)都应该仅被授予完成其任务所必需的最低特权。
该原则的主要目的是通过限制每个模块的权限,降低其被滥用的可能性。如果一个模块 obtained 更多的权限,那么在其遭到破坏时,攻击者也可以获得这些额外的权限。通过严格控制权限,可以实现“默认拒绝”的安全策略。
例如:
1. 一个进程应该只能访问它需要的文件、数据和资源。不应该授予它访问整个系统的权限。
2. 一个用户帐号应该只被授予完成其工作任务所需的最小权限。不应该提供root或管理员权限,除非是绝对需要的。
3. 一个程序模块应该只能访问它所需要的数据和资源。不应该提供对完整API或数据的未受限访问。
4. 在微服务架构中,每个服务应该只被授予完成其定义任务所需的最低权限。服务间不应该互相提供过多的权限。
总之,该原则要求权限应该是选择性的、最小化的、详细定义的、并且是暂时的。只有在需要时才提供,并且只提供完成特定任务所需的最低权限。
privsep 简介
OpenStack Privsep(Privilege Separation)是一个安全增强体系结构,它可以将Nova Compute服务拆分为具有不同特权级别的多个子服务。
其主要目的是:
1. 减少任意代码执行的风险
将Nova Compute拆分为多个子服务,每个子服务只具有执行其特定功能所需的最低权限,这样可以最大限度减少子服务被利用来执行恶意代码的风险。
2. 简化管理并增强安全性
每个子服务都可以独立部署、升级和管理,这减少了服务中断的可能性。这也可以使用不同的安全加固技术来配置每个子服务,最大限度的提高整体安全性。
3. 提供更细化的监控
拆分后的每个子服务都可以针对性的进行详细监控和告警,这可以更快速的发现和定位问题。
Privsep体系结构图:
+-----------------------+
| Nova Compute |
| |
+-----------+-----------+
|
|RPC
|
+-----------v-----------+
| nova-compute |
| (privileged parent)|
+-----------+-----------+
|
IPC +-----------v-----------+
+ | nova-compute-sysprep|
| (reduced privilege)|
IPC +-----------+-----------+
+ |
... | ...
|
整个Nova Compute服务被拆分为三个子服务:
- nova-compute:父服务,保留较高特权,负责服务入口、RPC通信和子服务管理。
- nova-compute-sysprep:子服务,特权降低,只具备准备实例运行所需最低权限,用于实例初始化工作。
- 其他子服务:可以根据需求定义更多子服务,每个子服务具备执行其工作所需的最低特权。
所以,OpenStack Privsep通过拆分Nova Compute为多个细化且权限最小的子服务,可以有效减少恶意代码执行的风险,简化管理提高安全性,并能够提供更为详细的监控,从整体上增强OpenStack环境的安全防护能力。
其目的在于实现权限最小化的理念,只授予每个子服务执行其工作所必须的最低权限,从而极大减少被入侵或利用的机会。
OpenStack作为云计算平台,其安全性能直接关系到所运营环境的安全。因此像Privsep这样可以从整体上增强安全防护的体系结构,对于提高OpenStack安全性来说具有重要意义。
Privsep-helper
OpenStack Privsep-helper是一个运行在Nova Compute节点上的agent,它可以为Privsep体系结构提供帮助。对应着这上面的 (privileged parent)模块。
在计算节点,可以看到如下进程:
启动日志:
其主要作用有:
1. 启动和监控Privsep子服务
Privsep-helper agent负责启动Nova Compute的各个子服务,如nova-compute-sysprep等,并持续监控子服务的运行状态。如果某个子服务异常退出,可以及时重启以保证Privsep体系架构的正常工作。
2. 管理子服务间的IPC通信
子服务之间需要通过IPC方式通信。Privsep-helper会在启动子服务时,配置好其socket文件,并设置好文件权限以使子服务间可以相互通信。
3. 提供日志收集
Privsep-helper可以收集各子服务的日志,并统一输出以方便管理员分析问题。它还可以将日志信息发送至下游日志管理系统进行存储和分析。
4. 安全加固
Privsep-helper在启动子服务时,可以为其指定特定的用户名、安全上下文等来进行加固。它还负责子服务间socket文件的权限控制。这些控制都可以增强Privsep体系结构的整体安全性。
所以,Privsep-helper为Privsep体系架构提供以下辅助功能:
1. 启动、监控各子服务,重启异常服务
2. 配置和控制子服务间的IPC通信
3. 收集各子服务的日志信息并统一输出
4. 为子服务指定安全参数如用户名和安全上下文等进行加固
5. 控制子服务间通信所需socket文件的权限
Privsep-helper的存在简化了Privsep体系架构的部署和管理,它为子服务的运行提供保障,并对其安全进行加固,还负责日志的收集工作。
配置
权限配置,/etc/sudoers.d/nova
Defaults:nova !requiretty
nova ALL = (root) NOPASSWD: /usr/bin/privsep-helper *
nova.conf 的配置,**有的版本不需要这么配置**
[privsep]
privsep_enabled = True
privsep_user = nova
privsep_group = nova
privsep_context = default
privsep_path = /var/lib/nova/privsep/nova-privsephelper.py
privsep_sock_path = /var/run/nova/privsep-helper.sock