cgi-bin目录中的基础结构标准

时间:2012-05-14 15:38:52

标签: apache web-applications migration standards cgi-bin

我正在维护一些CGI Web应用程序,我正在迁移到新的Linux Web服务器,我有一个非管理员帐户,比如www_maintainer.所以我在{{{}}内部安装CGI应用程序1}},我想借此机会清理一下,特别是/home/www_maintainer/目录可以更好地组织;我想了解一下最佳实践标准。

例如,在cgi-bin/内有一个名为bin/lib/的子目录是否正常,辅助内容的二进制文件和库?

我将描述一个具体的例子,即数学和数据绘图应用程序gnuplot及其依赖项(libfontconfig,libpng,libgd,libjpeg,libreadline.so,...)。 Python可能是另一个例子(发行版提供2.4但我需要> 2.6),但我希望管理员可以从包中安装2.6,所以我不必担心它。

新的Web服务器有Scientific Linux(SL),它基于Redhat RHEL。不幸的是,我们当前的SL版本的发行版存储库没有提供我需要的gnuplot版本4.4,所以它不能安装在像cgi-bin/这样的正常位置,所以我可以在非系统中构建和安装它及其依赖项位置,例如/usr/bin/。实际的CGI Web应用程序是由脚本cgi-bin/tools/launch1.sh启动的二进制可执行文件。

以下是目录树及其中的一些文件的说明(当然省略了许多目录和文件)。

launch2.sh


最好在cd /home/www_maintainer/www_root/ |-- html/ | |-- index.html | `-- info.html |-- cgi-bin/ | |-- gen/ | | |-- status.sh* | | `-- sybase/ | | `-- DataAccess64/ | | `-- ODBC/ | | |-- lib/ | | |-- samples/ | | `-- spl/ | |-- exe1/ | | `-- launch1.sh* | |-- exe2/ | | `-- launch2.sh* | |-- javascript/ | | `-- check-input.js | |-- scripts/ | | |-- decode.pl* | | |-- generate-random-string.bash* | | |-- gnuplot -> ../tools | | `-- upload.php* | |-- tools | | |-- bin/ | | | |-- gnuplot* | | | |-- python -> python2.6 | | | |-- python-config -> python2.6-config | | | |-- python2.6* | | | |-- python2.6-config* | | | `-- xmlwf* | | |-- etc | | | `-- fonts/ | | |-- include/ | | |-- info/ | | |-- lib/ | | | |-- libfontconfig.so | | | |-- libpdf.so | | | |-- libreadline.so | | | |-- libpng15.so | | | |-- libpng15.so | | | |-- pkgconfig/ | | | |-- libpng.so | | | |-- libjpeg.so | | | |-- libreadline.so | | |-- libexec/ | | |-- man/ | | `-- share/ |-- tests/ | `-- results/ | `-- info/ | |-- readme.pdf | `-- readme.html |-- fonts/ |-- index.html -> html/index.html |-- log/ | `-- log.txt `-- tmp -> /tmp/ 之外安装,例如在目录www_root/home/www_maintainer/bin/中安装并配置网络服务器以允许这样做吗?

1 个答案:

答案 0 :(得分:2)

编辑:05/23/2012下午3点PT美国

如果您被限制在用户的目录中,您可以随心所欲地做任何事情。

使用是常见的情况是你将所有使用CGI的文件(Perl等)放入cgi-bin目录中,你可以(也可能应该)放入基于目的或应用的子目录中的那些。

然后将非CGI文件放在<{1}}目录的之外,其中包括任何裸HTML文件,图形文件,CSS文件,JS文件等。

对于CGI文件使用但不是由Web用户直接使用的任何程序,请不要将它们放在webroot中,因为这不是必需的,如果Web用户可以将值提交给那些,则可能是安全漏洞以某种方式的节目。

目录树示例:

cgi-bin

然后在CGI文件中,确保根据需要正确设置/home/www_maintainer/public_html/index.html /home/www_maintainer/public_html/images/logo.png /home/www_maintainer/public_html/scripts/something.js /home/www_maintainer/public_html/cgi-bin/application1/app1.cgi /home/www_maintainer/public_html/cgi-bin/application2/app2.cgi /home/www_maintainer/public_html/cgi-bin/application2/app2helper.cgi /home/www_maintainer/tools/gnuplot/gnuplot /home/www_maintainer/tools/python/python -> python2.6 /home/www_maintainer/tools/python/python2.6 /home/www_maintainer/tools/python/python2.6-config 的路径。 Web用户直接访问这些工具 如果你通过CGI(我假设,在这种情况下)做tools,请确保你的shebang线显示正确的路径;例如python


原始回答:

许多应用程序所做的事情(例如与Debian一起分发的应用程序)将其应用程序放在#!/home/www_maintainer/tools/python/python目录中,然后使用Apache /usr/share/lib/programnameAlias将它们映射到基本URL。这就是我以前运行自己内部开发的应用程序的方式,并且运行良好。

根据您的情况,我建议尽可能少地更改,除非您计划越来越多地增强代码或系统。如果路径发生变化,进行更改可能会带来麻烦,特别是如果有任何书签,除非您想在配置中使用ScriptAlias。{/ p>

您是否有任何具体示例可用于演示我所描述的内容?

另外,关于古代mod_rewrite,您的系统是否完全是最新的?或者您的Linux发行版不会推出更新版本的问题是什么?我要避免安装不受发行版包管理系统管理的Python版本。