2012-07-15 99 views
1

我知道在shell腳本我可以這樣做:在ruby中調用root權限的函數?

#!/bin/sh 

foo() { 
    rm -rf/
} 

foo # fail 
sudo foo # succeed 

使用Ruby實現這一點,我現在用一個單獨的腳本文件來存儲那些需要root權限的操作,然後在主腳本中調用像system(['sudo', 'ruby', 'sudo_operations.rb', 'do_rm_rf_root'])

如果我可以直接調用該函數而不分離出來,情況會好得多。例如,我不知道這樣的事情:

def sudo(&method_needs_root_privilege) 
    # ... 
end 

然後,我可以使用,如:

sudo do 
    puts ENV['UID'] # print 0 
    system('rm -rf /') # successfully executed 
end 

是否有任何寶石,可以幫助或實現此任何想法?

在此先感謝。

回答

2

否UID/GID只存在於進程級別;函數不能像其他用戶(例如root)一樣從其他進程運行。

儘管進程可能會更改其uid(使用系統調用系列調用),但進程必須已經以root用戶身份運行。