■Webサーバ Apache
世界で最大のシェアを誇るApacheをインストールします。まずyumでapacheをインストールします。
# yum install httpd # rpm -qa | grep httpd httpd-2.4.6-18.el7.centos.x86_64 httpd-tools-2.4.6-18.el7.centos.x86_64 |
設定ファイル ( /etc/httpd/conf/httpd.conf ) を編集します。以下は編集した部分のみ記載しています。
ServerAdmin webmaster@unix-power.net ServerName www.unix-power.net:80 # ドキュメントルートの指定とCGIやhtaccessの有効化 DocumentRoot "/var/www/html" <Directory "/var/www/html"> Options ExecCGI AllowOverride FileInfo AuthConfig Limit Order allow,deny Require all granted </Directory> # URL省略時にアクセスするファイルを追加する <IfModule dir_module> DirectoryIndex index.html index.cgi index.php </IfModule> # cgiを実行できるディレクトリを固定しない <IfModule alias_module> # ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> # cgiの拡張子を有効化 <IfModule mime_module> AddHandler cgi-script .cgi </IfModule> # 日本語が文字化けすることがあるため以下を設定 #AddDefaultCharset UTF-8 AddDefaultCharset none |
デフォルトだとindex.htmlファイルも用意されていないのでアクセスできるページが存在しない状態なのですが、実際にアクセスをするとCentOSと書かれたページが表示されてしまいます。これだとOSが第三者に漏れてしまいますので、これが表示されるように設定されている/etc/httpd/conf.d/welcome.confを適当なディレクトリに退避しておきます。
# mv /etc/httpd/conf.d/welcome.conf /root |
■アクセス制御に関する設定
<Directory>で指定されるディレクトリに対するアクセス制御を行うためのディレクティブについて解説します。アクセス制御はApacheの中核機能です。
(1) 制御オプションの追加・変更・削除
Options [+|-]<option> |
<Directory>内では指定したディレクトリに対して具体的なディレクティブを指定します。この中に制御オプションと呼ばれるパラメータを<option>で設定します。このパラメータに指定できる制御オプションを以下に示します。
オプション | 意味 |
None | 制御オプションを全て無効にする |
All | 制御オプションを全て有効にする |
ExecCGI | CGIプログラムの実行を許可する |
FollowSymLinks | シンボリックシンクがあるとき、それを辿ることを許可する |
Includes | SSIを許可する |
IncludesNOEXEC | SSIを許可するが、#exec、#cmd、#includeによるプログラムの実行は禁止する |
Indexes | ディレクトリインデックスの作成を許可する |
MultiViews | Content negotiated MultiViewsを許可する |
SymLinksOwnerMatch | シンボリックリンクとリンク先が同じ所有者である場合のみ、それを辿ることを許可する |
指定したそれぞれの制御オプションの前に+/-をつけることもできます。+をつけるとそのディレクトリで新たにoptionが追加されます。-をつけるとそのディレクトリで<option>が削除されます。どちらもつけなければそれより上位のディレクトリにおける制御のオプションが全てこのディレクトリのものに置き換えられます。
(2) アクセス制御ファイルによるオーバーライドの許可
AllowOverride <override> ..... |
アクセス制御ファイルによるディレクトリごとの設定変更をどこまで許可するか指定します。<override>で指定できる指定子を以下に示します。
指定子 | 意味 |
None | オーバーライドを無効にする ( アクセス制御ファイルがあっても無視する ) |
All | アクセス制御ファイル内の全てのディレクティブを有効にする。 |
AuthConfig | 認証に関連するディレクティブを有効にする。 ( .htaccessファイルが有効となる ) |
FileInfo | ドキュメントタイプを指定するディレクティブを有効にする。 |
Indexes | ディレクトリインデックスを指定するディレクティブを有効にする。 ディレクトリ丸見え状態となるため非奨励。 |
Limit | アクセス制御を行うディレクティブを有効にする。 対象のディレクティブは allow, deny , orderの3つ。 |
Options | 機能を制御するディレクティブを有効にする。 |
(3) アクセス許可・拒否等の設定
apache2.2まで使用していた任意のIPからのアクセスを許可するとい記述は2.4から以下に変更され、デフォルトで設定されています。。
Require all granted |
上記では一行のみ記載しておりますが、本来はRequireディレクティブを使用して記述します。このRequireディレクティブは以下の3種類が存在します。
ディレクティブ | 説明 |
<RequireAny> | 複数記述された条件の中でいずれかがマッチすればアクセス許可。 省略した場合のデフォルト動作。 |
<RequireAll> | 複数記述された条件が全てマッチした場合に発動する。 特定のIPを許可・拒否などを指定する場合に使用する。 |
<RequireNone> | 複数記述された条件の中でいずれかにマッチした場合にアクセス拒否。 あまり使うことはない。 |
例えば192.168.0.0/24と192.168.1.0/24をアクセスを許可する場合は以下の記述を行います。下記はRequireディレクティブを省略していますのでRequireAnyが適用されます。また複数指定したい場合は改行して記述すれば良いということになります。
Require ip 192.168.0.0/24 Require ip 192.168.1.0/24 |
省略せずに記載すると以下のようになります。
<RequireAny> Require ip 192.168.0.0/24 Require ip 192.168.1.0/24 </RequireAny> |
逆に192.168.0.0/24と192.168.1.0/24からのアクセスを拒否したい場合はRequireAllディレクティブを用いて以下のような記述になります。
<RequireAll> Require all granted Require not ip 192.168.0.0/24 Require not ip 192.168.1.0/24 </RequireAll> |
■ユーザ認証 ( Basic )
Apacheで昔ながらに使われている認証方式で最もスタンダードな方式です。但し、この手法はパスワードが暗号化されずに平文で流れてしまうのが難点です。設定はhttpd.confに行います。ここでは制限をかけたいディレクトリを/var/www/html/basicとします。
<Directory "/var/www/html/basic"> AuthType Basic AuthName "Require Auth" AuthUserFile /var/www/html/basic/.htpasswd Require valid-user </Directory> |
上記をhttpd.confの最後尾に追記し、apacheを再起動します。または/var/www/html/basic配下に.htaccessファイルを作成しても同様です。そして実際のユーザとパスワードを次のコマンドでセットします。
# htpasswd -c /var/www/html/basic/.htpasswd user New password:[パスワード入力] Re-type new password:[パスワード入力] Adding password for user user # more /var/www/html/basic/.htpasswd user:sNQ1ca2F/hkRk |
ユーザIDとして「user」を登録し、それに対してパスワードをセットしています。-cオプションはファイルを新たに生成するという意味です。既存の.htpasswdに認証ユーザを追加したい場合は-cオプションは不要であり次のようにコマンドを実行します。
# htpasswd /var/www/html/basic/.htpasswd user1 New password:[パスワード入力] Re-type new password:[パスワード入力] Adding password for user user # more /var/www/html/basic/.htpasswd user:sNQ1ca2F/hkRk user1:3jlDTcijbrgbQ |
この状態で上のディレクトリにブラウザからアクセスしようとして認証画面が表示され、ID/PASSで閲覧出来ればOKです。
■ユーザ認証 ( Digest )
Apacheのもう一つの認証、Digest認証です。Basic認証はパスワードが平文で流れるのに対してDigest認証は暗号化がされます。前提条件としてApacheにauth_digestモジュールが組み込まれている必要性があり、古いブラウザなどでは対応していない場合がありますが、セキュリティ的にはこちらのほうが好ましいです。
設定方法はBasic認証とほぼ同一でまずhttpd.confから編集します。
<Directory "/var/www/html/digest"> AuthType Digest AuthName "Require Auth" AuthUserFile /var/www/html/digest/.htdigest Require valid-user </Directory> |
実際のユーザとパスワードを次のコマンドでセットします。
# htdigest -c /var/www/html/digest/.htdigest 'Require Auth' user Adding password for user in realm Require Auth. New password:[パスワード入力] Re-type new password:[パスワード入力] # more /var/www/html/digest/.htdigest user:Require Auth:5552a3218d8fd3d4ed6abfc4d0062c15 |
ユーザIDとして「user」を登録し、それに対してパスワードをセットしています。-cオプションはファイルを新たに生成するという意味です。 Basic認証との違いはレルムを指定する必要があります。上のコマンドでいう’Require Auth’の部分です。これはhttpd.confで指定したAuthNameと一致している必要があります。 この状態で上記のディレクトリにブラウザからアクセスして認証画面が表示され、認証まで通れば動作はOKです。
■バーチャルホストの設定
バーチャルホストとは1台のWebサーバで複数のドメインを運用するための仕組みです。例えばwww.unix-power.netをwebサーバとして動作させると同時にwww.unix-power1.netのwebサーバとしても動作させるにはバーチャルホストを利用します。
バーチャルホストを実現する方式にはIPベースのバーチャルホストと名前ベースのバーチャルホストがあります。IPベースのバーチャルホストはドメインごとにIPアドレスを割り当てる方式です。クライアントから接続したIPアドレスからドメインを判別できるため確実にバーチャルホストの機能を実現できます。但し、ドメインの数だけIPアドレスが必要なのであまり現実的ではないとも言えます。但し、HTTPSをバーチャルホストで実現しようと思うとこの方式である必要があります。
名前ベースのバーチャルホストはクライアントからのHTTPのHostリクエストヘッダでドメインを判別する方式です。IPアドレスを複数用意する必要はありませんがクライアントがHTTP/1.1に対応している必要があります。以下ではこの名前ベースのバーチャルホストのメモを残します。
サーバの名称、ドキュメントルート、ログの場所などドメイン毎に区別したい設定を記述します。少なくともServerNameディレクティブを指定する必要があります。以下ではwww.unix-power.netとwww.unix-power1.netの2つのバーチャルホストを設定する例です。
<VirtualHost 192.168.12.20> ServerName www.unix-power.net ServerAdmin webmaster@unix-power.net DocumentRoot /var/www/unix-power/htdocs ErrorLog /var/log/httpd/unixpower.net-error_log CustomLog /var/log/httpd/unixpower.net-access_log combined </VirtualHost> <VirtualHost 192.168.12.20> ServerName www.unix-power1.net ServerAdmin webmaster@unix-power1.net DocumentRoot /var/www/unix-power1/htdocs ErrorLog /var/log/httpd/unixpower1.net-error_log CustomLog /var/log/httpd/unixpower1.net-access_log combined </VirtualHost> |
<VirtualHost>ディレクティブの引数に_default_を指定すればそれは全てのバーチャルホストの設定にマッチしなかった場合のデフォルトとなります。
また、Apache2.4からはNameVirtualHost ******という記述は不要となりました。