from 和ジオ

失われたソースファイル 6

コピーアンドペースト用の記事

失われたソースファイル 6

ありがちなんだけど良くなくしてしまうスクリプトファイルなどを おいておく場所です。

httpd で BASIC認証を使う .htaccess の書き方

Web のディレクトリに BASIC認証でパスワードをかける方法。 ディレクティブの上書きを 許可しているサーバでないと使えません。

本気でよくあるので手短にいきます。乱文すいません。

まず、下記の様式で ユーザ名と DES crypt されたパスワードを記載したファイルを 適当なファイル名(例では .hapasswd) で作成する。(通常は DES crypt のハズ)

[ユーザ名]:[DES cryptパスワード]

実際にはこんなかんじ。ユーザ名 hogehoge。パスワード hogehoge。DES Salt ho。の例。

hogehoge:hostUTQy51ECM

パスワード用の、DES crypt 文字を作るのは、 2文字 SALT の標準 DES 暗号文字列作成 PHPスクリプト などを使う。 インターネット上で変換サービスしているところもあるので、 そこを使っても良い。(が、本気で使う場合は、当然通信経路等あまり安全ではないので ローカルで作成すること)

作成した .htpasswd を 対象Webサーバの、どこかしらのディレクトリに 保存する。 なるべく、Webサーバ利用者からみえないところが 良い。 public_html 以外のところに保存できればよりよい。 レンタルサーバでそれができない場合は、あきらめて たどり着けないようなディレクトリを作り保存する。

BASIC 認証をかけたいディレクトリに、

.htaccess

というファイル名で、下記の様式を保存する。

AuthUserFile [.htpasswd ファイルへの"フルパス"]
AuthGroupFile /dev/null
AuthName "[適当な名前(認証ダイアログに出力される)]"
AuthType Basic
require valid-user

[.htpasswd ファイルへの"フルパス"] は、サーバ上の絶対パスなので注意。 httpd のドキュメントルートからではない。実際には、

/usr/home/‾hoge/private_file/.htpasswd

みたいな感じ。もしレンタルサーバでフルパスが分からなければ、

#!/usr/local/bin/perl

$dir = `pwd`;
chop($iam);

print "Content-type: text/html¥n";
print "¥n";
print "<html>¥n";
print "<head>¥n</head>¥n";
print "¥n";
print "<body>¥n";
print "¥t<p>This CGI is execed by ¥"<strong>$dir</strong>¥" Directry.</p>¥n";
print "</body>¥n";
print "¥n";
print "</html>¥n";

exit;

という CGI を .htpasswd と同じディレクトリにアップロードし ブラウザから CGI を起動するとフルパスが分かる。 このCGI が なにをやっても、Internal Server Error とかで動かない場合はあきらめる。 Perl から UNIX コマンドが呼べていない。 そんなサーバの場合は大抵、BASIC認証も対応していない。

CGI が動かないディレクトリに .htpasswd を入れた場合は、他のディレクトリで動かして 気合いで推測する。

やってみる

以上の設定をして、ブラウザで対象ディレクトリにアクセスすると ユーザ名 / パスワードを聞いてくると思われます。

もし、 Internal Server Error がでるばあいは、 .htaccess の 内容に誤りがあるか、ディレクティブの上書きが許可されていません。

ユーザ名 / パスワードが通らない場合は、 .htpasswd ファイルへの パスが間違っているか、パーミッションがよろしくないのかも。

ためしてがってん。