我可以setuid perl脚本?

我做了一个Perl脚本来更改其他用户拥有的文件的所有者。 脚本是完整的。 我的pipe理员将其保存在/ sbin目录中,并使用chmod u + s name_of_script为其设置uid。 但是当我运行这个脚本,它给了我的错误,不允许chown操作。 我做了一个C程序,并按照相同的步骤工作。 所以我的问题是,如果setuid正在为perl工作,那么我不应该得到这个错误,因为C代码没有给我任何错误。 所以我可以setuid perl脚本,或者我应该去与c代码。

不要告诉我每次都要求pipe理员更换主人。 其实在服务器我有用户名分级,我在其中托pipe一个joomla网站。 现在,当我安装一些插件,然后有关该插件的文件属于万维网数据。 所以这就是为什么我不想每次都去pipe理员。 或者你也可以给我一些其他的解决scheme,关于我的问题。

谢谢。

许多unix系统(可能是最现代的系统)忽略了解释器脚本的suid位,因为它打开了太多的安全漏洞。

但是,如果您使用的是perl <5.12.0,则可以使用setuid set运行perl脚本,并以root身份运行。 它是如何工作的,当普通的perl解释器运行时,检测到你正在执行的文件已经设置了setuid位,然后执行一个名为suidperl的程序。 Suidperl负责提升用户的权限,并以超安全模式启动perl解释器。 suidperl本身就是用setuid root来运行的。

其中一个后果就是污染模式会自动打开。 其他额外的检查也被执行。 您可能会看到如下消息:

Insecure $ENV{PATH} while running setuid at ./foobar.pl line 3. 

perlsec提供了有关保护这些脚本的一些很好的信息。

suidperl通常不会默认安装。 您可能需要通过单独的软件包进行安装。 如果没有安装,那么你会得到这个消息:

 Can't do setuid (cannot exec sperl) 

说了这么多 – 使用sudo来执行具有更高特权的操作会更好。 这是更安全的,因为你可以指定什么是允许通过sudoers文件执行。

从5.12版本开始,suidperl被丢弃了。 因此,如果你想用setuid set在perl> = 5.12.0上运行perl脚本,你必须编写你自己的C wrapper。 我再次建议sudo作为一个更好的选择。

不,你不能在脚本上使用setuid又名chmod +s 。 脚本的解释器将是实际上需要setuid ,但这样做是一个非常糟糕的主意。 特别糟糕。

如果你绝对必须setuid Perl编写的setuid东西,那么典型的做法是创建一个小的C封装,它是setuid并在启动后执行Perl脚本。 这给你两个世界的最好的有一个小而有限的setuid脚本,但仍然有一个脚本语言可用于工作。