【问题标题】:Standards for infrastructure in cgi-bin directorycgi-bin 目录中的基础设施标准
【发布时间】:2012-05-14 15:38:51
【问题描述】:

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

例如,在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 版,所以它不能安装在像/usr/bin/ 这样的正常位置,所以我可以在非系统位置构建和安装它及其依赖项,例如cgi-bin/tools/。实际的 CGI Web 应用程序是由脚本 launch1.shlaunch2.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//home/www_maintainer/lib/ 中并配置Web 服务器以允许这样做?

【问题讨论】:

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


    【解决方案1】:

    编辑:美国太平洋时间 2012 年 5 月 23 日下午 3 点

    如果你被限制在用户的目录中,你几乎可以做任何你想做的事情。

    使用的常见情况是您将所有使用 CGI 的文件(Perl 等)放入 cgi-bin 目录,您可以(并且可能应该)将它们放入基于目的或应用的子目录。

    然后你把非CGI文件放在cgi-bin目录之外,里面包括任何裸HTML文件、图形文件、CSS文件、JS文件等

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

    目录树示例:

    /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
    

    然后在您的 CGI 文件中,确保根据需要正确设置了 tools 的路径。 网络用户没有必要直接访问这些工具,因此请不要访问这些工具。如果您通过 CGI 执行 python(在这种情况下我假设),请确保您的 shebang 行显示正确的路径;以#!/home/www_maintainer/tools/python/python 为例。


    原答案:

    许多应用程序所做的,例如与 Debian 一起分发的应用程序,是将它们的应用程序放在 /usr/share/lib/programname 目录中,然后使用 Apache 的 AliasScriptAlias 将它们映射到基本 URL。这也是我过去运行我们自己内部开发的应用程序的方式,而且效果很好。

    对于您的情况,我建议您尽可能少地进行更改,除非您计划随着时间的推移越来越多地增强代码或系统。如果路径发生更改,尤其是任何被添加书签的路径,进行更改可能会让人头疼,除非您想在配置中使用一些 mod_rewrite

    你有什么具体的例子可以用来证明我所描述的吗?

    另外,关于古老的/usr/bin/python,你的系统是最新的吗?还是您的 Linux 发行版没有推送更新版本的问题?我会避免安装不受您的发行版包管理系统管理的 Python 版本。

    【讨论】:

    • 非常感谢!我已经编辑了这个问题,包括一个具体的问题示例和 Web 服务器目录结构的说明。
    • 这有帮助吗?距离您的赏金进入垃圾箱仅剩五个小时......
    • 当然。你现在应该得到赏金,因为我已经接受了你的回答。
    • 我有,是的。您对答案满意还是需要任何额外信息?如果是这样,请告诉我缺少什么。
    猜你喜欢
    • 2016-05-22
    • 2010-09-18
    • 2016-04-26
    • 1970-01-01
    • 2023-03-20
    • 2013-09-25
    • 1970-01-01
    • 2010-09-10
    • 2011-06-19
    相关资源
    最近更新 更多