… md5sumのハッシュ値の求め方と、 .htaccess と .htpasswd で basic 認証の検証

neko1sa.gif .htaccessと.htpasswdでbasic認証を検証してみる。 CentOS5.4


今回は私の検証用マシンであるCentOS5.4で hogeユーザのホームに public/test/ というAliasを作り、 .htaccessと.htpasswdでbasic認証ができるかどうかを確認してみました。
(なおbasic認証と関係ありませんが、おまけとしてこのページの一番下の方にmd5sumのハッシュ値の求め方を 簡単に記してあります。)


以下は、Windows XP professional sp3 にいれてあるteratermでCentOSにアクセスして、Apacheのバージョン情報を引き出してみたところです。 httpd-2.2.3-31.el5.centos.2 となっています。

teraterm


以下はCentOS のカーネルのバージョン情報やOSのバージョンなどです。CentOS release 5.4 (Final)となっており、
Linux hoge 2.6.18-164.6.1.el5 #1 SMP Tue Nov 3 16:18:27 EST 2009 i686 i686 i386 GNU/Linux と表示されています。

version

上記のバージョン情報が2009年11月23日現在の私のCentOSの環境になります。



.htaccessファイルの作成

.htaccessファイルというのはApacheの機能をユーザ側で設定するためのファイルです。
Apache本家のApache チュートリアル: .htaccess ファイルの認証の例より下のコードを参考に各環境に合わせて変更をします。

AuthType Basic ← BasicTypeの宣言
AuthName "Password Required" ← ここは認証の時のダイアログのタイトルなので変更可。
AuthUserFile /www/passwords/password.file ← ユーザとパスワードが書かれているファイルの場所。
AuthGroupFile /www/passwords/group.file ← 必要としなければ省略可。
Require Group admins ← 必要としなければ省略可。


では、上のコードを私のテストの場所用にと変更します。

AuthType Basic ← BasicTypeの宣言
AuthName "hogehoge site" ← ここはhogehogeサイトとしました。
AuthUserFile /home/hoge/public/test/.htpasswd ← ユーザとパスワードが書かれているファイルの場所。
Require valid-user ← 許可したユーザを承認するという意味。
DirectoryIndex index.html index.htm ← indexファイルとして使うファイルの種類。省略可。


作成方法はいろいろありますが、とりあえず、今回は以下のような方法で作成してみました。
特権ユーザである root で操作します。画面の何もないところで右クリックして " 端末 " を表示し、以下のような手順で作成していきます。

251.png
空の .htaccessファイルが開きました。


今度はこのまま " vi " で編集しますので、キーボードで v i と続けて打ってください。
252.png


253.png
編集が終わったら、Escキーを打ち、続けてコロン" : " を打ち、 w q と入力してEnterキーを押すと元のless の端末画面へ戻ります。

less コマンドを抜けるにはキーボードの q を打ちます。
254.png
端末を終了するには exit と入力すれば端末は終了します。



さて、上ではLinuxのCentOSで作成しましたが、では、Windowsでは?
作り方はいたってシンプルに、まずエディタを用意します。
Windows付属のメモ帳では、標準UNIXなどとは改行コードなどが違うということをご承知おきください。
Windowsの改行コードは " CR + LF " であり、標準UNIXなどでは " LF " になります。ただの " CR " はMacです。


hide2.png

上記のように記述ができましたら、以下のように " .htaccess " と名前を付けて保存します。

hide.png

上の図は秀丸エディタですが、下図ではWindows付属のNotepad.exeを使用してみました

note.png

memo2.png .htaccessファイルの完成です。




.htaccessの設定

この " .ht " で始まる名前がついたファイルについては、Apacheの設定の " Section 2: 'Main' server configuration " にあります。

#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives. See also the AllowOverride
# directive.
#
AccessFileName .htaccess


上記の記述はAccessFileの設定になります。 デフォルトでは、AccessFileの名前は .htaccess となっていますが、変更は可能です。
ただし、ファイル名を変更はしても、ファイル名の前に必ず . (ドット)をつけるのを忘れないようにしてください。


また、以下のような記述があり、デフォルトでは " .htaccess " と " .htpasswd " など " .ht " で始まるファイルは表示しない設定に なっています。

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>


ちなみに Order allow,deny と記述されているところの意味は、 " allow " は、" 許可 " であり、 " deny " は、" 拒否 " の意味を持ちますが Apacheの評価の順番でもあります。
例えば、次に続く " Deny from all " は、" すべて、どこからも許可しない " という意味になります。
仮にここを、" Deny from 192.168.0 " などとし、" Allow from .xxxxx " などと続けると、 " ただし、.xxxxx だけは許可する " という ように変化します。詳細については " Order ディレクティブ " をご覧くださいますように。


また、以下はサンプルですが、表示させないファイル名を " .(htpasswd|htaccess) " と記述して狭い範囲で指定してあります。

#
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>





.htaccessファイルを使用できるようにするには、以下のようにApacheのAllowOverride ディレクティブの設定も必要です。

<Directory /home/hoge/public/test>
#  AllowOverride FileInfo AuthConfig Limit
   AllowOverride All ← この行の設定が必要。
   Options Indexes ExecCGI MultiViews SymLinksIfOwnerMatch IncludesNoExec FollowSymLinks

#    <Limit GET POST OPTIONS>
#        Order allow,deny
#        Allow from all
#    </Limit>
#    <LimitExcept GET POST OPTIONS>
#        Order deny,allow
#        Deny from all
#    </LimitExcept>
</Directory>

ここでは横着をして " All " つまりデフォルトのままにしてありますので、各自の環境において的確に変更をお願いいたします。

詳細についてはApache本家のAllowOverride ディレクティブをご覧ください。


※ なお、自分でApacheの設定が直接できる環境ではなく、レンタルサーバなどであるのなら .htaccessファイルを作成するだけでよく、この設定は不必要かと思われます。
レンタルサーバ事業者では、.htaccess の編集を許可するかどうかはそれぞれ個々の事業者によって違いますので、 確認をされてくださいますように。




.htpasswdの作成

.htaccessファイルの作成が無事に終了したら、今度はアクセスできるユーザとそのユーザのパスワードを 暗号化して記述するファイルを .htpasswdという名前で作成してみます。ここで暗号化するには crypt関数 を使用します。何故md5sum ではダメなのか? といえば、md5sum で暗号化した文字列は戻すことができませんから。


hoge1234というユーザのパスワードを hoge1234 として crypt関数 で暗号化し、rootユーザの現在置に pass.txt という名前で作成します。

# htpasswd -c ./pass.txt hoge1234



入力した文字列は表示されませんので、注意しながら間違えないように入力してください。
hoge1234 ユーザの password を作ったよ、といっています。

# New password:
Re-type new password:
Adding password for user hoge1234



less コマンドで pass.txt を開いて見てみます。

# less pass.txt
hoge1234:ewa0g87i/z6HU





同じ password ファイルに追記する場合は以下のように htpasswd コマンドを使用し、続けてファイル名、ユーザ名と記述します。
例えば、hoge7890 というユーザのパスワードを作成し、上記と同じ pass.txt に追記をする場合、

# htpasswd pass.txt hoge7890


すると上記と同じようにパスワードを聞いてきて、hoge7890 ユーザの password を作ったよといってきました。


# New password:
Re-type new password:
Adding password for user hoge7890



先ほどと同じように lessコマンドで確認してみると、最初のhoge1234ユーザの下に hoge7890ユーザとその暗号化されたパスワードが追記されていました。

# less pass.txt
hoge1234:ewa0g87i/z6HU
hoge7890:huoLM5CyXL4jU




今度はこの pass.txt ファイルの名前を mv コマンドで .htpasswd と変更します。

# mv pass.txt .htpasswd     ← Enterキーを押す



ファイルの前に " . " (ドット)を付けると隠しファイルとなり、表面上は見えなくなってしまいますから確認は端末でします。

lsコマンドでデスクトップを見ると確かに .htpasswdファイルはありました。
sample_pass-012.png


 残念ながらWindows XP上では htpasswdコマンドに該当するものはありませので、 Windows版のApacheなどを導入してみたり、web上のツールを利用してみたりするほかないようです。
私の場合はWindows側では検証用としてCygwinXAMPPなどを利用したりします。


なお、web上のその場で .htaccess と .htpasswd 作成ができるような便利なツールもあります。参考までにどうぞ。 1. 2.

.htaccess と .htpasswd の設置

これでbasic認証サイトを作るのに必要な .htaccess と .htpasswd がそろいましたので、 これを認証サイトの検証用に作成しておいた /home/hoge/public/test/ にこれらのファイルをおいて、ブラウザからアクセスをしてみます。
この時にちゃんと中へ入れたかどうかがわかるように簡単なindex.htmlファイルを置いておくのもよろしいのではないかと思われます。



まずはCentOSのFirefoxでURLは test/ がある場所にアクセスしてみます。
ここでは別名に geho を付けてありますので、hoge.hogehoge.local/geho/test という事になります。
当然のことながら、このURLは各自の環境によって違ってきますので、ご注意ください。このURLはここだけの検証用のものです。

brows01.png


先ほどのhoge1234ユーザのパスワードを普通にキーボードで入力します。

brows02.png


入れましたね~♪

brows03.png

※ ちなみにUnix/Linuxでは、Microsoft社の Internet Explorer はありませんので、 IE での表示確認はできません。




今度はWindows側のFirefoxで確認をしてみたいと思います。

wf.png
大丈夫のようですね




下の画像はMicrosoft社のInternet Explorer8での表示確認画面です。

ie.png
どうやら大丈夫のようです。



なんとかCentOS5での.htaccessと.htpasswdでbasic認証サイトは無事に作成することができ、また、無事に動作確認もできました。
私のところではもう、設定済みのため、説明を省いてしまってありますが、環境によってはApacheのAliasの設定なども 必要になることもあるかもしれません。





★ おまけ ★

md5sumハッシュ値の求め方

これは basic ではありませんが、よく聞く言葉なのでとりあえず、おまけとして書いておきます。
(本当は自分のためです。忘れてしまうといけないので・・・・ )
なお、ここで説明している方法はCentOS5での求め方です。Windowsにはmd5sumのハッシュ値を求めるツールはデフォルトではありませんので、 もしもWindows側でmd5sumのハッシュ値を求めたいような場合には、それなりのツールをどこからかもらってくる必要があることになります。

以下は私のWindows XP Professional SP3 のCygwinのxtermでmd5sumのハッシュ値を求めてみたものです。
cyg-x.png
下で説明するCentOSでのハッシュ値と同じになりました。
(1995年11月15日以前はシグナスソリューションズ(Cygnus Solutions )が開発をしていましたが、2009年12月現在では RedHatと合併しています。)



では次にCentOSでは、端末を使用します。
以下のように入力して、ファイル名を指定しておくとそのファイルを作成し、そこへ記入します。

#  echo hogehoge0987 | md5sum > md5pass


横着をしていますけれど、説明だけはしたいと思います。
hogehoge0987 というのはハッシュ値を求めたい文字列です。
| はアルファベットのエル " l " ではなく、"パイプ" と通常はいいます。md5sum > md5pass は md5sumの値をmd5passというファイルを作成して そこへ記述しておくように、との指定です。

md5sum.png


なお、このファイルに追記をしたい場合には、以下のように > を2回入力します。

#  echo hogehoge0999 | md5sum >> md5pass


上のように文字列のハッシュ値ではなく、ファイルなどのハッシュ値を求めたいときも同じです。
例えば " report.txt " というファイルのハッシュ値を求めたいときには、以下のように端末で入力してEnterキーを押します。

#  md5sum report.txt > md5sum.txt


" report.txt " のハッシュ値を " md5sum.txt " というファイルを作成してそこへ記述して置くようにと指定しました。

このハッシュ値が正しいかどうかチェックをするときには、、以下のように端末で入力してEnterキーを押します。

#  md5sum -c md5sum.txt


正しければ " report.txt: 完了 " というメッセージを表示します。
正しくないときには、 " report.txt: 失敗 " というメッセージになります。これだけです。

また、ディレクトリの中のファイル全部のハッシュ値を求めたいときには以下のようにします。
(ここでは例として、ディレクトリの名前を " doxgen_work " とします。)

#  md5sum doxgen_work/* >md5sum.txt

ファイルに追記したいときには、>> となりますので、以下のようになります。
#  md5sum doxgen_work/* >> md5sum.txt


md5sum.txtを見るときには catコマンドを使うと軽いのでいいかもしれません。
" cat md5sum.txt " と端末に入力してEnterキーをおしますと表示されます。
" less " コマンドは編集するときにはそのままviで編集モードになれるので私は重宝しますが、 ただ見るだけであればcatコマンドで十分かと思われます。

チェックしてどこも異常がなければ、そのまま"完了"で終わりますが、どこかが変更されていたりすると
"失敗" という言葉が出て、 " md5sum: WARNING: 1 of 6 computed checksums did NOT match " とメッセージが表示されます。
この意味は、6ファイルのうち1ファイルがmatchしない、というような意味になりますので、これが表示されたら、 どこかが変更されているということになります。

md5sum でチェックできるのはここまでになりますので、どこが違うかを探し出すのは、diffコマンドなどで調べます。
( 当然のことながら、元のファイルをバックアップしておかなければ比較のしようがありませんので、念のため。)

Windowsなどでは、WinMergeの日本語版などがあります。
http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html#downloads よりダウンロードができます。


以上簡単におまけのmd5sumの使い方を書いてみました。
なお、" md5sum " のマニュアルを見るには、 " man md5sum " と端末に入力してEnterキーを押せば以下のような マニュアルを見ることができます。


MD5SUM(1) MD5SUM(1)

名前
md5sum - MD5 ハッシュチェックサムを計算・チェックする

書式
md5sum [-bctw] [--binary] [--check] [--status] [--text] [--warn] [FILE...]

md5sum [--help] [--version]

説明
md5sum は 128 ビットのチェックサム (「指紋 (fingerprint)」「メッセージダイジ ェ ス ト 」と 呼ばれることもある) をFILE 各々に対して計算して表示する。
FILE が一つも与えられないと標準入力から読み込む。また FILE が ‘-’ だった場 合には、そのファイルには標準入力が用いられる。

チ ェ ックサムを計算したときの各入力 FILE に対する出力フォーマットは、 MD5 sum 値・スペース・ファイルタイプを示す文字 (バイナリなら ‘*’、テキストなら ‘ ’)・ファイル名、からなる。 --check は入力がこのフォーマットであるものとみなす。

オプション
-b, --binary
各入力ファイル FILE を場異なるモードで読み込む。 Unix システムで は バ イナリファイルとテキストファイルの区別がないので、このオプション は何の効果も無い。これは DOS プラットフォームではデフォルトになって いる。

-c, --check
指 定された FILE それぞれからファイル名とチェックサムのペアを読み込 み、各ファイルに対応するチェックサムが正しいかどうかを報告 す る 。
--check は入力に md5sum 自身の出力と同じフォーマットを期待する。

例えば:
md5sum *.txt > checksums.md5
md5sum --check checksums.md5

--text すべての入力ファイルをテキストファイルとして扱う。




★ おまけのおまけ ★

md5sumハッシュ値がWindowsのコマンドプロンプトで求めると違う???

cygwinのbinディレクトリへのpathが通っていれば、Centosと同じ方法でmd5sumを使うことができるのではないかと思い、 試してみたら、上のcygwin や CentOS と同じ文字列のハッシュ値を求めたにもかかわらず、違う値が返ってきました。
win_cmd.png
上のcygwinやCentosで試してみた文字列 " hogehoge0987 " のハッシュ値は、 " 1e74026a07ce8c0ba11ad18caba0d224 " だったのですが・・・?
なぜ、Windowsのコマンドプロンプトだけが違う値を返してくるのでしょうか?
私の環境だけ???・・・また、原因のわからない出来事に遭遇しちゃった・・・シクシク・・・・あとで調べます。
(もしかすると、Windowsの使用している認証方式の違いによるものなのでしょうか?・・・そんな気もチラホラ・・)

なお、上のコマンドプロンプトの画像の赤い矢印のコマンド類はWindowsのものではなく、 cygwinのbinディレクトリに入っているunix/Linuxコマンドです。
(何が嬉しいって、Windowsのコマンドプロンプトでこれらunix/Linuxコマンドが使えるというのが私にとっては、とっても楽です♪)



もしも、pathの通し方がわからないようでしたら、cygwinのbinディレクトリを探し、その場所を以下のような方法で編集します。
1.デスクトップのマイコンピュータを右クリックしてプロパティを選択
2.システムのプロパティ画面から " 詳細設定 " を選択
3.起動と回復の下にある " 環境変数 " ボタンを押す
ctrlp.png
4.ここでは Cドライブの直下に cygwinがあり、その下にbin が入っているとして、環境変数のPathのところの末尾に ;C:¥cygwin¥bin と 入力して編集を終了します。この時、既存のpath文字列の末尾に " ; (セミコロン)" をつけて、新しく追加するpathを付け加えます。 当然のことながら、このcygwinの入っている場所はご自分の環境に合わせて変更なさってくださいますように。

5.編集が終了したら、Windowsのスタートメニュー → ファイル名を指定して実行のところへ cmd と入力してOK → コマンドプロンプトが表示されたら 操作はCentosなどの端末でコマンドを入力するのと同じ要領で、cygwinのunix/Linuxコマンドツールを使うこともできちゃいます♪