perl - 我可以设置一个 perl 脚本吗?

标签 perl setuid

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

不要告诉我每次都要求管理员更改所有者。实际上在服务器中我有用户名暂存并且我在其中托管了一个 joomla 站点。现在,当我安装一些插件时,与该插件相关的文件归 www-data 所有。所以这就是为什么我不想每次都去管理。或者你也可以给我一些关于我的问题的其他解决方案。

最佳答案

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

但是,如果您使用的是低于 5.12.0 的 perl,您可以运行设置了 setuid 的 perl 脚本,它们将以 root 身份运行。它的工作原理是,当正常的 perl 解释器运行时,检测到您尝试执行的文件设置了 setuid 位,然后它会执行一个名为 suidperl 的程序。 Suidperl 负责提升用户的权限,并以 super 安全模式启动 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 文件准确指定允许执行的内容。

从 perl 5.12.0 开始,suidperl 被删除了。因此,如果你想在设置了 setuid 的 perl >= 5.12.0 上运行 perl 脚本,你将不得不编写你自己的 C 包装器。我再次推荐 sudo 作为更好的选择。

关于perl - 我可以设置一个 perl 脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21597300/

相关文章:

python - 为什么 setresuid/setresgid 在 Python 和 C 中的工作方式不同

macos - 在 OS X 中通过 perl 控制鼠标

来自远程服务器的 PHP scp 文件

perl - 为什么Perl不编译为python之类的二进制文件

perl - 为什么我的 Perl 线程在第一次运行时随机执行,但在后续运行时按顺序执行?

python - 作为另一个用户使用 python 子进程时环境错误

linux - Linux 功能如何与零/非零 UID 相关?

python - 未应用于 setuid ed 进程的用户的 Linux 组调度

arrays - 尝试打印数组的一个元素以某种方式打印所有元素

excel - 如何使 Win32::OLE 在 64 位 MS OFFICE 安装上工作