2010-12-28 13 views
3

Können Sie einen Ruby-Block als anderen Betriebssystembenutzer ausführen?Ruby-Block als spezifischer Betriebssystembenutzer ausführen?

Was ich im Idealfall wollen, ist so etwas wie dieses:

user("christoffer") do 
    # do something 
end 

möglich?

+0

Dies läuft auf einem POSIX-Betriebssystem (Linux oder Mac), oder? Auch, warum willst du das tun? – Maz

+0

Ubuntu Server, ja. Ich habe eine RoR-Anwendung, die mit Git-Repositories für ein paar verschiedene Benutzer arbeitet. Um zu pushen und zu ziehen, möchte ich Git-Skripte als einen bestimmten Benutzer ausführen, damit ich die ssh-Schlüssel dieses Benutzers verwenden kann. – Christoffer

Antwort

7

Dieser Code kann tun, was Sie wollen. Die Fehlerbehandlung liegt bei Ihnen. ;-)

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 

Beachten Sie jedoch, dass es erfordert, dass Sie Rubin als root oder als setuid-to root, laufen die einige schwere Auswirkungen auf die Sicherheit hat.

+0

Wie könnte ich das Gleiche in Windows machen? :) – Feytality

Verwandte Themen