# Status of getresuid? Dropping privilege temporarily

**URL:** <https://www.ruby-forum.com/t/status-of-getresuid-dropping-privilege-temporarily/107782>\
**Category:** Ruby\
**Created:** [June 26, 2007, 5:55am UTC](https://www.ruby-forum.com/t/status-of-getresuid-dropping-privilege-temporarily/107782 "2007-06-26T05:55:15Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![amin1426](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/4da419/32.png) [@amin1426](https://www.ruby-forum.com/u/amin1426)\
**Post date:** [June 26, 2007, 5:55am UTC](https://www.ruby-forum.com/t/status-of-getresuid-dropping-privilege-temporarily/107782/1 "2007-06-26T05:55:15Z")

</div>

I wanted to reliably temporarily or permanently drop privileges from  
Ruby so I tried porting the code in …

[http://www.cs.berkeley.edu/~daw/papers/setuid-usenix02.pdf](http://www.cs.berkeley.edu/~daw/papers/setuid-usenix02.pdf)

But rapidly found that…  
a) They strongly recommend you use setresuid/getresuid  
b) Ruby strangely enough has setresuid but not getresuid.

Any idea why?

Anyhoo, here is a crude sudo based hack around…

module Privilege

```
def Privilege::drop_privilege_temporarily(&block)
   # Doesn't look like we've been sudone... So do nothing...
   if ENV.has_key? "SUDO_UID"
      block.call
      return
   end

   sudo_uid = ENV["SUDO_UID"].to_i

   current_uid = Process::Sys::geteuid

   begin
      Process::Sys::seteuid( sudo_uid)
      block.call

   ensure
      Process::Sys::seteuid( current_uid)
   end
end

```

end

# p Process::Sys::geteuid

# 

# 

# Privilege::drop\_privilege\_temporarily do

# p Process::Sys::geteuid

# end

# 

# p Process::Sys::geteuid

# 

John C. Phone : (64)(3) 358 6639  
Tait Electronics Fax : (64)(3) 359 4632  
PO Box 1645 Christchurch Email : removed\_email\_address@domain.invalid  
New Zealand
