如何在 shell 脚本上使用 SetUID 以非 root 用户身份运行?

如何在 shell 脚本上使用 SetUID 以非 root 用户身份运行?

我们公司的服务器运行的是 Ubuntu 12.04 (Precise) 和 Apache 2。我们安装了一个自定义的内部 Web 应用程序。我有一个 bash 脚本,可以将该应用程序的所有更新从源代码控制拉到服务器。系统上只有一个用户(脚本文件的所有者)拥有连接到源代码控制所需的 SSH 密钥,但我希望系统上的任何用户都能运行此脚本来更新应用程序。

我做了一些研究,看起来这正是 setuid 位的设计目的,以便系统上的任何用户都可以运行该脚本,并且该脚本将以脚本所有者的用户 ID 运行。但是,似乎现代发行版忽略了脚本的 setuid 位,因为如果执行 root 拥有的脚本会带来安全风险。

我以为我可以通过将其制作成 perl 脚本来暂时解决这个问题,但从 Precise 开始,也不再有 suid-perl 包了。看起来这个已经被弃用了。

我发现有些网站建议通过将用户添加到 sudoers 文件来解决这个问题,但我的脚本不需要 root 权限即可运行,并且它不会对文件系统的任何部分(网站除外)进行任何更改,因此我宁愿不授予任何人 sudoer 权限。该脚本只需要脚本所有者的权限即可正常运行。

那么,使用(不同的、非root的、非sudo的)用户的UID执行脚本的首选现代方法是什么?

答案1

您可以配置 sudo 以允许人们以特定的非 root 用户身份运行命令,例如在 sudoers 中

user1   (ALL) = (appuser) /path/to/yourapp

将允许用户 user1 以 appuser 身份运行你的应用程序

sudo -u appuser /path/to/yourapp

相似地

%somegroup    (ALL) = (appuser) /path/to/yourapp

在 sudoers 中将允许组 somegroup 中的用户以 appuser 身份运行你的应用程序

sudo -u appuser /path/to/yourapp

相关内容