openstack运行在普通用户身份下,但运行过程中发起相关指令时却需要管理员特权。
之前这一过程是通过sudo来实现的,通过sudoers文件的简单配置,通过sudo command1 .. 就可以使得command1命令运行在root权限下。
但是这一做法有一个缺陷:无法对权限做详细的控制,如命令的参数;
nova-rootwrapper
为了解决这一缺陷,openstack项目组设计了nova-rootwrapper工具。
发起相关命令时采用:
sudo nova-rootwrapper /etc/nova/rootwrapper.conf command1 ..
在sudo的配置文件中,只允许openstack以root的权限运行nova-rootwrapper命令
nova ALL = (root) NOPASSWD: /usr/bin/nova-rootwrap /etc/nova/rootwrap.conf *
nova-rootwrapper会根据自己的配置文件,读取相关filter,来检查当前运行的命令command1有没有运行权限,如果没有话则拒绝执行。
通过这种方式,将对sudo的配置,转移到了对nova-rootwrapper的配置,从而灵活度、自由度都得到了增加。
nova-rootwrapper的配置文件是由一个个的filter组成的,当前定义有如下的filter classes:
CommandFilter:
最基本的一种FilterClass,只检查当前命令本身,不对命令的参数进行检查。
有两个参数:可执行命令,以什么用户身份运行该命令
配置示例如下:
ietadm: CommandFilter, /usr/sbin/ietadm, root
RegExpFilter:
采用正则表达式检查命令的运行参数
ReadFileFilter:
检查命令读取的文件
read_initiator: ReadFileFilter, /etc/iscsi/initiatorname.iscsi
KillFilter:
检查命令接受的信号
kill_radvd: KillFilter, root, /usr/sbin/radvd
DnsmasqFilter:
dnsmasq进程相关的检查
dnsmasq: DnsmasqFilter, /usr/sbin/dnsmasq, root