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权限。
那么,我的问题是:
在这个 SUID 案例中我错过了什么?
我必须如何确保 gem 可执行文件设置了 SUID?
当然我知道我可以要求用户使用
运行这个脚本
$ sudo emerald_setup
但这会导致我遇到另一个问题,因为 gem 可执行文件安装在用户 space 中并且它的位置不在超级用户的路径中并且设置它(猜猜是什么?!)需要超级用户特权。
有什么建议吗?
您不能将具有 suid 权限的 program/script 打包到 gem(甚至是 tarball)中,并在以普通用户身份解包时恢复这些权限。在某些时候,安装您的 gem 的任何人都将提供 root 访问的密码。你可以安排在安装 gem 时发生这种情况,方法是让 gem Rakefile 运行 的 :install 目标是一个脚本,该脚本会提示用户输入 su(do) 密码,然后不过,使用 sudo 运行 需要 运行 作为 root 的命令。
如下图所示,我将 emerald_setup
脚本的所有权更改为 root:root 并设置了 SUID。
刚好我安装gem查看这个脚本,属于edvaldo:edvaldo(我的用户名),根本没有SUID!
我不知道到底发生了什么,但此脚本对 /etc/hosts
进行了更改,还创建了一些防火墙规则。这需要root权限。
那么,我的问题是:
在这个 SUID 案例中我错过了什么?
我必须如何确保 gem 可执行文件设置了 SUID?
当然我知道我可以要求用户使用
运行这个脚本$ sudo emerald_setup
但这会导致我遇到另一个问题,因为 gem 可执行文件安装在用户 space 中并且它的位置不在超级用户的路径中并且设置它(猜猜是什么?!)需要超级用户特权。
有什么建议吗?
您不能将具有 suid 权限的 program/script 打包到 gem(甚至是 tarball)中,并在以普通用户身份解包时恢复这些权限。在某些时候,安装您的 gem 的任何人都将提供 root 访问的密码。你可以安排在安装 gem 时发生这种情况,方法是让 gem Rakefile 运行 的 :install 目标是一个脚本,该脚本会提示用户输入 su(do) 密码,然后不过,使用 sudo 运行 需要 运行 作为 root 的命令。