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