ユーザ認証ページを作るには?その1

Webページの中にはユーザ認証を求められるものがある。Apacheではディレクトリごとにパスワードによる制限を設定することにより、Webページにパスワードを設定できる。

パスワード制限を設定する方法は、httpd.confに記述する方法と、それぞれのディレクトリに.htaccessという設定ファイルを置く方法の2つがある。

1.httpd.confによるパスワード制限

1.パスワードファイルを作成する

パスワードファイル「.htpass」を作成し、利用者を登録する。

# htpasswd -c /etc/httpd/.htpass ando ←htpassファイルを作成し、andoというユーザのパスワードを設定する
New password: ******** ←パスワードを入力
Re-type password: ******** ←もう一度パスワードを入力
Adding password for user ando ←ユーザandoのパスワードが作成された

2.httpd.confを編集する

viでhttpd.confファイルを開き、ファイルの最後に以下の文を追加する。

<Directory "/home/httpd/html/manual"> ←パスワードを設定するディレクトリのパス
  AuthUserFile /etc/httpd/htpass ←パスワードファイルの場所
  AuthType Basic
  AuthName ByPassword
  <Limit GET POST>
    require user ando ←ユーザ名
  </Limit>
</Directory>

保存後、Apacheを再起動する。これにより、rina.denpa.ac.jp/manualにアクセスするとネットワークパスワード入力画面が現れる。

2. .htaccessによるパスワード制限

1.httpd.confを編集する

viでhttpd.confファイルを開き、ファイルの最後に以下の文を追加する。

<Directory "/home/*/public_html">
  AllowOverride All
</Directory>

保存後、Apacheを再起動する。

2.ディレクトリ別に設定を行う

アクセス制限をするディレクトリを決定し、設定を行う。今回はユーザandoのpublic_html内のmembersディレクトリにパスワード制限を掛ける。パスワードファイルは/home/ando/binディレクトリに格納する。

  1. andoでログイン
  2. パスワードファイルを格納するディレクトリを作成
    # mkdir bin
  3. .htpassファイルを作成し、andoというユーザのパスワードを設定する。
    # htpasswd -c bin/.htpass ando
    New password: ******** ←パスワードを入力
    Re-type password: ******** ←もう一度パスワードを入力
    Adding password for user ando ←ユーザandoのパスワードが作成された
  4. .htpassファイルに、認証を許可するほかのユーザを追加する。
    # htpasswd bin/.htpass ほかのユーザ名 ←「-c」は付けない
    New password: ******** ←指定したユーザのパスワードを入力
    Re-type password: ********
    Adding password for user ほかのユーザ名
  5. パスワード制限を掛けるディレクトリを作成
    # mkdir public_html/members
  6. パスワード制限を掛けるディレクトリ(members)内に.htaccessファイルを作成
    # vi public_html/member/.htaccess
    以下の文を入力して保存する。
    AuthUserFile /home/ando/bin/.htpass
    AuthType Basic
    AuthName ByPassword
    <Limit POST GET PUT>
      require user ando
      require user ほかのユーザ名
    </Limit>

設定を確認する。これにより、http://rina.denpa.ac.jp/~ando/membersにアクセスするとネットワークパスワード入力画面が現れる。

3.htpasswdについて

htpasswdは、パスワードを生成するプログラムである。このプログラムで作成したパスワードファイルは、パスワードが暗号化される。
.htpassファイルをcatで確認してみよう。

4.応用設定

.htaccessによるパスワード制限の場合、上記の設定方法だとユーザが増えた場合、binディレクトリ内の.privateファイルと、public_html/membersディレクトリ内の.htaccessファイルを編集しなければならない。2つの異なったディレクトリの操作になるため面倒である。そこで、グループファイルを使った方法を紹介する。

  1. .htaccessファイルを以下のように変更する
    AuthUserFile /home/ando/bin/.htpass
    AuthGroupFile /home/ando/bin/.htpass-g
    AuthName "ByPassword"
    AuthType Basic
    <Limit POST GET PUT>
      require group private-users
    </Limit>
    <Files .htaccess>
      order deny,allow
      deny from all
    </Files>
  2. binディレクトリに.htpass-gという名前のファイルを作成し、次の文を追加する。
    private-users: ando
    private-users: ほかのユーザ名

これにより、membersディレクトリ内の.htaccessファイルを更新する必要が無くなる。ユーザが増えた場合はbinディレクトリの.htpassファイルにユーザを追加し、同じディレクトリ内の.htpass-gファイルを編集すればよい。

5.応用設定・2

認証を行うユーザを指定する場合、上記の基本設定では.htaccessファイルまたは.htpass-gファイルに

require user ando
require user ほかのユーザ名

のように、対象ユーザを全て記述しなければならない。
パスワードファイル.htpassに登録した全てのユーザを認証対象とする場合、.htaccessファイルを以下のように変更する。

AuthUserFile /home/ando/bin/.htpass
AuthGroupFile /dev/null
AuthName "ByPassword"
AuthType Basic
<Limit POST GET PUT>
  require valid-user
</Limit>
<Files .htaccess>
  order deny,allow
  deny from all
</Files>

これにより、パスワードファイル.htpassに登録されている全てのユーザが認証対象になるため、ユーザが増えても.htaccessファイルを編集する必要は無い


[ TOP ]