Nova执行命令的原理

要让Nova在计算节点上执行一些需要root权限的命令,其原理是这样的:
首先基于sudo的原理,因为openstack-nova-compute服务是属于nova用户和nova组的,它们本身不具有root权限,因此需要sudo;
但是sudo去执行的是这样的一个命令”/usr/bin/nova-rootwrap /etc/nova/rootwrap.conf”,于是 /etc/sudoers 中需要有以下这一行(一般来说,这一行在安装了Nova之后都是有的):

nova ALL = (root) NOPASSWD: /usr/bin/nova-rootwrap /etc/nova/rootwrap.conf

因此想让Nova执行的命令,其实是作为上述命令的参数,比如要执行 systemctl restart sshd ,真正运行的应该是:

sudo /usr/bin/nova-rootwrap /etc/nova/rootwrap.conf systemctl restart sshd 

也就是说,在修改Nova代码的时候,写的就类似是:

os.system("sudo /usr/bin/nova-rootwrap /etc/nova/rootwrap.conf systemctl restart sshd")

为何需要这样一个命令加上一个conf文件呢?其道理也很简单:在 /etc/nova/rootwrap.conf 中定义了一个path,即 /usr/share/nova/rootwrap/compute.filters 文件,而该文件给出了可以以root权限执行的命令。于是不在这个列表中的命令将不会被执行了。

compute.filters 的示例如下:

[Filter]
# zram feature 
modprobe: CommandFilter, modprobe, root
mkswap: CommandFilter, mkswap, root
swapon: CommandFilter, swapon, root
swapoff: CommandFilter, swapoff, root

参考文献:
https://wiki.openstack.org/wiki/Rootwrap

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值