从CGI启动复杂shell脚本的复杂性

时间:2014-04-24 20:40:46

标签: linux apache bash shell fastcgi

好的,在过去的一年里,我已经构建了一些相当复杂的自动化脚本(大多数是bash,但是在这里和那里有一些perl),用于我们在我的营业场所进行的一些更常见的工作。他们严重依赖ImageMagick,Ghostscript和PhantomJS等等。它们还遍历整个网络中的大量目录以及几个不同的文件系统和主机操作系统......坦率地说,它们工作的事实是一个奇迹,也许证明了我愿意继续不停地撞墙。 ..另外,相信我,这比试图保护我的资源更容易,更有效。我们的档案是......有机的...公司中的某些高级人士认为他们属于他们,并且不会在他们的管理中关注公司的利益。如今,它们至少得到了相对良好的支持。

在任何情况下,这些脚本都可以自动生成大量基于图像的打印就绪产品,这些产品具有不同程度的复杂程度,最多可达数百页图像繁重的书籍,因此其中一些产品可以接受荒谬复杂的参数结构。做他们做的所有事情。 (P.S.嵌入式Javascript在SVGS中是一个神奇的东西!)这些系统已经在"工作beta"现在已经有一段时间了,这基本上意味着我已经在终端上输入命令来运行它们,我想将它们转移到生产环境并将它们作为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用户和组拥有,或者由root拥有755权限。完成!

现在httpd日志显示权限被拒绝worker.sh正在尝试执行:/

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

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

我看到的一个建议是简单地将编写的命令写入文本文件,并让cron或incron对文本文件执行某些操作。似乎这样可行......但是,我很高兴能够将STDIO重新放回我的网页,因为许多这些工作脚本中存在冗长的错误和通知(尽管没有交互),我希望也提供完成通知。有没有办法做到这一点,不需要进行权限战?

1 个答案:

答案 0 :(得分:0)

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

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

很难确保这一点,所以你应该确保你的CGI脚本只能由值得信赖的人访问。