サーバサイドインクルード
サーバサイドインクルード (SSI) を許可していると、ユーザによってシェルにアクセスされる可能性があるので、必要なければ無効にした方が良いでしょう。Options命令にIncludesNOEXECオプションを加えます。
スクリプトエイリアスを使わないCGI
ユーザにどこのディレクトリででもCGIを実行できるように許可する際は、次のことを注意しましょう。
- ユーザーが故意に攻撃、あるいはシステムをあばくスクリプトを書く。
- セキュリティーホールを空けることによって、サーバ全体のセキュリティが弱くなる。
スクリプトエイリアスを使ったCGI
特別なディレクトリだけにCGIの実行を許可しておけば、スクリプトエイリアスを使わないCGIよりも安全です。
一般的なCGI
すべてのCGIスクリプトは同じユーザーとして作動するので、それらは衝突しあう可能性があります。例えば、ユーザAがユーザBのCGIがアクセスするファイルを消してしまう等です。Apacheは異なったユーザ権限でスクリプトが実行できるので、必要があればそのような環境を用意したほうが良いでしょう。
.htaccessの禁止
必要がなければ、管理者が設定したセキュリティを最優先して、ユーザが.htaccessファイルを設定することを禁止したほうが良いでしょう。
サーバ設定ファイルに追加
<Directory /> AllowOverride None Options None allow from all </Directory>
これでアクセス設定の上書きが全てのディレクトリで禁止されます。
サーバファイルのプロテクト
もしユーザが下記のコマンドを実行した場合、それがセキュリティーホールとなります。
# ln -s / public_html
ブラウザから http://localhost/~root/ とすれば、rootのディレクトリが表示されてしまいます。回避策として、サーバのコンフィギュレーションに以下のブロックを追加しておきましょう。
<Directory /> Order deny,allow Deny from all </Directory>
これはファイルシステムのロケーションへのデフォルトアクセスを禁じます。それから、望むエリアにだけアクセスを許可します。<Directory> ブロックの割り当てを追加しましょう。
<Directory /home/*/public_html> Order deny,allow Allow from all </Directory> <Directory /home/httpd/html> Order deny,allow Allow from all </Directory>
<Location> と <Directory> 命令の相互作用には特別な注意が必要です。 例えば、<Directory />がアクセスを拒否したとしても、<Location />命令はそれを覆してしまいます。
また、UserDir命令も用心したいところです。 "./"のようなものにそれを設定することは、最初の上の例のように、ルートに同じ影響をもたらします。設定ファイルに以下の行を追加しておくと良いでしょう。
UserDir disabled root