All Projects → TwilightCoders → rubysu

TwilightCoders / rubysu

Licence: MIT license
Give Ruby objects superuser privileges

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to rubysu

ElevenClock
ElevenClock: Customize Windows 11 taskbar clock
Stars: ✭ 1,494 (+9860%)
Mutual labels:  system
UT GameEventSystem
A flexible event system in Unreal Engine 4
Stars: ✭ 33 (+120%)
Mutual labels:  system
ansible-role-dns
Install and configure dns on your system.
Stars: ✭ 39 (+160%)
Mutual labels:  system
hidden-gems
Ranking of Steam games which favors "hidden gems". Featured in PC Gamer.
Stars: ✭ 37 (+146.67%)
Mutual labels:  gems
dotfiles
Cross platform home directory settings
Stars: ✭ 17 (+13.33%)
Mutual labels:  sudo
react-figma-ui
🏗️ React implementation for figma-plugin-ds
Stars: ✭ 25 (+66.67%)
Mutual labels:  system
monos
cocos (code commons) - auto-include quick-starter prelude & prolog
Stars: ✭ 54 (+260%)
Mutual labels:  gems
laravel-gamify
Laravel Gamify: Gamification System with Points & Badges support
Stars: ✭ 35 (+133.33%)
Mutual labels:  system
ISOKIT
Windows 10 Professional - Full Strip & Lockdown Edition
Stars: ✭ 35 (+133.33%)
Mutual labels:  system
sasutils
Serial Attached SCSI (SAS) Linux utilities and Python library
Stars: ✭ 36 (+140%)
Mutual labels:  system
mir-cpuid
BetterC CPU Identification Routines
Stars: ✭ 25 (+66.67%)
Mutual labels:  system
mongodb-backup-manager
🌿 A Full-stack MongoDB Backup System.
Stars: ✭ 42 (+180%)
Mutual labels:  system
pam pwnd
A PAM module to test passwords against previous leaks at haveibeenpwned.com
Stars: ✭ 33 (+120%)
Mutual labels:  sudo
suex
execute commands as another user
Stars: ✭ 39 (+160%)
Mutual labels:  sudo
KubeArmor
Cloud-native Runtime Security Enforcement System
Stars: ✭ 434 (+2793.33%)
Mutual labels:  system
gem-check
GemCheck: Writing Better Ruby Gems Checklist
Stars: ✭ 77 (+413.33%)
Mutual labels:  gems
sinator
Sinatra application generator
Stars: ✭ 19 (+26.67%)
Mutual labels:  gems
oskrhq-design-system
A mostly reasonable although opinionated approach to building responsive Digital Interfaces sharing the same anatomy.
Stars: ✭ 60 (+300%)
Mutual labels:  system
win-sudo
Add `sudo` command to Git Bash
Stars: ✭ 145 (+866.67%)
Mutual labels:  sudo
toolkit
some useful library of the php
Stars: ✭ 15 (+0%)
Mutual labels:  system

Gem VersionBuild Status Maintainability Test Coverage

Ruby Sudo

Give Ruby objects superuser privileges.

Based on dRuby and sudo.

Only tested with MRI. (2.3, 2.4 and 2.5)

Usage

Your user must be allowed, in /etc/sudoers, to run ruby and kill commands as root.

A password may be required from the console, depending on the NOPASSWD options in /etc/sudoers.

Spawns a sudo-ed Ruby process running a DRb server. Communication is done via a Unix socket (and, of course, permissions are set to 0600).

No long-running daemons involved, everything is created on demand.

Access control is entirely delegated to sudo.

Application Code

Let's start with a trivial example:

require 'my_gem/my_class'
require 'sudo'

obj   = MyGem::MyClass.new

# Now, create a Sudo::Wrapper object:
sudo  = Sudo::Wrapper.new

# 'mygem/myclass' will be automatically required in the
# sudo DRb server

# Start the sudo-ed Ruby process:
sudo.start!
sudo[obj].my_instance_method
sudo[MyClass].my_class_method

# Call stop! when finished, otherwise, that will be done
# when the `sudo` object gets garbage-collected.
sudo.stop!

A convienient utility for working with sudo is to use the run method and pass it a block. Run will automatically start and stop the ruby sudo process around the block.

require 'fileutils'
require 'sudo'

Sudo::Wrapper.run do |sudo|
  sudo[FileUtils].mkdir_p '/ONLY/ROOT/CAN/DO/THAT'
end
# Sockets and processes are closed automatically when the block exits

Both Sudo::Wrapper.run and Sudo::Wrapper.new take the same named arguments: ruby_opts (default: '' ) and load_gems (default: true).

If you'd like to pass options to the sudo-spawned ruby process, pass them as a string to ruby_opts.

If you'd like to prevent the loading of gems currently loaded from the calling program, pass false to load_gems. This will give your sudo process a unmodifed environment. The only things required via the sudo process are 'drb/drb', 'fileutils', and of course 'sudo'.

Todo

sudo has a -A option to accept password via an external program (maybe graphical): support this feature.

Credits

Author and Copyright

Guido De Rosa (@gderosa).

See LICENSE.

Contributors

Dale Stevens (@voltechs)

Robert M. Koch (@threadmetal)

Other aknowledgements

Thanks to Tony Arcieri and Brian Candler for suggestions on ruby-talk.

Initially developed by G. D. while working at @vemarsas.

Contributing

  1. Fork it ( https://github.com/gderosa/rubysu/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].