2

私は管理者以外のアカウントを持つ新しい Linux Web サーバーに移行している CGI Web アプリケーションをいくつか維持していwww_maintainer.ます/home/www_maintainer/。物事をクリーンアップするには、特にcgi-bin/ディレクトリをより適切に編成できます。そのためのベストプラクティスの基準について学びたいと思います。

たとえば、補助的なもののバイナリとライブラリを使用して、内部にbin/サブ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/launch1.sh実際の CGI Web アプリケーションは、スクリプトまたはによって起動されるバイナリ実行可能ファイル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/ に インストールし、/home/www_maintainer/lib/それを許可するように Web サーバーを構成する方がよいでしょうか?

4

1 に答える 1

2

編集: 2012 年 5 月 23 日午後 3 時 PT US

ユーザーのディレクトリに制限されている場合は、ほとんど何でもできます。

以前は、CGI を使用するすべてのファイル (Perl など) をcgi-binディレクトリに配置し、それらを目的またはアプリケーションに基づいてサブディレクトリに配置することができます (おそらくそうする必要があります)。

次に、生の HTML ファイル、グラフィック ファイル、CSS ファイル、JS ファイルなどを含む非 CGI ファイルをディレクトリのに置きます。cgi-bin

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 ユーザーがこれらのツールに直接アクセスする必要はないため、アクセスしないようにしてください。CGI 経由で実行している場合python(この場合はそうであると思います)、シバン行に正しいパスが表示されていることを確認してください。#!/home/www_maintainer/tools/python/python、 例えば。


元の答え:

Debian で配布されているアプリケーションなど、多くのアプリケーションが行うことは、アプリケーションを/usr/share/lib/programnameディレクトリに配置し、ApacheAliasを使用ScriptAliasしてそれらをベース URL にマップすることです。これは、私が社内で開発した独自のアプリケーションを実行する方法でもあり、非常にうまく機能しました。

あなたの状況では、コードやシステムを徐々に強化する予定がない限り、変更をできるだけ少なくすることをお勧めします。パスが変更された場合、特にパスがブックマークされている場合は、変更を加えると頭痛の種になる可能性があります。構成内のいくつかに慣れたい場合を除きますmod_rewrite

私が説明したことを実証するために使用できる具体的な例はありますか?

また、古代に関して/usr/bin/pythonは、システムは完全に最新ですか? それとも、Linux ディストリビューションが新しいバージョンをプッシュしないという問題ですか? ディストリビューションのパッケージ管理システムで管理されていないバージョンの Python をインストールすることは避けたいと思います。

于 2012-05-19T01:42:33.767 に答える