如何在Ruby中从用户检查root权限?

时间:2018-10-10 19:16:05

标签: ruby root sudo

我正在尝试编写一个需要root特权的程序,但是只要它运行,它就会引发权限错误。有没有一种更好的方法可以在没有输入sudo 'example_script.rb'的情况下以root身份运行程序,还有没有办法从ruby脚本内部请求'sudo'或检查使用该工具时用户是否以sudo的身份运行?程序?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用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}")

这是一个巨大的安全漏洞,因为没有任何外壳参数可以正确地转义。您需要确保对使用任何类型的任何用户数据所做的任何事情,无论您认为筛选的内容有多认真,都应极度怀疑。对于可以读取或写入文件的任何操作尤其如此。

答案 1 :(得分:1)

最好要求用户以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