1

我知道在 shell 脚本中我可以这样做:

#!/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

是否有任何宝石可以帮助或实现这一点的任何想法?

提前致谢。

4

1 回答 1

2

不,UID/GID 只存在于进程级别;函数不能作为与进程的其余部分不同的用户(例如,root)运行。

虽然进程可以更改其 uid(使用set*id系统调用系列),但进程必须已经以 root 身份运行才能这样做。

于 2012-07-15T08:19:20.337 回答