4: def self.change_privilege(user, group=user)
5: puts "Changing process privilege to #{user}:#{group}"
6:
7: uid, gid = Process.euid, Process.egid
8: target_uid = Etc.getpwnam(user).uid
9: target_gid = Etc.getgrnam(group).gid
10:
11: if uid != target_uid || gid != target_gid
12: Process.initgroups(user, target_gid)
13: Process::GID.change_privilege(target_gid)
14: Process::UID.change_privilege(target_uid)
15: end
16: rescue Errno::EPERM => e
17: raise "Couldn't change user and group to #{user}:#{group}: #{e}"
18: end