ANGIE WORKSHOP > 人柱実験工房 > Red Hat Linux 9.0 によるWebサーバー構築
Red Hat Linux 9.0 によるWebサーバー構築
拙宅に個人用のWebサーバーを設置してから1年以上が経過しました。
当初はRed Hat Linux 8.0で構築していたのですが,その後Red Hat Linux 9.0に移行しています。いろいろと設定の追加や見直しを行っていますので,ここで一度その構築手順を整理しておいた方が良いと思いました。つまりこの文書は自分用のメモです。同時に同じようなことを試みる方の参考になればということで公開しています。
Red Hat社は2004年4月末を最後に無料版のRed Hat Linuxのメンテナンスをすべて打ち切りました。現在同社は有料版のRed Hat Enterprise Linuxだけをメンテナンスしています。無料版Red Hat Linuxは,
Fedora ProjectによりFedora Coreというディストリビューションに生まれ変わり,開発が継続されています。最新のFedora Core 2ではカーネルを2.6に変更するなどいろいろと意欲的な改良が行われています。
Red Hat社によるメンテナンスが打ち切られたため,拙宅のWebサーバーもup2dateによるシステムのパッケージ更新ができなくなりました。このまま放置すると,新たにセキュリティホールが見つかった場合に攻撃される危険性があります。したがって何らかの方法でメンテナンスを続けるか,もしくは他のディストリビューションを使って再構築することを考えなくてはなりません。Fedora Coreに移行するのが素直なやり方なのでしょうが,Red Hat Linux 8.0以降のバージョンアップは非常に頻度が高く,常に最新版をフォローするためにシステムを再構築し続けるのも疲れます。
最新版を追いかける必要が無いのであれば,Red Hat Linux 9.0をメンテナンスしながら使い続けるのでも十分ではないでしょうか。実際,調べてみるとRed Hat Linuxのメンテナンスもボランティアによって継続されており,apt-getというツールを使ってup2dateと同じようなパッケージ更新ができるようになっています。以上のような理由から,拙宅のWebサーバーではRed Hat Linux 9.0を使い続けることにしました。
CONTENTS
店頭売りのパッケージ版はすでに無くなっていますから,ftpサーバーから無料で配布されているCD-ROMイメージをダウンロードします。redhat社のftpサーバーはいつも重くてつながらないので,いくつかあるミラーサイトからダウンロードした方が良いです。私は以下のURLから9.0の英語版(マルチランゲージ版)をダウンロードしました。
http://ftp.kddilabs.jp/Linux/packages/RedHat/redhat/linux/9/en/iso/i386/
英語版ですが,日本語など各国語のリソースは含まれていますから,問題なく日本語表示できます。3枚分のisoイメージファイル(
shrike-i386-disc1.iso 〜 shrike-i386-disc3.iso)をダウンロードしたら,適当なCD-Rライティングソフトを使ってCD-Rに焼きます。たいていのライティングソフトが使えると思いますが,私はRecord Now MAX 4.6を使いました。
できあがったCD-Rを使い,サーバーに使うPCにインストールします。以前使っていたFLORAは手放してしまったので,現在は
OLIO.SPEC製のコンパクト静音PCを使っています。HDDは80GBに増量し,OSもLinux以外は入れていません。区画構成は次のようにしました。
表1.HDDの区画構成
区画タイプ |
サイズ(MB) |
ファイルシステム |
マウント先 |
基本 |
4000 |
ext3 |
/ |
1000 |
swap |
スワップ |
1000 |
ext3 |
/tmp |
拡張 |
1000 |
ext3 |
/var |
60000 |
ext3 |
/var/www/html |
8000 |
FAT32 |
(作業用) |
この区画構成はドンブリ勘定で十分な余裕を見ています。細かく計算するのも面倒なので,だいたいこんなもんだろうで割り当てています。
Red Hat Linux 8.0ではインストーラがUSB接続のキーボード/マウスに対応していないという問題がありましたが,9.0ではこれは修正されていました。BIOSでのエミュレーションを有効にしておけば問題なくUSBキーボード/マウスでインストールできます。
CDブートでインストーラを起動し,Enterキーを押してGUIでのインストールを選択します。最初にCD自体が壊れていないかをチェックするかどうか尋ねてきますが,これは時間がかかるのでスキップしても構わないでしょう。
続いてGUIで設定画面が次々に表示されます。8.0の時とだいたい同じですが,細かい変更が行われています。以下のように選択して先に進みます。
設定画面 |
選択 |
Language |
Japanese |
キーボード |
Japanese |
マウス |
Microsoft IntelliMouse (USB) |
インストールタイプ |
「カスタム」を選択。
お仕着せの設定ではなく自分でモジュールを選択する。 |
パーティション設定 |
DiskDruidを使って手動設定
表1の区画構成にしたがって各区画を作る。Red Hat Linux 8.0のDiskDruidでは20GBの大きさの区画を作ることができなかったが,9.0ではこれも修正されているようだ。 |
ブートローダ |
デフォルトのGRUBをそのまま使用。 |
ネットワーク設定 |
デフォルトのDHCP自動割り当てのままにする。 |
ファイアーウォール設定 |
ファイアーウォール無し |
追加の言語サポート |
Japaneseだけのdefault状態のままにする。 |
タイムゾーン |
東京/UTC+09を選択 |
アカウントの設定 |
rootパスワードを入力。
Red Hat Linux 8.0のインストーラではここで追加のユーザーアカウントを作れるようになっていたが,9.0ではリブート後に作成するように変更されたようだ。 |
認証設定 |
デフォルトのまま(シャドウパスワードとMD5が有効)にする。 |
パッケージグループの選択 |
以下の変更を加える。他はデフォルトのまま。
エディタ |
viだけ追加 |
グラフィカルインターネット |
mozilla, mozilla-psmだけ残して残りは全部解除。 |
テキストベースのインターネット |
解除 |
Office/生産性 |
解除 |
サウンドとビデオ |
解除 |
グラフィクス |
解除 |
サーバ設定ツール |
デフォルトの選択値からプリンタ関係を解除。 |
Webサーバ |
デフォルトの選択値からphp関係とsquidを解除。 |
FTPサーバ |
すべて選択 |
管理ツール |
すべて選択 |
印刷サポート |
解除 |
|
もろちん上記は私の場合の設定例に過ぎません。基本的にWeb/ftpサーバーとして使うことしか考えていませんので,不要なものはほとんど削除しています。GUIもサーバーには本来不要なのですが,実際にはあった方が便利なことも多いのでX-WindowとGNOMEはデフォルトのまま残しました。
ネットワーク設定をDHCPのままにしているのは,何も設定していない状態でインターネット側からアクセス可能にするのは危険だからです。とりあえずNAPT接続で作業し,ネットワーク周りの設定が完了してセキュリティ面での不安が無くなってから,グローバルIPアドレス(に静的NAT対応したプライベートアドレス)に変更します。
ファイアーウォール機能は使っても良いと思いますが,私はフィルタリングはルータ側でやることにしていますのでこれは使いません。
以上の設定が終わるとCDからパッケージのインストールが始まります。途中で2〜3枚目のCDに交換するように指示が出ますので,そのまま指示に従います。パッケージのインストールが終わると次の設定画面が表示されるので順に設定していきます。
設定画面 |
選択 |
ブートディスクの作成 |
作成しない |
グラフィックス |
自動検出の結果(intel 845)をそのまま採用。 |
モニタ |
自動検出の結果(DDC検出モニター)をそのまま採用。または手動で設定。 |
画面 |
24bit color/1024x768に設定 |
続いてリブートを要求されるのでリブートしてHDDから起動します。リブート後はさらに次の設定画面が表示されるので,順に設定して行きます。
設定画面 |
選択 |
ユーザーアカウント |
追加のユーザーアカウント angie を作成。 |
日付と時刻 |
デフォルトのまま。ntpの設定は後で行うのでここでは設定しない。 |
サウンドカード |
自動検出の結果をそのまま採用。 |
Red Hatネットワーク |
登録しない。 |
追加のCD |
なし |
Red Hatネットワークへの登録はup2dateによるパッケージ更新のサービスを受けるためには必須でしたが,サービスが終了した現在は登録しても意味がありません(無料版の登録はできません)。
Red Hat Linux 8.0の時はインストーラでUSBキーボード/マウスが使えなかったため,インストール終了後に繋ぎ替えていましたが,今回は最初からUSBキーボード/マウスを使っています。サーバー機なので普段はキーボード/マウスは取り外しておき,必要な時だけつないで使います。USBデバイスはホットプラグでの動作を保証されていますから,こういう運用が可能になります。
なお,ブートローダのGRUBの画面ではUSBキーボードはそのままでは認識されません。これはGRUBがMS-DOSなどと同様にBIOS経由でキーボード入力を処理しているためです。BIOSの設定画面でUSBキーボードをPS/2キーボードとしてエミュレートする設定(「USB Legacy Device Support」といった項目になっています)を有効にすれば,GRUB画面もUSBキーボードで問題なく使用できるようになります。
Red Hat Linux 9.0はRed Hat社によるメンテナンスは終了しましたが,ボランティアによるパッケージの更新は現在も行われています。インターネットに接続するサーバーは常に攻撃される可能性がありますから,システムはできるだけ最新版に更新していく必要があります。apt-getを使ったアップデートを設定する手順は以下の通りです。
|
作業手順 |
(1) |
http://apt.freshrpms.net/ にアクセスして,該当するLinuxディトスリビューションに対応するapt-getをダウンロードする。コンソール上でWebブラウザを使うか,またはあらかじめURLを調べておいてwgetコマンドでダウンロードする。
# wget http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm
wgetをproxy経由で実行する場合は,/etc/wgetrcを編集して次の要領でproxyの情報を記述する。
http_proxy = http://user:pass@host:port/
|
(2) |
apt-getをインストールする。
# rpm -ivh apt-0.5.5cnc6-fr1.i386.rpm
これで apt-get が使えるようになる。なお,proxy経由で動作させる場合は,/etc/apt/apt.conf を書き換える必要がある。この設定ファイルの中に
Acquire {
Retries "0";
Http {
Proxy ""; // http://user:pass@host:port/
}
};
という記述部分があるので,このProxyのダブルクォートの中を行末のコメント部分(最初の//以降はコメント)に例示されているような文字列で記述する。
|
(3) |
パッケージリストの更新。
# apt-get update
パッケージリストがサーバーからダウンロードされてローカルに保存される。
|
(4) |
システム全体の更新。
# apt-get dist-upgrade
apt-getにはさまざまなサブコマンドがあるが,基本的にはこのdist-upgradeだけをやれば良い。システムにインストールされている各パッケージの更新があれば,自動的に依存関係まで調べて必要なものをすべてダウンロードして更新してくれる。実行せずに何が更新されるか確認だけをしたい場合は,次のように -s オプションを付ける。
# apt-get -s dist-upgrade
|
(5) |
カーネルの更新。
dist-upgradeではカーネルは更新されない。カーネルの更新は以下の手順で手動で行う。まず,次のコマンドを実行する。
# apt-get install kernel
更新可能なカーネルの一覧が表示されるので,現在のカーネルの最新バージョンを選んで,
# apt-get install kernel#2.4.20-31.9
でインストールする。#の後の数字はもちろんバージョンによって異なる。
インストールが完了したら,ブートローダGRUBの設定を更新する。GRUBには新しいカーネルのエントリが自動的に追加されているが,そのままだと旧カーネルをデフォルトで起動するようになっているので,/boot/grub/grub.conf を書き換えて新しいカーネルをデフォルトにする。つまり,
default=1
の行を
default=0
に書き換える。設定が完了したらLinuxを再起動する。
実行中のカーネルのバージョンは次のコマンドで確認できる。
# uname -r
|
設定が終了したら,以後は
apt-get dist-upgrade を実行する毎に,システムは最新状態にアップデートされます。apt-getによるアップデートは,ユーザー登録が不要な点でRed Hat社のup2dateよりもWindows Updateに近い作りだと言えます。
カーネルを更新した場合,ブートローダGRUBのメニューには以前のカーネルと新しいカーネルの両方が表示されるようになります。古いカーネルは要らないのであれば,
/boot/grub/grub.conf をエディタで編集して古いカーネルに対応するエントリを削除します。
Red Hat Linux 8.0ではインストール時のDiskDruidで大きなHDD区画が作れないという問題がありましたが,9.0ではこの問題は修正されているようです。しかし運用を開始した後に,新たにデータ区画を追加する必要が生じる場合もあります。ここでは区画
/dev/hda5 を作成してから
/var/www/html にマウントするという例でデータ区画を追加する手順を示します。DiskDruidはインストール時にしか使えないので,fdiskを使います。
ステップ |
作業手順 |
区画を作成 |
fdiskを起動。
# /sbin/fdisk /dev/hda
p で区画一覧表示。
n で区画作成 → l(論理)で必要な容量を指定。
w で更新して終了。
|
フォーマット |
# /sbin/mkfs -t ext3 /dev/hda5 |
マウント |
# mount /dev/hda5 /var/www/html |
無事にマウントして使えることを確認したら,ブート時に自動マウントするように
/etc/fstab を編集して次のようなエントリを追加します。
/dev/hda5 /var/www/html ext3 defaults 1 2
|
インターネットに接続するサーバーである以上,不正アクセスを受けるリスクには常に備えておかなくてはなりません。セキュリティを強化するための設定を行います。
Red Hat Linux 8.0 では,デフォルトでさまざまなサービスが自動的に起動しています。Web/ftpサーバーとして使うには必要のないものも多くあります。不要なサービスを動かしているとセキュリティホールになりやすいので,すべて停止します。この作業はGNOMEのメニューから「システム設定/サーバ設定/サービス」を実行します。
表2.停止すべき不要なサービス
サービス |
内容 |
FreeWnn |
日本語入力システム |
anacron |
停止中に時間が来たcronタスクを必要なら実行 |
apmd |
APM(Advanced Power Management)の制御 |
autofs |
NFSボリューム等の自動マウント |
canna |
かな漢字変換サーバー |
cups |
印刷システム(Common Unix Printing System) |
isdn |
ISDNカード用接続スクリプトサービス |
netfs |
NFS,SMB,NCPのネットワークファイルシステムをマウントする |
nfslock |
NFSでファイルロックを行うためのサービス |
pcmcia |
PCカードのデバイスドライバをロードするスクリプトサービス |
portmap |
RPC接続をTCPのポートにマッピングするサービス |
rhnsd |
Red Hatネットワークデーモン |
sendmail |
電子メール配送デーモン |
sgi_fam |
ファイル/ディレクトリーの変更を知らせるサービス |
rhnsd(Red Hatネットワークデーモン)はup2dateによるパッケージ更新をサポートするデーモンです。up2dateのサービスが終了した現在ではこれも不要です。
なお,サービスの停止は次の例のようにコマンドラインで設定することも可能です。
# /sbin/chkconfig FreeWnn off
|
GUIでの設定ではランレベル3〜5のそれぞれについて個別に設定する必要がありますが,コマンドラインだと1行でまとめて設定できます。
設定後はLinuxを再起動します。上記の設定はLinuxの起動時に自動的に各サービスを起動するかどうかの設定です。すでに動いている各サービスを個別に停止しているわけではありません。
今回はroot以外には一人のユーザーアカウント(angie)しか作っていませんのであまり意味が無いのですが,複数のユーザーアカウントを作って他の人にもシェルを使わせる場合は,su コマンドでrootになれるユーザーを制限した方が良いと言えます。手順は以下の通りです。
|
作業手順 |
(1) |
/etc/login.defs ファイルに次の行を追加
SU_WHEEL_ONLY yes
|
(2) |
/etc/group を編集
wheelの行にユーザーangieを追加
|
(3) |
/etc/pam.d/su を編集して,次の行をコメントから外して有効にする。
auth required /lib/security/pam_wheel.so use_uid
|
Red Hat Linux 9.0 ではtelnetサービスは標準ではインストールされません。sshがあるのでこちらを使えということなのでしょうね。sshは通信を暗号化したtelnetのようなものです。
ただし,標準ではrootでもsshでリモートログインできてしまいます。考え方にもよりますが一般にはrootで直接リモートログインするのではなく,一般ユーザーでログインした後に su でrootに変わるようにした方が,よりセキュリティは高くなると言えます。
また複数のユーザーを作っていろいろなサービスを行う場合,どのユーザーでもsshでリモートログインできてしまうのは問題があります。ここではsshでリモートログインできるユーザーをwheelグループに制限し,かつrootでのリモートログインを禁止します。設定の手順は以下の通りです。
|
作業手順 |
(1) |
/etc/ssh/sshd_config に次の2行を追加
AllowGroups wheel
PermitRootLogin no
|
(2) |
sshデーモンをリロード
# /sbin/service sshd reload
|
なお,WindowsからsshでリモートログインするにはフリーソフトウエアであるTeraTerm ProとTTSSHを使うのが一般的です。詳しい情報については
TTSSH日本語版のサイトを参照してください。
一通りの設定ができたら,インターネット側からこのサーバーにアクセスできるようにします。IPアドレスをプライベートの固定アドレスに変更し,ルータで単純NATを設定します。私が契約しているUSEN BROAD-GATE01ではグローバルIPアドレスが5つ提供されていますので,そのうちの1つをこのサーバーとのアドレス変換に固定的に割り当てるわけです。
ルータを経由せずに接続して直接グローバルIPアドレスを割り当てる方法でも良いのですが,ルータ経由にした方がルータのフィルタリング機能が使えるため楽に安全を確保できます。もちろん使用するサービスによってはNAT経由ではうまく動かないものもありますが,Web/ftpサーバーについては特に問題ありません。ルータのフィルタリング設定では,0〜1024のwell knownポートのうち,httpやftpといった必要なものだけ通すようにします。
設定ができたら,実際に外部からアクセスして穴が無いか調べます。といっても個人ではなかなか外部からポートスキャンをかけるのは難しいので,そういうサービスを利用します。サーバー機上でWebブラウザMozillaを起動し,次のサイトにアクセスします。
これらのサイトではアクセスしてきたPCに対してポートスキャンをかけて結果を報告してくれます。
PCの内蔵時計はそれほど正確ではないため,長期間サーバーを稼働していると次第にずれていってしまいます。ntpを使えば,インターネット上の標準時刻サーバーと同期をとって自動補正することが可能です。
時刻同期をするためにはntpdateというコマンドを定期的にcronで起動する方法もありますが,ここではntpデーモンのntpdを使います。ntpdを使えばLAN内の他のPCに対するタイムサーバーとして使うことができるからです。
ntpdを使う場合,
インターネット側からこのPCのntpポート(tcp/udp 123)に接続できるようにする必要があります。ルータでこのポートをフィルタリングしている場合は,通過できるように設定を変更しなくてはなりません。
|
作業手順 |
(1) |
まずシステムのロケール設定を正常にする。
/etc/profileを編集。末尾に次の行を追加して環境変数TZを設定する。
export TZ=JST-9
次に,/etc/localtimeを日本のもので上書きする。
# cp /usr/share/zoneinfo/Japan /etc/localtime
※元が英語版であるためか,私がインストールしたものでは上記の変更を行わないとntpdでの時刻同期がUTCになってしまいました。
|
(2) |
/etc/ntp.conf を編集
赤色の部分を追加する。
# Prohibit general access to this service.
restrict default ignore
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 210.173.160.27
restrict 210.173.160.57
restrict 210.173.160.87
restrict 127.0.0.1
# -- CLIENT NETWORK -------
# Permit systems on this network to synchronize with this
# time service. Do not permit those systems to modify the
# configuration of this service. Also, do not use those
# systems as peers for synchronization.
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# --- OUR TIMESERVERS -----
# or remove the default restrict line
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
# restrict mytrustedtimeserverip mask 255.255.255.255 nomodify notrap noquery
# server mytrustedtimeserverip
server 210.173.160.27
server 210.173.160.57
server 210.173.160.87
|
(3) |
ntpdを自動起動に設定
コマンドラインから
# /sbin/chkconfig --level 345 ntpd on
で設定できる。もちろんGUIの「サーバ設定/サービス」で設定しても良い。
|
上記の設定後,Linuxをリブートするとntpdが動き始めます。動作状況を確認するには,
ntpq -p というコマンドを使います。
# /usr/sbin/ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.jst.mfeed. nttpf-isdn1.crl 2 u 11 64 1 3.757 -1.028 0.008
ntp2.jst.mfeed. utc2.crl.go.jp 2 u 6 64 1 3.691 -0.278 0.008
ntp3.jst.mfeed. nttpf-isdn0.crl 2 u 2 64 1 3.107 -0.830 0.008
LOCAL(0) LOCAL(0) 10 l 5 64 1 0.000 0.000 0.008
|
なお,この設定で指定しているntpサーバーは独立行政法人通信総合研究所(CRL)やNTTなどが共同で公開している
公的なntpサーバーです。試行サービスという位置づけですが,とりあえず今の所サービスは継続されています。
PCはハードウエア上に時計を持っていますが,Linuxは起動時にこれを参照するだけで後はソフトウエアで独自に時計を動かしています。ハードウエアの時計はそれほど正確ではありませんから,長期間稼働していると ntp で補正しているソフトウエアの時計からずれていってしまいます。
したがって定期的にハードウエアの時計も補正してやるのが望ましいと言えます。ハードウエアの時計をソフトウエアの時計に合わせるには,
hwclock というコマンドを使います。構文は以下の通りです。
/sbin/hwclock --systohc
実際には
cron を使って,これを毎日1回程度自動的に動かしてやります。cronの設定方法はいろいろありますが,上記のコマンドラインを記述したシェルスクリプトを作り,
/etc/cron.daily フォルダに置く方法が簡単で良いと思われます。なお,このスクリプトファイルには実行属性が必要です。
Red Hat Linux 9.0には
vsftpd という ftpサーバーが付属しています。機能的にも十分なのでこれをそのまま使います。8.0の時はvsftpdはスーパーサーバーである
xinetd 経由で起動されるようになっていましたが,9.0では単独で起動するように仕様が変更されています。したがって
xinetd.confではなくTCP_Wrapperでアクセスを制御します。
|
作業手順 |
(1) |
/etc/vsftpd/vsftpd.conf を編集。
# Anonymousアクセスを無効化する。許可するならデフォルトのままで良い。
anonymous_enable=YES ← NOに変更
# 以下の2行をコメントアウトから外して有効化する。
# これが無効だとアスキーモードでの転送ができない。
ascii_upload_enable=YES
ascii_download_enable=YES
# 以下の行を追加。これを設定しないとアクセス時のファイルのタイムスタンプが
# UTCで表示される。
use_localtime=YES
|
(2) |
TCP_Wrapperでアクセス制御する。/etc/hosts_allow を編集して次の行を追加。
vsftpd:192.168.1.:ALLOW
vsftpd:ALL:DENY
なお,/etc/vsftpd/vsftpd.conf に
tcp_wrappers=YES
という設定があることを確認。これが無いとTCP_Wrapperによる制御ができない。
|
(3) |
自動起動に設定する。コマンドラインから
# /sbin/chkconfig --level 345 vsftpd on
で設定できる。もちろんGUIで設定しても良い。
|
この例ではTCP_Wrapperで
192.168.1.0/24 のサブネット(つまりローカルなLAN)からのアクセスのみを許可しています。TCP_Wrapperでの複数の設定は各行に並べて記述します。上の行の設定が順に優先され,最後の行で無許可のIPアドレスをすべて拒否しています。
なお私の場合,ftpサーバーはWebコンテンツの更新用途にしか使わないため上記の設定しか行っていません。Anonymousアクセスを許可するパブリックなftpサーバーを構築する場合は,アクセス可能なディレクトリを制限するなどさらに細かい設定を検討する必要があります。詳細については
man vsftpd.conf で表示されるマニュアルに説明があります。
Red Hat Linux 9.0にはApache 2.0が標準で付属しています。Apacheは大変高機能なWebサーバーであるため,設定もかなり複雑です。とりあえず次のような方針で設定を行いました。
- 全体を一つのサイトにする。
一つのサーバー上に複数のユーザーのWebサイトを構築する場合は http://www.example.com/~angie/ といったURLでアクセスできるようにするのが一般的で,Apacheの設定ファイル(apache.conf)にもそのような設定方法がコメントアウトされた形で入っています。しかし今回構築するのは個人用のWebサイトなので,全体を一つのサイトにします。つまり http://angie.example.com/ といったURLでアクセスできるようにします。
ユーザー毎にサイトを作る場合は /home/angie といった各ユーザーのホームディレクトリの配下にコンテンツを配置しますが,今回は全体のコンテンツの配置場所である /var/www/html をそのまま使用します。ただしHDDの区画は /var とは分離したいので,別に確保してマウントしています。
- アクセス制御を行う。
個人用途のWebサーバーなので,非公開部分を作ります。Apacheでは .htaccess というファイルを使ってアクセス制御が可能です。認証は簡単なBasic認証だけを使います。
細かい設定のほとんどは,Apacheの設定ファイルである
/etc/httpd/conf/httpd.conf に記述します。以下に今回行った設定の内容を記します。
設定の目的 |
設定内容 |
基本設定 |
# 管理者のメールアドレス
ServerAdmin angie@mnet.ne.jp
# サーバーのFQDN
ServerName angie.example.com
※ DocumentRootはデフォルトの /var/www/html のままにする。
|
日本語を優先表示 |
AddDefaultCharset ISO-8859-1
→ AddDefaultCharset shift_jis に変更。
|
アクセス制御を有効にする |
<Directory "/var/www/html"> のブロックで
AllowOverride None
→ AllowOverride AuthConfig Limit に変更。
|
CGIを動かすための設定 |
AddHandler cgi-script .cgi
がコメントアウトされているのを外して有効化する。
|
<Directory />のブロックに ExecCGI を追加
<Directory />
Options FollowSymLinks ExecCGI
AllowOverride None
</Directory>
|
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
の行をコメントアウトして無効化する。その下に以下を追加。
<Directory /var/www/html/cgi-bin>
Options +ExecCGI
</Directory>
|
CGIはシステムの標準である /var/www/cgi-bin の配下ではなく,/var/www/html/cgi-bin の配下に置くことにしました。これは他のhtmlファイル等と同じ階層に置いて一括管理したいからです。
httpd.confの修正が終わったら,構文エラーが無いことを確認します。これには次のコマンドを使います。
/usr/sbin/apachectl configtest
「
Syntax OK」と表示されれば問題ありません。
次に,httpdが自動起動するように設定します。これはコマンドラインから
/sbin/chkconfig --level 345 httpd on
で設定するか,GUIの「サーバ設定/サービス」で設定します。
以上の設定でWebサーバーは動き始めますので,コンテンツをftp等でアップロードします。Apacheはデフォルトの設定ではOSのユーザー apache の権限でファイルにアクセスしますから,Web表示するhtmlファイルや画像ファイルはこのユーザー apache が読み取れるように設定します。一般のユーザーでコンテンツをアップロードした後,ファイルのアクセス権を chmod 644 つまり -rw-r--r-- に設定すれば良いわけです。サブディレクトリについては実行属性が無いと中を参照できませんので,chmod 755 つまり drwxr-xr-x に設定します。
cgi-bin の配下に置くCGIファイルについては,実行属性を与えないと動きません。また,perl は一般に /usr/local/bin/perl に置かれていることが多いのですが,Red Hat Linux 9.0 では /usr/bin/perl となっていますので要注意です。
Apacheではディレクトリに
.htaccess という制御ファイルを置くことで,その配下のディレクトリ全体に対してアクセス認証を要求するように設定できます。この認証に使うユーザー名/パスワードは,OS自体のユーザー名/パスワードとは独立したものになります。次のような手順で設定を行います。
|
作業手順 |
(1) |
パスワードファイルを作成。
htpasswd /var/www/.htpasswd username
このユーザー名に対応するパスワードを尋ねてくるので入力する。
パスワードファイル .htpasswd を置く場所はどこでも良いが,Webサイトとして公開する範囲(この場合 /var/www/html/の配下)の外に置いた方が安全。
複数のユーザー名を一つのパスワードファイルに登録可能。上記と同じ構文を使ってユーザー名を1つずつ追加できる。既存の登録を破棄して新規作成する場合には htpasswd コマンドに -c オプションを指定する。
|
(2) |
アクセス制御ファイルを作成。
認証を行いたいディレクトリに .htaccess という名前のテキストファイルを作成する。
内容は次の例のようなもの。
AuthType Basic
AuthName "Authentication Required"
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
Require user username
複数のユーザー名でのアクセスを許す場合は,Require user の行に複数の名前を空白文字で区切って並べる。
|
.htaccess は1つ置けばそのディレクトリの配下のすべてのファイルやサブディレクトリのアクセス制御に使用されます。なお,
.htpasswd と
.htaccess についても,OSのユーザー apache が読み取ることができるようにアクセス権を設定する必要があります。
マイクロソフトのWindows Media系の動画/音声ファイルは,拡張子が
.wmv/.wma/.asf などになっています。これらのファイルへのリンクを作成しておくと,Webブラウザでリンクをクリックした時に自動的にメディアプレーヤーでストリーム再生が始まります。
しかしWebブラウザにNetscapeを使っているとこれらのファイルはストリーム再生されません。これはApacheのデフォルトではWindows Mediaファイルに対応したMIMEタイプが登録されていないためです。この問題を解決するには
/etc/mime.types というファイルに次の設定を追加します。
audio/x-ms-wma wma
video/x-ms-asf asf
video/x-ms-asx asx
video/x-ms-wmv wmv
|
追加したら httpd を再起動する必要があります。この設定とは別に,
httpd.conf 側の設定で
AddType という構文を使ってこれらのMIMEタイプを追加する方法もあるようですが,私が試した範囲では正常に動きませんでした。
なお,Internet Explorerではこのような設定がなくてもストリーム再生できてしまいます。これはInternet Explorerはサーバー側の情報に頼らずに独自にMIMEタイプを判定しているためと思われます。
Red Hat Linux 8.0がリリースされたのは2002年の秋ですが,それから2年の間にすでに3回(9.0/Fedora Core 1/2)のメジャーバージョンアップが行われています。めまぐるしくて付いていくのも大変です。古いバージョンでもまだそれなりに使い物になりますので,無理に最新版を追いかけることもないんじゃないかということで,あえて今この文書を作成しました。お役に立てれば幸いです。
なお,拙宅のWebサーバーでは実際には上記以外にもいろいろな設定を行っています。長くなるので割愛しましたが,次のようなものです。
- ftpでの認証ユーザーのアクセス
- Dynamic DNSサービスへの自動登録
- ApacheのログでWORMが原因のアクセス記録を分離して記録
- Apacheのエラー表示ページのカスタマイズ
- DeleGateを使ったプロトコル中継
最近はなかなかいじっている時間が取れないのが現実ですが,そのうちSambaやWebDAVにも挑戦しようと考えています。
参考文献
更新履歴
2003/03/27 |
Red Hat Linux 8.0版 |
2004/09/09 |
Red Hat Linux 9.0ベースで全面改訂 |