如何在shell脚本上使用SetUID作为非root用户运行?

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

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

我想我可以通过一个Perl脚本来解决这个问题,但是从Precise开始,还没有suid-perl软件包。 看起来这已经被弃用了。

我发现一些网站build议通过将用户添加到sudoers文件来解决这个问题,但是我的脚本不需要root权限来运行,除了网站之外,它不会对文件系统的任何部分进行任何更改,所以我宁可不给任何人sudoer特权。 该脚本只需要脚本所有者的权限即可正常运行。

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

你可以configurationsudo来允许人们像一个特定的root用户那样运行一个命令,比如在sudoers中

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

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

 sudo -u appuser /path/to/yourapp 

同样

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

sudoers将允许组中的某些用户以appuser的身份运行您的应用程序

 sudo -u appuser /path/to/yourapp