apache|サーバー
インターネットを頻繁にサーフィンする読者は、このような状況に遭遇することがあります。一部の Web サイト上の特定のリソースにアクセスすると、リソースにアクセスするためのユーザー名とパスワードを求めるダイアログ ボックスがブラウザーに表示されます。ユーザー認証を行う技術です。ユーザー認証は、ネットワーク システム リソースを保護するための最初の防御線であり、すべてのログインを制御し、アクセス ユーザーの正当性をチェックします。その目的は、正当な権限を持つ正当なユーザーのみがネットワーク システム リソースにアクセスできるようにすることです。基本的なユーザー認証技術は「ユーザー名+パスワード」です。
Apache は現在、Linux、Unix、Windows およびその他のオペレーティング システムで実行できる人気の Web サーバーであり、「ユーザー名 + パスワード」認証の問題を十分に解決できます。 Apache ユーザー認証に必要なユーザー名とパスワードは 2 つの異なる方法で保存されます。1 つはテキスト ファイルで、もう 1 つは MSQL、Oracle、MySQL などのデータベースです。 LinuxのApacheを例に、これら2つのストレージ方式それぞれのユーザー認証機能の実装方法を紹介するとともに、WindowsのApacheユーザー認証についても簡単に説明します。
テキスト ファイル ストレージを使用する
この認証方法の基本的な考え方は、Apache が認証機能を開始した後、アクセスを制限する必要があるディレクトリに .htaccess という名前のファイルを作成し、認証設定コマンドを指定することができます。 。ユーザーがこのディレクトリ内のファイルに初めてアクセスすると、ブラウザーはユーザーの身元を確認するためにユーザー名とパスワードの入力を求めるダイアログ ボックスを表示します。正規のユーザーの場合は、アクセスしたページのコンテンツが表示されます。その後、アクセスしたディレクトリ内のすべてのページに対して、ブラウザーがユーザー名とパスワードを自動的に送信するため、再入力する必要はありません。ブラウザが閉じられています。実装の具体的な手順は次のとおりです:
Apache 1.3.12 がコンパイルされ、/usr/local/apache ディレクトリにインストールされていると仮定して、スーパー ユーザー root として Linux に入ります。デフォルトでは、Apache のコンパイル時に mod_auth モジュールが自動的に追加されます。このモジュールを使用すると、テキスト ファイルを保存方法として使用する「ユーザー名 + パスワード」認証機能を実装できます。
1. Apacheの設定ファイル/usr/local/apache/conf/httpd.confを変更し、認証リソースが配置されているディレクトリの設定コマンドを設定します。次の例は、/usr/local/apache/htdocs/members ディレクトリの構成です。
Options Indexes FollowSymLinks
allowoverride authconfig
order allowed,deny
allow from all
このうち、allowoverride authconfig行は、/usr/local/apache/htdocs/ members ディレクトリ内のファイルに対してユーザー認証が許可されていることを示しています。
2. アクセス制限付きディレクトリ /usr/local/apache/htdocs/members に、次の内容のファイル .htaccess を作成します:
AuthName "Member Area"
AuthType Basic
AuthUserFile/usr/local/apache /members.txt
require valid-user
説明: ファイル .htaccess でよく使用される設定コマンドは次のとおりです:
1) AuthName コマンド: 認証ゾーン名を指定します。ゾーン名は、認証を求めるダイアログ ボックスに表示され、ユーザーに表示されます (添付の図を参照)。
2) AuthType コマンド: 認証タイプを指定します。 HTTP 1.0 では、認証タイプは Basic の 1 つだけです。 HTTP1.1 には、MD5 などのいくつかの認証タイプがあります。
3) AuthUserFile コマンド: ユーザー名とパスワードを含むテキスト ファイルを 1 行に 1 組指定します。
4) AuthGroupFile コマンド: ユーザーグループのリストとこれらのグループのメンバーのリストを含むテキストファイルを指定します。グループのメンバーは次のようにスペースで区切られます:
マネージャ:user1 user2
5) require コマンド: どのユーザーまたはグループにアクセスを許可できるかを指定します。例:
require user user1 user2 (user1 と user2 のみがアクセス可能)
requiregroupsmanagers (グループマネージャーのメンバーのみがアクセス可能)
require valid-user (AuthUserFile で指定されたファイル内の任意のユーザーがアクセス可能)
3. Apache に付属のプログラム htpasswd を使用して、ユーザー名とパスワードを含むテキスト ファイル /usr/local/apache/members.txt を生成します。各行の形式は「ユーザー名:パスワード」です。
#cd /usr/local/apache/bin
#htpasswd -bc ../members.txt user1 1234
#htpasswd -b ../members.txt user2 5678
テキストファイル members.txt には次の 2 つが含まれていますユーザー: user1、パスワードは 1234; user2、パスワードは 5678。ユーザーによるダウンロードを避けるため、このテキスト ファイルを Web ドキュメントのディレクトリ ツリーに保存しないでください。
htpasswd プログラムのヘルプについては、htpasswd -h を実行してください。
ユーザー数が比較的少ない場合、この方法はユーザー認証に便利で手間がかからず、メンテナンス作業も簡単です。しかし、ユーザー数が数万人、さらには数十万人になると、ユーザーを見つけるのにある程度の時間がかかり、サーバーの効率が低下します。この場合、データベース方式を使用する必要があります。
データベースストレージの使用
現在、Apache、PHP4、および MySQL は、Linux で Web サイトを構築するための最良のパートナーです。これら 3 つのソフトウェアはすべてフリー ソフトウェアです。この 3 つを組み合わせて、PHP4 と MySQL を HTTP プロトコル経由で使用して、Apache のユーザー認証機能を実装します。
ユーザー認証はPHP4をApacheモジュールとして実行する場合のみ行えます。このため、Apache をコンパイルする場合は、PHP4 モジュールを追加して一緒にコンパイルする必要があります。 Apache のモジュールとして PHP4 を使用することを想定し、Apache を /usr/local/apache ディレクトリにコンパイルしてインストールし、MySQL を /usr/local/mysql ディレクトリにコンパイルしてインストールします。次に、次の手順に進みます:
1. MySQL でデータベース メンバーを作成し、その中に正当なユーザーのユーザー名とパスワードを保存するテーブル users を作成します。
1) vi コマンドを使用して、/tmp ディレクトリに SQL スクリプト ファイル auth.sql を作成します。内容は、
メンバーが存在する場合はデータベースを削除する;
データベース メンバーを作成する;
メンバーを使用する;
テーブルを作成するです。 users (
ユーザー名 char(20) not null,
パスワード char(20) not null,
);
insertsintosusersvalues("user1",password("1234"));
insertsintosusersvalues("user2 ",password( "5678"));
2) MySQLクライアントプログラムmysqlを起動し、上記SQLスクリプトファイルauth.sqlのコマンドを実行し、usersテーブルに2つのユーザーレコードを追加します。
#mysql -u root -pmypwd</tmp/auth.sql
2. PHPスクリプトヘッダーファイルauth.incを書きます プログラム内容は、
functionauthenticate() {
Header ( 'WWW-authenticate: Basic realm="メンバーエリア"');
Header('HTTP/1.0 401 Unauthorized');
echo "正しいユーザー名とパスワードを入力する必要があります。 ";
exit;
}
function CheckUser(, ) {
if ( == "" || == "") return 0;
= "SELECT username,password FROM usersswheresusername='' andpassword=password('')";
= mysql_connect('localhost', 'root', 'mypwd');
mysql_select_db('member',);
= mysql_query(, );
= mysql_num_rows();
if (>0) {
return 1; //有効なログイン
} else {
return 0; //無効なログイン
}
}
?>
関数Authenticate('WWW)を使用する-authenticate: Basic realm="Member Area"') は、ブラウザに認証要求メッセージを送信し、ブラウザにユーザー名/パスワードのダイアログ ボックスをポップアップさせます。ユーザーがユーザー名とパスワードを入力すると、この PHP スクリプトを含む URL が自動的に再度呼び出され、ユーザー名、パスワード、認証タイプが PHP プログラムの 3 つの特殊変数に保存されます。これら 3 つの変数値を使用して、ユーザーが正当であるかどうかを判断します。 Header() 関数では、basic は基本認証タイプを表し、realm の値は認証ゾーン名を表します。
Function Header('HTTP/1.0 401 Unauthorized') により、ブラウザ ユーザーは間違ったユーザー名またはパスワードを連続して複数回入力すると、HTTP 401 エラーが発生します。
関数CheckUser()は、ブラウザユーザーが送信したユーザー名とパスワードがMySQLデータベースのものと同じかどうかを判定するために使用され、同じであれば1を返し、そうでなければ0を返します。 mysql_connect('localhost', 'root', 'mypwd') のデータベース ユーザー名 root とパスワード mypwd は、独自の MySQL 設定に従って変更する必要があります。
3. アクセスを制限する必要がある各 PHP スクリプトの先頭に、次のプログラム セグメントを追加します:
require('auth.inc');
if (CheckUser(,)==0) {
authenticate();
} else {
echo "これは正規のユーザーがアクセスしたいWebページです。" //この行を正規のユーザーへのWebページ出力に変更します
}
?>
;正規のユーザーによって表示される Web ページのコンテンツは、上記のプログラム セグメントの 1 行を置き換えて else 句に配置されます。たとえば、ユーザーが PHP スクリプト プログラムにアクセスするときは、ユーザーの身元を確認するためにユーザー名とパスワードを入力する必要があります。
Windows版Apacheユーザー認証
1. テキストファイルを使用してユーザー名とパスワードを保存する場合、方法は以前と同じですが、パスを表すディレクトリ名の間、およびディレクトリ名の間にスラッシュを使用する必要があることに注意してくださいファイル名はバックスラッシュ "" ではなく /" になります。
2. MySQLデータベースを使用してユーザー名とパスワードを保存する場合は、まず以下の方法に従ってPHP 4.0.3をApacheモジュールとして実行し、その後上記の「ユーザーを保存するデータベースを使用したユーザー認証」の方法に従って完了させます。名前とパスワード」。
1) Windows バージョンの Apache 1.3.12、PHP 4.0.3、MySQL 3.2.32 をダウンロードし、3 つのソフトウェアをそれぞれ C: pache、C: PHP4、および C: mysql ディレクトリにインストールします。
2) C:PHP4SAPI ディレクトリには、一般的に使用される Web サーバー用のいくつかの PHP モジュール ファイルが含まれています。php4apache.dll を Apache の modules サブディレクトリ (C: pachemodules) にコピーします。
3) Apache の設定ファイル C:pache nfhttpd.conf を変更し、次の行を追加します:
LoadModule php4_module modules/ php4apache.dll
AddType application/x-httpd-php .php3
AddType application/x-httpd -php- source .phps
AddType application/x-httpd-php .php
最初の行は、ユーザー認証ができるようにPHP4をApacheモジュールとして実行するもので、最後の3行はPHPスクリプトプログラムの拡張子を定義しています。
4) autoexec.batファイルのPATHコマンドにPHP4があるパス「C:PHP4」を追加し、コンピュータを再起動します。
私のテストの後、Apache のバージョン 2.0 は動作しません