2

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

例如,在内部调用 subdirsbin/以及辅助事物的二进制文件和库是否正常?lib/cgi-bin/

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

新的 Web 服务器具有基于 Redhat RHEL 的Scientific Linux (SL)。不幸的是,我们当前 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服务器以允许这样做?

4

1 回答 1

2

编辑:美国太平洋时间 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根据需要正确设置路径。Web 用户没有必要直接访问这些工具,因此请不要访问这些工具如果您python通过 CGI 进行操作(在这种情况下我假设是这样),请确保您的 shebang 行显示正确的路径;#!/home/www_maintainer/tools/python/python, 例如。


原答案:

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

For your situation, I'd recommend changing as little as possible unless you plan to enhance the code or the system more and more over time. Making changes could bring headache if paths change, especially if any are bookmarked, unless you want to get cozy with some mod_rewrite in your config.

Do you have any specific examples that I could use to demonstrate what I've described?

Also, with regard to ancient /usr/bin/python, is your system completely up-to-date? Or is the problem that your Linux distribution just doesn't push a newer version? I'd avoid installing a version of Python that isn't managed by your distro's package management system.

于 2012-05-19T01:42:33.767 回答