Как проверить наличие прав пользователя root в Ruby? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь написать программу, требующую прав суперпользователя, но всякий раз, когда она запускается, возникает ошибка разрешения.Есть ли лучший способ запускать программы с правами root без ввода sudo 'example_script.rb' Кроме того, возможно ли способ запросить `sudo 'из скрипта ruby ​​или проверить, работает ли пользователь как sudo при использовании программы?Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Лучше попросить пользователя запустить скрипт от имени пользователя root или использовать sudo, чем неявно пытаться получить эту привилегию в скрипте.Вот подход, который просит пользователя запускаться от имени пользователя root или использовать sudo:

require 'etc'

if Etc.getpwuid.uid != 0
  puts "You need to run this script as root or using sudo"
  exit 1
else
  puts "Running in privileged mode"
  # Do stuff only superuser can do
end
0 голосов
/ 10 октября 2018

Вы можете проверить с помощью Process.uid:

case (Process.uid)
when 0
  # We're root!
else
  $stderr.puts("You must run this with root privileges via sudo")
end

Не забывайте быть очень супер осторожными при написании сценариев, запускаемых от имени пользователя root.Рассмотрим код, подобный следующему:

system("convert #{image_path} #{target_path}")

Это серьезная уязвимость безопасности, поскольку ни один из аргументов оболочки не экранирован должным образом.Вам нужно будет убедиться, что все, что вы делаете с любыми пользовательскими данными, независимо от того, насколько тщательно вы думаете, что вы их просмотрели, воспринимается крайне подозрительно.Это особенно верно для любых операций, которые могут читать или записывать файлы.

...