#環境
プラットフォーム
さくらのクラウド
CPU:2core Memory:2GB
ストレージ:SSD20GB
OS
CentOS Linux release 7.2.1511 (Core)
version 7.0.6
Apache
# httpd -v
Server version: Apache/2.4.6 (CentOS)
#準備
Apacheをインストール
# yum install -y httpd
Apacheを起動
# systemctl start httpd.service
# systemctl enable httpd.service
ベーシック認証を設定するディレクティブ Authtype が使用できるコンテキストはディレクトリ(Directory)と外部設定ファイルでしたので、その2パターンで設定してみたいと思います。
####ドキュメントルート
DocumentRoot "/var/www/html"
####外部設定ファイルでのディレクティブ許可設定
デフォルトだと***/var/www/html/ディレクトリには3箇所、AllowOverride noneの設定でしてありました。ディレクティブタイプをピンポイントで指定できますが、面倒なのでall*(すべてのディレクティブを許可)に設定してます。
103行目
<Directory />
AllowOverride all
Require all denied
</Directory>
125行目
<Directory "/var/www">
AllowOverride all
# Allow open access:
Require all granted
</Directory>
151行目
AllowOverride all
#**外部設定ファイル(.htaccess)**での設定
認証に使うユーザ情報のファイルを作成
# htpasswd -c /var/www/html/.htpasswd basictestuser
New password:
Re-type new password:
Adding password for user basictestuser
外部設定ファイルを作成。
外部設定ファイルが置いてあるカレントディレクトリ以下がベーシック認証の対象となります。外部設定ファイル名はAccessFileNameディレクティブで設定できます。何も設定していない場合は、デフォルトで**.htaccess**になります。
# vi .htaccess
AuthType basic
AuthName "Auth"
AuthUserFile /var/www/html/.htpasswd
Require valid-user
各ディレクティブの役割
|ディレクティブ|役割|
|:---|:---|:---|
|AuthType|認証の種類。ベーシック認証はBasic、ダイジェスト認証はDigest。|
|AuthName|認証の領域の名前(なんでもOK)|
|AuthUserFile|認証に使うユーザ情報のファイル|
|Require|ベーシック認証された中で、どのユーザがアクセスできるか指定|
HTTPリクエストでテストします。
# curl http://59.106.222.210/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
IDとパスワードを指定していないので、401Unauthorizedが返ってきてます。
ブラウザでアクセスして確認してみてください。
#**ディレクトリ(Directory)**での設定
認証に使うユーザ情報のファイルを作成
# htpasswd -c /etc/httpd/conf/htpasswd basictestuser
設定ファイルを作成
# vi basic_auth.conf
Directoryでベーシック認証をかけたいディレクトリを指定します。
指定したディレクトリ以下がベーシック認証の対象となります。
<Directory /var/www/html/>
AuthType basic
AuthName "Auth"
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Directory>
設定ファイルをhttpdに読み込むため再起動
# systemctl restart httpd.service
HTTPリクエストでテスト。
# curl http://59.106.222.210/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
.htaccessの場合と同じく401Unauthorizedが返ってきてます。
#IPアドレスでのアクセス制限
特定のIPアドレスからのアクセスを許可、拒否することができます。
先ほどの設定ファイルに追記します。(.htaccessに記述しても同様の効果がでます)
<Directory /var/www/html/>
AuthType basic
AuthName "Auth"
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
Allow from 192.168.0.1
Deny from all
Order Deny,Allow
Satisfy all
</Directory>
各ディレクティブの役割
|ディレクティブ|役割|
|:---|:---|:---|
|Allow|アクセスを許可するホスト(IP)|
|Deny|アクセスを拒否するホスト(IP)|
|Order|AllowとDenyの評価される順番|
|Satisfy|AuthTypeとAllow,Denyが指定されている時のアクセスポリシー|
AllowとDenyで許可、拒否の設定をします。
OrderディレクティブではAllowとDenyの評価される順番を指定できます。
例)
Order Deny,Allow
→DenyされないIPとAllowされたIPを許可。それ以外は拒否。
Order Allow,Deny
→AllowされないIPとDenyされたIPを拒否。それ以外は許可。
Satisfyディレクティブではベーシック認証とIPアドレスでのアクセス制限が設定されている場合のアクセス設定を指定します。
例)
Satisfy Any
→AllowとRequireのどちらかを満たせば許可。
Satisfy all
→AllowとRequireの両方を満たせば許可。
設定ファイルをhttpdに読み込むため再起動
# systemctl restart httpd.service