2010-12-28 7 views
3

Rubyコードのブロックを別のOSユーザーとして実行できますか?特定のOSユーザーとしてRubyブロックを実行しますか?

user("christoffer") do 
    # do something 
end 

可能:私は、理想的には、何をしたいです

はこのようなものでしょうか?

+0

これはPOSIXオペレーティングシステム(LinuxまたはMac)で動作しています。 また、なぜこれをやりたいのですか? – Maz

+0

Ubuntu Server、はい。私はいくつかの異なるユーザーのためのgitリポジトリで動作しているRoRアプリケーションを持っています。プッシュ&プルするには、git-scriptsを特定のユーザーとして実行して、そのユーザーのsshキーを使用できるようにします。 – Christoffer

答えて

7

このコードは、あなたが望むことができます。エラー処理はあなた次第です。 ;-)

require 'etc' 

def as_user(user, &block) 
    u = Etc.getpwnam(user) 
    Process.fork do 
     Process.uid = u.uid 
     block.call(user) 
    end 
end 

puts("caller PID = #{Process.pid}") 
puts("caller UID = #{Process.uid}") 
as_user "bmc" do |user| 
    puts("In block as #{user} (uid=#{Process.uid}), pid is #{Process.pid}") 
end 

ただし、それはあなたがrootとしてのRubyを実行する、またはいくつかの深刻なセキュリティ上の意味を持っている、root setuidをツーとすることを必要とすること。

+0

Windowsでも同じようなことができるのですか? :) – Feytality

関連する問題