[BaserCMS] Basic認証をかけてみた(管理画面、サイト両方)



Nプログラマです。

以前さくらのレンタルサーバ ライトBaserCMS + SQLiteの構成でインストールしました。

今回は、この構成のbaserCMSの管理画面サイトに.htaccessを使ってBasic認証をかけてみました。
開発中という理由など、とにかく今すぐBasic認証をしておきたい時はおすすめだと思います。

ざっくり概要

baserCMSディレクトリ直下の.htaccessにbasic認証の設定をして、.htpasswdを配置します。
これにより管理画面とサイトの両方にbasic認証をかけることができます。

注意点

さくらのレンタルサーバ ライトなど公開ディレクトリのみしか利用できないサーバの場合は、.htpasswdを保護するための.htaccessを作る必要があります。

今回の記事ではこれも作っています。

設定方法

それでは具体的に設定していきます。

baserCMS直下の.htaccess

まずbaserCMS直下に配置する.htaccessのファイルを作成していきます。

これは以前インストール時に設定したファイルなので、baserCMSのディレクトリ直下にあると思います。
開くとこんな感じになっていると思います。

Allow from all
RewriteEngine on
RewriteBase /  # 以前BaserCMSをインストールする時、コメントインしたところ
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

これに対してBasic認証用の設定を入れていきます。こんな感じです。
追記したところをコメントで記載してあります

# 追記 START
AuthType Basic
AuthName "Input your name and password" # 認証画面で表示される文言
AuthUserFile /公開ディレクトリのパス/任意のディレクトリ名/.htpasswd # 認証につかうパスワード
require valid-user
# 追記 END

Allow from all
RewriteEngine on
RewriteBase /    # 以前BaserCMSをインストールする時、コメントインしたところ
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

これで認証の設定は終了です。

次は認証に使うためのパスワードを設定していきましょう。

.htpasswdの準備

先程作成した.htaccessのAuthUserFileで指定している.htpasswdを作っていきます。

ディレクトリの作成

.htpasswdを作成して保存するためのディレクトリを作成します。
先程書いた設定ファイルのパスと同じ名前で作ります。

/公開ディレクトリのパス/任意のディレクトリ名/

baserCMSをインストールしているディレクトリには含めたくなかったので、それより外側のディレクトリに保存しています。

.htaccessの作成

先程作成したディレクトリのままでは外部から丸見えなので、先に.htaccessでアクセスを制限します。

外部から見えないようにするために.htaccessを作成します。

.htaccess コードを開く
.htaccess

Deny from all

これで外部からのアクセスを全て拒否します。
次の作る.htpasswdをアップロードする前に、このファイルに直リンクでアクセスできないことを確認しておいたほうがいいでしょう。

アップロード後のパスはこんな感じ

/公開ディレクトリのパス/任意のディレクトリ名/.htaccess

.htpasswdの作成

認証情報が記載されている.htpasswdを作成します。

直接テキストで書いたりWebサービスで作る方法もありますが、自分はローカルのmacでhtpasswdコマンドから作成してFTPでアップロードしました。
コマンドはこんな感じです。

htpasswd -c -b .htpasswd user-name password

user-nameにはユーザ名を、passwordにはパスワードを入れてEnterを押してください。
オプションはコマンドのヘルプをざっくり見た限り、こんな感じ。
自分なりの訳なので、ちょっといい加減です。

オプション 説明
-c 新しく作成する (既存ファイル上書きなので、注意!)
-b パスワードはコマンドラインより受け取る

-cオプションは注意です。既存のファイルを上書きされます。
自分もちょっとやらかして、最初に作った認証ファイルを上書きしてしまい、認証できないという状態になってしまいました。

ローカルマシンなら被害は少ないですが、サーバで実行する時は注意しましょう。

これで、実行したディレクトリ内に.htpasswdが生成されるので、それを先程作成した.htpasswd用のディレクトリにアップロードします。

アップロード後のパスはこんな感じ。

/公開ディレクトリのパス/任意のディレクトリ名/.htpasswd

これで設定は完了です。

動作チェック

設定したBasic認証が動作するかを確認してみましょう。

管理画面へのアクセス

管理画面にアクセスする時、以下のようにBasic認証が表示されます。

/img/article/2018/12/21/01.jpg
basic認証 chrome

AuthNameはchromeでは表示されないみたい。 firefoxだとこんな感じ。

/img/article/2018/12/21/02.jpg
basic認証 firefox

画面の中の赤字のurlのところにアクセスしようとするurlが表示されます。

管理画面のログイン前に、basic認証が表示されるようになりました。認証後は、baserCMSの認証が表示されます。

/img/article/2018/12/21/03.jpg
basic認証 chrome

認証後は、サイトが表示されます。

直リンクのチェック

直リンクをして、403 Forbiddenであることを確認します。

チェックするのは以下の2つ

  • /公開ディレクトリのパス/任意のディレクトリ名/.htaccess
  • /公開ディレクトリのパス/任意のディレクトリ名/.htpasswd

さくらのファイルマネージャなら、対象ファイルを右クリックすると「Webページとして開く」というメニューがあるのでそれをクリックすれば、直リンクを簡単にコピーすることができます。

コピしたURLをブラウザに貼り付けて403 Forbiddenであることを確認しておきましょう。

感想

認証できたから一安心、、、と思いきや少し気になるところもあります。

今回の方法で気になるところは2つ。

htpasswdの配置場所

本当なら公開ディレクトリよりも上に置いておきたいところ。

サーバの仕様上できないので、設定ファイルの記述ミスに注意しましょう。

認証方式

basic認証はBase64でエンコードされていますが、通信を盗み見られると認証情報が漏れる可能性があるので、SSLと組み合わせたいトコロ。

SSLが使えない時はDigest認証を使ったほうがいいかもしれません。

まとめ

今回は、baserCMSで管理画面とサイトにbasic認証をいれてみました。

ユーザとパスワードが両画面共通なので、分けてみてもいいかもしれませんね。

あと、時間があったらdigest認証の方でも挑戦してみます(できるかなぁ。。。)

それでは、このへんで。
バイナリー!

参考

さくらのレンタルサーバ】基本仕様 – さくらのサポート情報

apacheのバージョンを確認しました。(2018.02.04 確認)

認証、承認、アクセス制御 – Apache HTTP サーバ バージョン 2.4

.htaccessの設定を記載する時に参考にしました。
さくらのレンタルサーバの仕様に合わせて、2.4のドキュメントを参照しています。



関連した記事