使用所有者的权限运行 shell 脚本

使用所有者的权限运行 shell 脚本

在 Debian(5.0.3)服务器上,我有一个svnsync拥有某个 shell 脚本的用户:

-rwsrwsr-x 1 svnsync users  119 Dec 21 13:45 mirror-svn.sh

我希望users小组中的每个人都能以 的权限执行此脚本。这与从提交后脚本svnsync触发“ ”命令有关;引用svnsync synchorizeSVN书

[...] 您可能希望您的主存储库将更改推送到一个或多个 blessed 镜像,作为其 post-commit 和 post-revprop-change 钩子实现的一部分。这将使镜像尽可能实时更新。

无论如何,我无法让 SUID 工作,显然是因为 Linux / Debian 是现代 Unix 系统之一。这里

出于这个原因,一些现代 UNIX 系统会忽略 shell 脚本上的 SUID 和 SGID 位。

这个科幻问题暗示了同样的事情:“您不能对 shell 脚本使用 SUID root”。因此,这是我的后续问题:

如果我真的真的想要以其所有者的权限运行脚本,而不考虑任何潜在风险,有没有什么无忧无虑的方法可以做到这一点?将脚本编译成二进制文件建议,但如果可能的话,我更喜欢更简单的方法。如何从例如 Perl 脚本调用 shell 脚本(我实际上尝试过这个,但无法使其工作)?将所有人添加到 sudoers 文件也不是一个好的选择。

更新perl-suid:通过安装来使其工作0x89 建议并使用如下的 Perl 包装器脚本。

#!/usr/bin/suidperl -T
$ENV{PATH} = "/bin:/usr/bin";
system("/path/to/mirror-svn.sh");

chmod +s在此包装器脚本上设置。还请注意,$ENV{PATH}需要在脚本中设置;否则您会收到一条投诉,称它不安全

答案1

在较新版本的 debian 中,有一个名为 perl-suid 的软件包可以解决 perl 脚本的这个问题,也许在 5.0.3 中也可以使用。

为脚本赋予 SUID 位的安全问题不仅限于 shell 脚本,还会影响任何解释型语言。这就是您最初尝试从 perl 调用脚本失败的原因。似乎可以在 solaris 中为脚本设置 SUID 位,但我猜您不想为脚本编写 C 包装器,因此迁移到 solaris 对您来说不是一个选择?;-)。

相关内容