Setuid Perl脚本可在Solaris上运行,但不能在Linux上运行

时间:2020-09-02 19:09:25

标签: linux perl solaris

好的,这很奇怪。但是,在尝试为某人重现问题的过程中(这已成为潜在的争论点),我发现了这个有趣的怪异...采取这个愚蠢而简单的perl脚本:

#!/usr/bin/perl

use POSIX;

$ENV{"PATH"} = "/usr/bin";
print "Effective:" . $> . "\n";
print "Actual   :" . $< . "\n";
print "geteuid():" . geteuid() . "\n";

如果我以(例如)root用户身份创建此脚本,则将其设置为4755权限,那么我将在Solaris 11.4(Perl 5.22.1)和Solaris 10.3(Perl 5.16.1)上获得此脚本:

Effective:0
Actual   :100
geteuid():0

完全相同的脚本,可以在相同或更高版本的Perl版本上运行,但在Linux(RHEL 7.7,Ubuntu 14.04,Ubuntu 20.04,RHEL 6.10)上运行:

Effective:100
Actual   :100
geteuid():100

如果我在运行该脚本的Linux上创建一个suid可执行文件,则会得到预期的0/100/0输出。

在RHEL 6.10主机上,它还具有Perl 5.8.4,并且一旦安装了suidperl,该perl也会给我0/100/0的期望值。

有人知道为什么它可以在Solaris而不是Linux上运行吗?在处理迁移/升级问题时,特定于平台的怪癖有点烦人...

1 个答案:

答案 0 :(得分:2)

如果可移植性是一个问题,则不安全地假设类Unix平台会尊重脚本中的setuid标志。对于Perl或任何其他解释器而言,这不是问题-像这样的限制已在相当深的层次上被支持到平台中。许多人担心-有充分的理由-允许setuid脚本会造成安全漏洞。

您已经知道,标准解决方案是从设置了setuid标志的二进制文件中调用脚本。