Nova執行命令的原理

2021-08-01 02:57:15 字數 1111 閱讀 4366

要讓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

參考文獻:

shell指令碼執行的原理(source命令等)

shell英文意思是外殼,使用者可以通過shell和作業系統互動,通俗的講shell就是乙個直譯器,當我們輸入命令shell就解釋執行,shell有很多版本,我們一般使用的都是bash,在linux輸入一條命令可以檢視當前正在使用的shell echo shell 螢幕會出現 bin bashshe...

sqlmap之 os shell命令執行原理

最近也是在看sqlmap,感覺 os shell這個命令確實很厲害,但我並不知道它的原理,所以來研究一下 環境就是我本地搭的乙個有sql注入漏洞的乙個小demo 這是我們的demo環境 用sqlmap跑一下 發現確實有注入 試試 os shell命令 python2 sqlmap.py r 11.9...

使用echo 檢視命令成功執行的原理

在進行源 編譯,或者執行命令無法確認所執行的命令是否成功執行的情況下,我們都會使用 echo 來進行測試。如果返回值是0,就是執行成功 如果是返回值是0以外的值,就是失敗。之前在學習的時候只是機械的接受了這個事實,沒有考慮背後的原理。這二天在檢視資料的時候突然看到了 程序生命週期 的知識 當乙個程序...