アクセス制限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のパスワードが作成された
      # htpasswd /etc/httpd/.htpass furu1 ←htpassファイルに、furu1というユーザのパスワードを追加する
      -cは付けない)
      New password: ********
      Re-type password: ********
      Adding password for user furu1 ←ユーザfuru1のパスワードが作成された

    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 ←ユーザ名
      require user furu1
      </Limit>
      </Directory>

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

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

    1. httpd.confを修正する

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

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

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

    3. アクセス制限をするディレクトリを決定し、設定を行う。今回はユーザ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ファイルに、furu1というユーザのパスワードを追加する
        -cは付けない)
        # htpasswd bin/.htpass furu1
        New password: ********
        Re-type password: ********
        Adding password for user furu1 ←ユーザfuru1のパスワードが作成された
      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 furu1
        </Limit>

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

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

応用設定

.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: furu1

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

応用設定2

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

require user ando
require user furu1

のように、対象ユーザを全て記述しなければならない。
パスワードファイル.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ファイルを編集する必要は無い。