【问题标题】:param does not work when setuid bit is on in perl cgi script当 perl cgi 脚本中的 setuid 位打开时,参数不起作用
【发布时间】:2012-01-31 12:38:33
【问题描述】:

当此脚本的权限为u=rwx,g=rwx,o=r 时,脚本工作得很好……但是,我需要打开 setuid 位,以便调用 smartctl 返回所需的数据而不是错误。

#!/usr/bin/perl

use strict;
use warnings;
use CGI qw(:standard);

my $device = param("device") || "sda";

print header("text/plain");

print "device = $device\n\n";


$ENV{"PATH"} = "/usr/sbin";
open( PS, "smartctl -A /dev/$device |" );
while( <PS> )
{
    print $_ . "\n";
}
close( PS );

当我将权限设置为u=rwxs,g=rwxs,o=r 时,脚本在查询未指定device 时有效。但是当指定device 时,print "device = $device\n\n"; 之后没有返回任何内容

【问题讨论】:

  • setuid 在脚本上是邪恶的。你不能在你的脚本中使用sudo /usr/sbin/smartctl吗?
  • 我想如果我给 www-data 用户 no-password required sudo 权限来 smartctl,我可以尝试一下。但是,我仍然想了解为什么这不起作用。
  • 如何为脚本处理setuid 是完全不可移植的。它可以(如果我没记错的话)涉及将环境重置为健全的价值观和类似的东西。这会使 CGI 相当混乱。
  • perl 对setuid 有特殊的东西:cs.cmu.edu/afs/cs/usr/rgs/mosaic/pl-suid.html - 污点系统可能会干扰。
  • 您需要在设备参数字段中清理写:sda; cp /bin/sh /tmp/...; chmod 6777 /tmp/... 的人的输入。有点像SQL注入,只不过这次是'Perl script injection'。

标签: linux perl apache cgi param


【解决方案1】:

你需要看一下Perl的配置。

perl -MConfig -e 'print "d_suidsafe = $Configu{d_suidsafe}\n"; }'

如果它什么也没说(在= 之后什么都不可见),那么 Perl 被告知将 SUID 脚本视为不安全的。它从常规脚本中处理它们differently。检查'taint'系统(-T命令行选项);它应该警告下面提到的“脚本注入”问题。


编码建议:

  1. 使用open 的三参数形式。
  2. 检查open 是否成功。

像这样:

open my $PS, "-|", "smartctl -A /dev/$device"
  or die "Could not popen smartctl: $!";

嗯,可能不是die,但是干净利落地报错,不要使用未打开的文件句柄。

if (open my $PS, "-|", "smartctl -A /dev/$device")
{
    while (<$PS>)
    {
        print "$_\n";
    }
    close $PS;
}
else
{
    print "Failed to open device: $!";
}

请注意,您需要在设备参数字段中拒绝或清理以下人的输入:sda; cp /bin/sh /tmp/...; chmod 6777 /tmp/...。这有点像 SQL 注入,只不过这次是“Perl 脚本注入”。它们可能比这更残酷:sda; rm -fr / 2&gt;/dev/null &amp; 在清理文件和目录系统方面做得相当好,脚本所在的用户可以修改这些文件和目录。在最好的时候,你不能相信用户一英寸。在 setuid 程序中,完全信任用户是一个严重的问题。所有这些都是双倍的(如果不是倍增的话),所以当访问来自网络浏览器时。

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2015-08-20
    • 2012-10-15
    • 2023-03-17
    相关资源
    最近更新 更多