1

私はシェルスクリプトでこれを行うことができることを知っています:

#!/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 に答える