运行Ruby块作为特定的OS用户?

Chr*_*fer 3 ruby ruby-on-rails

你可以作为不同的OS用户执行一段Ruby代码吗?

理想情况下,我想要的是这样的:

user("christoffer") do
  # do something
end
Run Code Online (Sandbox Code Playgroud)

可能?

Bri*_*per 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
Run Code Online (Sandbox Code Playgroud)

但请注意,它将要求您运行Ruby as root或setuid-to- root,这具有一些严重的安全隐患.