【问题标题】:Intricacies of Launching a complex shell script from CGI从 CGI 启动复杂的 shell 脚本的复杂性
【发布时间】:2014-06-10 08:31:07
【问题描述】:

好的,所以在过去的一年里,我已经为我们在我的营业场所所做的一些更常见的工作构建了一些相当复杂的自动化脚本(主要是 bash,但也有一些 perl)。他们严重依赖 ImageMagick、Ghostscript 和 PhantomJS 等等。它们还遍历网络上的大量目录以及几个不同的文件系统和主机操作系统......坦率地说,它们工作的事实有点奇迹,也许证明了我愿意不断地撞墙。 .. 另外,相信我,这比试图控制我的资源更容易、更有效。我们的档案是……有机的……公司中的某些高层人员认为他们属于他们,在他们的管理中不考虑公司的利益。至少,它们现在得到了相对较好的备份。

在任何情况下,这些脚本都会自动生成许多复杂程度不同的基于图像的可印刷产品,直至数百页图像密集型书籍,因此其中一些接受荒谬复杂的论据结构做他们做的所有事情。 (SVGS 中的 PS 嵌入 Javascript 是一件神奇的事情!)这些系统已经处于“工作测试版”一段时间了,这基本上意味着我一直在终端上手动输入命令来运行它们,我想移动它们直到生产并将它们作为 Web 服务提供,以便那些在生产中不熟悉命令行的人可以使用它们,并且还可以将它们与我们新的定制开发的订单管理系统集成。

TL;以下DR

这就是背景,问题是这样的:

我在禁用 SELINUX 的无头 CentOS 6.4 虚拟机上运行一切。 Apache2 可以很好地提供我的interface.sh CGI,并且互联网已经帮助我将 POST 数据转换为 shell 变量。现在我需要从 CGI 启动实际指导繁重工作并协调二进制文件的工作脚本:

#get post data from form and make it into variables...
/bin/bash /path/to/script/worker.sh $arg1 $arg2 $arg3 $arg5 $arg6 $opt1 $arg7

什么都没有。

httpd 日志显示权限被拒绝,很公平!

好的,谷歌搜索表明 CGI 调用的脚本也必须由 apache 用户和组拥有,或者由具有 755 权限的 root 拥有。完成!

现在 httpd 日志显示权限被拒绝 worker.sh 正在尝试做的事情:/

Google 让我相信,出于安全原因,fcgi 要求与 CGI 进程链交互的所有内容都必须具有正确控制的权限,一直到二进制文件和源文件……当然,这对于安全来说是明智的和损害控制,但在我的情况下几乎是不可能的。我们有非常动态的数据和数 TB 的资源...:/

脚本worker.sh 导出它自己的环境并以root 身份运行它的所有命令。这主要是为了克服我必须应对的权限灾难的雷区以及 CentOS 自己对允许事情发生的偏执狂。我曾希望这可能是一种解决方法,但没有。

我看到的一个建议是简单地将组合命令写到文本文件中,然后让 cron 或 incron 对文本文件执行一些操作。似乎这样会起作用......但是,我希望能够让 STDIO 回到我的网页中,因为在许多这些工作脚本中存在详细的错误和通知(尽管没有交互),我想提供完成通知也是如此。有什么方法可以做到这一点而不需要发动权限战?

【问题讨论】:

    标签: linux apache bash shell fastcgi


    【解决方案1】:

    要以其他用户身份运行某些命令,您可以使用sudo

    Set up sudo to allow passwordless access 由 apache 用户运行您的命令。然后,您可以让 CGI 脚本调用 sudo /path/to/script args 以 root 身份运行它(或 -u 为您选择的另一个用户)。

    要确保它的安全性非常困难,因此您应该确保您的 CGI 脚本只有可信赖的个人才能访问。

    【讨论】:

    • 啊!当然,现在我为什么没有想到这一点......我最初必须在一些脚本中这样做,但我通过重建环境将安全性、谨慎和编辑“sudoers”抛到了窗外,效果很好直到经过深思熟虑的安全策略介入;)
    • 注意:您必须在 sudoers 中注释掉“Default requiretty”,CGI 才能运行 sudo。我当然看到这会引发一大堆安全问题,如果有人正在阅读本文,我强烈不推荐这个,除非你有受信任的用户并且只在安全的本地网络上工作(我这样做,我也是)。真正的解决方案是从一开始就制定合理的安全策略...... sigh
    • 并将 apache 用户的 shell 更改为 /bin/nologin 以外的其他内容,但它现在可以工作了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多