2010-12-28 3 views
3

Ruby 코드 블록을 다른 OS 사용자로 실행할 수 있습니까?Ruby 블록을 특정 OS 사용자로 실행 하시겠습니까?

user("christoffer") do 
    # do something 
end 

가능한 : 내가 이상적으로 원하는 것은

이 같은 것입니다?

+0

이것은 POSIX 운영 체제 (Linux 또는 Mac)에서 실행 중입니까? 또한 왜이 작업을 수행 하시겠습니까? – Maz

+0

우분투 서버, 예. 몇 가지 다른 사용자를 위해 git-repositories로 작업하는 RoR 애플리케이션이 있습니다. push and pull하기 위해서는 git-scripts를 특정 사용자로 실행하여 해당 사용자의 ssh-keys를 사용할 수 있도록하십시오. – 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로 루비를 실행하거나 일부 심각한 보안 문제를 가지고있는, root setuid를 간으로해야됩니다.

+0

Windows에서 이와 비슷한 종류의 작업을 수행하려면 어떻게해야합니까? :) – Feytality

관련 문제