【问题标题】:CGI Script Wont Create Directories [closed]CGI 脚本不会创建目录 [关闭]
【发布时间】:2014-11-19 10:44:52
【问题描述】:

我有一个从 URL 访问的 perl CGI 脚本。我用perl -wc检查了语法,似乎没问题。但是,创建目录的命令都没有正确执行。权限设置为755

有人知道如何诊断这个问题吗?

这是代码:

#!/usr/bin/perl

use CGI;
#-- create CGI Query
$q = CGI->new;
$prefix = "X__";

print "Content-type: text/html\n\n";

#-- get companyID
$entityID = $q->param('entityID');

#-- get directory name
$dir = "${prefix}${entityID}";

#-- change directory
chdir("/var/www/html/web/customers");

#-- create parent company directory
`sudo mkdir -m 755 $dir`;
print "${entityID}";

【问题讨论】:

    标签: perl unix cgi cgi-bin


    【解决方案1】:

    您在这段代码中有许多最糟糕的做法。看着它的一部分让我很痛苦。有未经处理的数据被发送到系统调用。有故意的特权升级。看到这些会很痛苦,它们给你带来麻烦,现在以后。

    当您为类似这样的脚本跟踪 Apache 的问题时,需要注意的事项是:

    • 脚本内系统调用的返回值。

      `foo`;
      

      对于 perl 5.10 及更高版本,这会将值返回到 ${^CHILD_ERROR_NATIVE}。这个值是多少?这会告诉您 foo 实际返回的内容以及它是否成功。 (perldoc)

    • Apache 错误日志。在某个地方,有一个 apache 正在写入的错误日志。它可能在不同的地方,部分取决于配置。有 apache 虚拟服务器错误日志和 apache 服务器错误日志 - 两者都可能需要查看。

    • 出于某种原因,这里使用了sudo(这不是是件好事)。 sudo 有自己的日志,应该进行调查。 (Where are sudo incidents logged?) sudo 可以登录的地方很多 (documentation),您可能需要在自己的系统上进行调查。

    不过,我再次恳求编写这样代码的人不要一开始就编写这样的代码。在这段代码中有足够宽的安全漏洞可以让卡车通过。是的,它可能是一个一次性脚本,您很快就会为客户或市场营销人员或不太了解的人(您应该)在 Intranet 上运行...但有些天...该代码将在互联网上运行,当有人将entityId=/../../../../../../im_in_ur_root/creating_directories 传递到您的参数中并且您开始发现在奇怪的地方创建的目录时,所有地狱都将失败。

    • 不要在反引号、打开或系统中使用sudo。这是一个等待发生的问题。
    • 请务必使用 perl 提供的函数调用来创建目录。
    • 请正确设置目录的权限,以便 Web 服务器可以写入它应该能够写入的目录,而无需提升权限。

    【讨论】:

    • 原来我的 perl 版本很旧:Perl 版本:5.016003
    • 从 ${^CHILD_ERROR_NATIVE} 中返回的值是 256
    • Perl 的返回值乘以 256。sudo 返回 1 (man page) 表示“否则,如果存在配置/权限问题或 sudo 无法执行给定命令。”
    • 我已将此添加到我的 sudoers 文件中。默认值:apache !requiretty Cmnd_Alias APACHE = /bin/mkdir, /bin/rmdir, /bin/cp, /bin/mv, /bin/ touch, /bin/chown apache ALL=(ALL) NOPASSWD: APACHE 基于另一个论坛,但奇怪的是它仍然无法正常工作..甚至重新启动了 apache.. 是的,我意识到这不是解决这个问题的最佳方法..但是,我没有权限从我的 .pl 脚本运行 mkdir
    • 可以运行sudo,但是无法设置/var/www/html/web/customers的权限让apache可以在那里创建目录?
    猜你喜欢
    • 2013-02-20
    • 2020-05-06
    • 2015-04-22
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多