Ruby gem 带有 SUID 的可执行文件无法正常工作

Ruby gem executable with SUID not working as it should

如下图所示,我将 emerald_setup 脚本的所有权更改为 root:root 并设置了 SUID。

刚好我安装gem查看这个脚本,属于edvaldo:edvaldo(我的用户名),根本没有SUID!

我不知道到底发生了什么,但此脚本对 /etc/hosts 进行了更改,还创建了一些防火墙规则。这需要root权限。

那么,我的问题是:

当然我知道我可以要求用户使用

运行这个脚本
$ sudo emerald_setup

但这会导致我遇到另一个问题,因为 gem 可执行文件安装在用户 space 中并且它的位置不在超级用户的路径中并且设置它(猜猜是什么?!)需要超级用户特权。

有什么建议吗?

您不能将具有 suid 权限的 program/script 打包到 gem(甚至是 tarball)中,并在以普通用户身份解包时恢复这些权限。在某些时候,安装您的 gem 的任何人都将提供 root 访问的密码。你可以安排在安装 gem 时发生这种情况,方法是让 gem Rakefile 运行 的 :install 目标是一个脚本,该脚本会提示用户输入 su(do) 密码,然后不过,使用 sudo 运行 需要 运行 作为 root 的命令。