[an error occurred while processing this directive]
さまざまな思惑から、付属の Apache を削除し新規にコンパイルします。
apache の脆弱性の問題がみつかったので、v1.3.26 以降を使うべきです。
材料です。
site: | The Apache HTTP Server Project | |
archive: | apache_1.3.26.tar.gz | |
os release: | Solaris 8 2/02 (IA-32) |
Apache がインストールされているか確認します。
# pkginfo | grep -i apache |
.clustertoc を見る限りでは、Apache の pkg cluster (SUNWCapache) は、
Entire cluster (SUNWCall) 以上でインストールされるようです。
pkgrm する前に /etc/rc?.d 配下の rc script の sequence 番号を調べておきます。
SUNWapchr の pkgmap にも同様の情報があります。
# ls -i /etc/init.d/apache |
Apache は run-level 3 で起動し、それ以外では停止するというポリシーです。
パッケージを削除します。依存関係があるようなので順番に注意します。
# pkgrm SUNWapchd SUNWapchu SUNWapchr |
ダウンロードしたアーカイブの正当性を確認します。md5 符号を利用します。(md5 のインストール方法)
% md5 apache_1.3.26.tar.gz |
MD5 (apache_1.3.26.tar.gz) = 52e9b875597a208fca9d393e710087b6
(アーカイブ配布元の md5 符号情報)
ダウンロードしたアーカイブを /usr/local/src に置きます。
# mkdir -p /usr/local/src |
program の compile 等を行うグループとして install を定義してあります。
展開して、configure を実行し、コンパイルします。
% gzip -cd apache_1.3.26.tar.gz | tar xvf - |
super-user でインストールします。
% su |
インストール後の最初の確認として、httpd.conf に最小限の設定を記述し、Apache を起動させます。
# vi /usr/local/apache/conf/httpd.conf |
以下の設定を変更しました。
Port 8080 => | Port 80 | |
#ServerName bark => | ServerName bark | |
bark はホスト名です。
文法チェックを行い、Apache を起動します。
# /usr/local/apache/bin/apachectl configtest |
ブラウザで http://bark/ を指定し、Apache のデフォルトページが表示されることを確認します (以下のようなページが表示されます)。
![]() |
OSブート時の apache の自動起動と、OSシャットダウン時の自動終了を行うため、/etc/init.d/apache の作成と /etc/rc?.d 配下へのリンクを作成します。
/etc/init.d/apache には、/usr/local/apache/bin/apachectl をそのまま使用できますのでこれに sym-link します。
# ln -s /usr/local/apache/bin/apachectl /etc/init.d/apache |
slice を跨がなければ hard-link でも構わないと思います。
apache の pkg を pkgrm した際に調べた rc script を /etc/rc?.d 配下に作成します。
# ln -s /etc/init.d/apache /etc/rc0.d/K16apache |
hard-link すると全てが apachectl に sym-link され、policy 的に見え方が好ましくありません。
特定のホスト (IP address) からのアクセスを拒否、あるいは許可する設定を行います。
これは mod_access モジュールを使って行いますのでこれが組み込まれているか確認します。
# /usr/local/apache/bin/httpd -l | grep mod_access |
httpd -l で compiled-in modules を list します。
mod_access module は default で組み込まれます。
httpd.conf に制限を施すディレクトリの設定を記述します。
基本的な2つの制限の例を挙げます。
以下は ServerRoot 下の /restricted_directory という context に、
192.168.1.0/255.255.255.0 (192.168.1.0 〜 192.168.1.255) の範囲のホストからのアクセスだけを許可する設定です。
<Location /restricted_directory> |
以下は /restricted_directory に、192.168.1.0/255.255.255.0 の範囲のホストからのアクセスだけを拒否する設定です。
<Location /restricted_directory> |
お好みにより、Directory directive で記述することもできますが、
DocumentRoot 変更時等に影響を受けないように Location directive での記述がよさそうな気がします。
Order directive の3個の引数を table 7-1 に示します。
directive | description |
---|---|
Order Deny,Allow | deny, allow の順番で directive が評価されます default では access が拒否されます |
Order Allow,Deny | allow, deny の順番で directive が評価されます default では access が許可されます |
Order Mutual-failure | allow directive に存在し、deny derective に存在しないホストが access を許可されます Order allow,deny と同様のようです |
Mutual-failure の使用は推奨されていません。
Allow directive, Deny directive の書式を table 7-2 に示します。
directive | description |
---|---|
allow/deny from all | すべてのホストに match します |
allow/deny from domain.com | ドメイン名に match します この指定をすると client の IP address の逆引きを行うようになります |
allow/deny from 192.168.1.1 | 完全に一致する IP address に match します |
allow/deny from 192.168 | IP address の一部に match します |
allow/deny from 192.168.1.0/255.255.255.0 | IP address / netmask の対に match します |
allow/deny from 192.168.1.0/24 | IP address / netmask 長の対に match します |
アカウントとパスワードによる認証を用いたアクセス制限の設定を行います。
mod_auth モジュールを用いるため、これが組み込まれているか確認します。
# /usr/local/apache/bin/httpd -l | grep -i mod_auth |
mod_auth module は default で組み込まれます。
htpasswd コマンドを使用してアカウントとパスワードのエントリを作成し、それをパスワードファイルに格納します。
# pwd/usr/local/apache/conf |
httpd が nobody ユーザで実行されている場合の設定です。
httpd.conf に制限の設定を記述します。
以下は /restricted_directory コンテキストにアクセス制限を行う設定例です。
<Location /restricted_directory> |
アクセス制限に使用する directive を table 8-1 に示します。
directive | description |
---|---|
AuthName | 制限の領域名を指定します "(double quote)" で囲います |
AuthType | 使用する認証形式を指定します ここでは Basic を指定します |
AuthUserFile | passwd file の location を full-path で記述します |
AuthGroupFile | group file の location を full-path で記述します |
Require | 認証を行う user を以下の何れかの形式で指定します user username [username].. group groupname [groupname].. valid-user |