我们公司的服务器运行的是 Ubuntu 12.04 (Precise) 和 Apache 2。我们安装了自定义的内部 Web 应用程序。我有一个 bash 脚本,它可以将对该应用程序的任何更新从源代码管理提取到服务器。系统上只有一个用户(脚本文件的所有者)拥有连接到源代码管理所需的 SSH 密钥,但我希望系统上的任何用户都能够运行此脚本来更新应用程序。
我做了一些研究,看起来这正是设计 setuid 位的目的,这样系统上的任何用户都可以运行脚本,并且脚本将以脚本所有者的用户 ID 运行. 然而,现代发行版似乎忽略了脚本的 setuid 位,因为如果执行 root 拥有的脚本会带来安全风险。
我想我可以通过将它变成一个 perl 脚本来暂时解决这个问题,但是从 Precise 开始,也不再有 suid-perl 包了。看起来这已被弃用。
我发现一些网站建议通过将用户添加到 sudoers 文件来解决这个问题,但是我的脚本不需要 root 权限来运行,并且它不会对文件系统的任何部分进行任何更改,除了网站,所以我宁愿不授予任何人 sudoer 特权。该脚本只需要脚本所有者的权限才能正常运行。
那么,使用(不同的、非 root、非 sudo)用户的 UID 执行脚本的首选现代方法是什么?
您可以配置 sudo 以允许人们以特定的非 root 用户身份运行命令,例如在 sudoers 中
将允许用户 user1 以 appuser 身份运行您的应用程序
相似地
在 sudoers 中将允许 somegroup 组中的用户以 appuser 身份运行您的应用程序