トップページ | 利用規定
  ベーシック認証(パスワードでアクセス制限)

カレッヂ
カレッヂ


通常はホームページには誰でもアクセスできますが、アクセス制限をすることによって、
  1. パスワード登録されたユーザをパスワードで規制する
  2. ホスト名で制限/許可する
ようにできます。誰かがホームページを見に来たら、サーバは、そのホームページのファイルが あるディレクトリに「.htaccess」という名前のファイル(以下、設定ファイル)があるかどうかを調べます。 無ければ、そのままそのホームページのファイルを取り出(表示)します。設定ファイルがあれば、 サーバはその中身を検討します。その中身にアクセス制限をする記述をすればいいわけです。


基本設定

ここでは「public_html」の下に「private」という名前のサブディレクトリを作って、そこから下の階層 にアクセス制限を設けることにします。

ネットスケープコマースサーバの場合は、設定ファイル名や方法が若干異なります。 一番最後に解説します。

  1. 全体の構図

    必要なファイルを置く場所を決めます。

    「private」までのパスが「/home/usr01/b/rescue/public_html/private」だと仮定します。

       /home/usr01/b/rescue/binディレクトリ(新たに作成します)
    
                             .private(usernameとpasswordが入るファイル)
                             htpasswd(.privateを作成するプログラム)
    
       /home/usr01/b/rescue/public_htmlディレクトリ
       /home/usr01/b/rescue/public_html/privateディレクトリ(新たに作成します)
    
                             .htaccess(プロテクト設定ファイル)
    
  2. usernameとpasswordが入るパスワードファイルを作る

    アクセスを許可する者を設定します。例えば、許可する者のusernameとpasswordを次のように決めたとします。

      username  password
      ------------------------
      ichiro    yank7856
      jiro      fujk5528
      saburo    tyud9641
    

    パスワードを生成するプログラムhtpasswdをインストールする

    • プロバイダによっては既に用意してあるところもありますので、まず確認してください。
    • ソース一式(保存名:htpasswd.tar.gz)

      展開方法
      telnet% gzip -d htpasswd.tar.gz
      telnet% tar xvf htpasswd.tar
      telnet% ls -l
      -rw-r--r--   1 rescue   other       1129  03:05 Makefile
      -rw-r--r--   1 rescue   other      19496  15:17 htpasswd
      -rw-r--r--   1 rescue   other       3930  03:06 htpasswd.c
      -rw-r--r--   1 rescue   other      28160  11:34 htpasswd.tar
      
      ここで、既にコンパイル済みのhtpasswdがあります。以下のようにパーミッションを700にし、
      実行させてみてUsageが表示されれば、コンパイル作業を回避できます。
      
      telnet% chmod 700 htpasswd
      telnet% pwd
      /home/rescue/bin
      telnet% /home/rescue/bin/htpasswd
      Usage: htpasswd [-c] passwordfile username
      The -c flag creates a new file.
      
    • gccコンパイラを使ってコンパイルしますので、gccがパスの通っている場所にあるか? パスが通っていれば、「% which gcc」でそのパスが表示されます。
    • それで表示されなければプロバイダに問い合わせてください。
    • パスが通っていない場合は、調べたパスを「Makefile」内の「CC = gcc」という記述を 書き換えます。例えば「/opt/gnu/bin」というディレクトリにある場合は、「CC = /opt/gnu/bin/gcc」 と書きます。
    • 用意が整ったらこの2つのファイルをアスキーモードで転送します。
    • シェルでコンパイル開始します。「% make」でコンパイル開始です。
    • 正常終了すれば、「htpasswd」が作成されている筈です。
    • 実行させてみてください。Usageが表示されれば動作確認OKです。

         % htpasswd
         Usage: htpasswd [-c] passwordfile username
         The -c flag creates a new file.
    



さて、個人個人のパスワード設定をしましょう。「-c」を付けるのは最初(新規にファイルを作る場合) だけです。次から付けてしまうと上書きされてしまうので、注意してください。

> ./htpasswd -c .private ichiro
Adding password for ichiro.
New password: (パスワード入力時は表示されません)
Re-type new password:

> ./htpasswd .private jiro
Adding user jiro
New password:
Re-type new password:

> ./htpasswd .private saburo
Adding user saburo
New password:
Re-type new password:

確認してみましょう。

> ls -l -a
total **
-rw-r--r--  1 rescue         58 Mar 25 23:25 .private
-rwxr-xr-x  1 rescue      32768 Mar 25 23:25 htpasswd

> cat .private
ichiro:3v722ToqBywYY
jiro:xXaMsy/eplKno
saburo:usni8FWoz2DiY
パスワードは暗号化されています。これでOKです。 3v722ToqBywYYという13文字は暗号された部分で、DES( Data Encryption Standard )という方式です。 1977年にアメリカ商務省標準局(NBS)が定めたデータ暗号標準です。複合(暗号からパスワードに戻すこと)は出来ない方式です。 解析するなら、総当りや推測を行うしかありません。

  • プロテクト設定ファイルを作る

    1. エディタ等で下記の内容の設定ファイル「.htaccess」を作成します。
      AuthUserFile     /home/usr01/b/rescue/bin/.private
      AuthGroupFile    /dev/null
      AuthName         "ByPassword"
      AuthType         Basic
      <Limit POST GET PUT>
      require user ichiro jiro saburo
      </Limit>
      <Files .htaccess>
      order deny,allow
      deny from all
      </Files>
      

      上記で作成したパスワードファイルを指定します。これが参照されるわけです。ここで注意しなければ ならないのは、いくらパスワード設定しても、この設定の中にユーザー名を書き込んでおかないと アクセスできません。また、</limit>の後にリターンを入力して、カーソルを左に持っていく こと(改行)を忘れずに。

      ここで注意することは、1行に入力できる文字には制限があるということです。 これに対応するには、次のように記述します。

      <Limit POST GET PUT>
      require user ichiro
      require user jiro
      require user saburo
      </Limit>
      

    2. これを上記の全体の構図で示したディレクトリ「private」にアスキー転送します。

  • テストしてみましょう

    この場合、http://www.xxx.or.jp/~rescue/private/ 以下をプロテクトしているわけですから、 このURLを入力するとパスワードウインドウが開きます。 まずは、適当な(間違った)ものを入力してみましょう。入れないと思います。このディレクトリに 「index.html」という名前のHTMLファイルを置いておけば、このURLでそのHTMLファイルに アクセスされます。



    応用設定

    新たにユーザー設定する場合、「bin」でパスワード設定して、「private」の「.htaccess」に ユーザ名を追加するという、複数のディレクトリに渡って作業をしなければならないのは面倒です。 そこで、グループファイルを使った方法を紹介します。

    1. グループファイルを作る

      「bin」ディレクトリに「.private-g」という名前のファイルを作ります。この中身は下記の通りです。

      private-users: ichiro jiro saburo
      

      このファイルもアスキー(テキスト形式)転送です。1行入力したら忘れずにリターン(改行) してください。

      ここで注意することは、1行に入力できる文字には制限があるということです。 これに対応するには、次のように記述します。

      <limit>
      private-users: ichiro
      private-users: jiro
      private-users: saburo
      </limit>
      

    2. プロテクト設定ファイルを作る

      エディタ等で下記の内容の設定ファイル「.htaccess」を作成します。これを「private」にアスキー転送します。
      AuthUserFile     /home/usr01/b/rescue/bin/.private
      AuthGroupFile    /home/usr01/b/rescue/bin/.private-g
      AuthName         "ByPassword"
      AuthType         Basic
      <Limit POST GET PUT>
      require group private-users
      </Limit>
      <Files .htaccess>
      order deny,allow
      deny from all
      </Files>
      

      この方法だと、もうこの設定ファイルを更新する必要はありません。追加は「bin」ディレクトリでの 作業のみになります。要するに、ここに書いていたユーザー名をまとめてグループファイルを作り、 そこを参照するようにしているわけです。


    簡単設定

    パスワードファイル(AuthUserFileで指定したもの)に登録したすべての人(username)を 認証対象としたい場合、上記基本設定では、
       require user ichiro jiro saburo
    
    という風にすべて並べなければなりませんでしたが、
       require valid-user
    
    と書くだけでも済みます。パスワードファイルに追加したら、.htaccessも書き加えなければなりません でしたが、これなら.htaccessはいじらないで済みます。パスワードファイルをいじらずに、ある人だけ 認証不許可したければ、この方法ではなくて、上記の方法にしたほうが便利です。

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


  • Powered by CGI RESCUE(R)