line-01
line_glay
>
 Welcome!  page:server/apache/access.php server library
 odic.ne.jp library  Apacheによるアクセス制限
 by:大阪演劇情報センター+未知座小劇場  更新日:
 home:topへ server library:top へ
top
line_glay

Apacheによるアクセス制限

    1. httpd.conf
    2. virtualhosut
    3. アクセス制限
    4. WebDAV
    5. OpenSSL
    6. Analog
    7. Webalizer
    8. Streaming
Webサーバアプリケーション「Apache」にはデフォルトでユーザ認証のモジュールが用意されています。この認証モジュールを利用して、様々なアクセス制限を行います。流れを単純化すると次のようになります。

まず「httpd.conf」ファイルに記述する方法と、個別クライアントが「.htaccess」ファイルを用意してする詳細なアクセス制限、という方法があります。小規模であれば、すべてを「httpd.conf」で行うことも可能でしょうが……、かといって「.htaccess」を使用すれば、セキュリティの問題が絡みます。
このあたりは現場の管理者判断になりますが、いずれにしろ書式は同等といっていいようです。以下具体的に見ていくことにします。

.htaccessの使用許可

「httpd.conf」に次の行があります。

<Directory />
  Options FollowSymLinks
  AllowOverride None       ←読み込むなら「ALL」
</Directory>


この指示はアクセス設定ファイル(デフォルトでは「.htaccess」)を読み込むか、読み込まないかの指定です。「All」で読み込むようになります。
しかしさてここでは「<Directory />」が対象です。「ALL」ではWebサーバ上どこでも「.htaccess」ファイルが使えるようになってしまいます。
私見ですが、これではセキュリティ上、問題の起きる可能性を残します。したがってクライアントごとのディレクトリを対象とすべきだと思います。
以下は、クライアント「tako」の設定例です。

<Directory "/home/tako">
  Options FollowSymLinks
  AllowOverride All
</Directory>

これでクライアント「tako」は「.htaccess」ファイルを「tako」下で使用できるようになりました。
デフォルトのアクセス設定ファイル「.htaccess」は以下の行で指定しています。

# AccessFileName: The name of the file to look for in each directory
# for access control information.
#
AccessFileName .htaccess          ←「#」を取る

コメントアウトでWebサーバ内で「.htaccess」が使えるようになります。
なお、次の行も設定しておきましょう。

<Files ~ "^\.ht">
   Order allow,deny
   Deny from all
</Files>

この設定は「.htaccess」へのブラウザからのアクセスを禁止する設定です。
正確に読めば、正規表現で「^\.ht」を指定していますから、行頭に「.ht」のあるファイル名のアクセスを禁止する、ということになるでしょう。蛇足ですが、つまり「httpd.conf」では正規表現が使えるということになります。
「.htaccess」ファイルには password など記述しますので、この処置は必須と思います。

まとめるなら、クライアントごとに「.htaccess」の使用を許可し、そのファイルへのアクセスを禁止する、ということになります。


アクセス制限の記述

 Basic認証

ここで示す実例は以下のリンクで確認できます。下記の「会員ページへ」をクリックしてください。
    ユーザ名・・・admin password・・・admin  会員ページへ
《 ■ httpd.conf ■ 》

ApacheにはBasicで認証が実装されていますが、デフォルトでは有効ではなく、設定が必要となります。この設定もクライアントの「.htaccess」ファイルで行います。従って前節のとおり、クライアントが「.htaccess」を使用できるようにしておきます。
なお、Basic認証を利用するには「mod_auth」モジュールが有効になっていなければなりません。
次に下記のディレクトリを制限するために、「httpd.conf」の最後に次の数行を追記します。

<Directory "/home/tako/public_html/access" >    ←制限をするディレクトリ
  Options FollowSymLinks
  AllowOverride AuthConfig Limit
</Directory>

Apacheを再起動します。
これを前提に、以下は各アカウントユーザ(クライアント)・takoでの記述例です。

《 ■ .htaccess ■ 》

[  手順  ]  

細部は読者の環境で読み替えてください。

/home/tako/public_html/accessに制限をかけることにします。
/home/tako/public_html/access内に「.htaccess」名でテキスト書類を用意。アクセス権は644。
下記が「.htaccess」の内容。

AuthType Basic                        ←Basic認証を宣言
AuthUserFile /home/tako/.htpasswd    ←ユーザ名、パスワードのファイル名を指定。フルパスで書くと間違いないでしょう。
AuthName "your password"              ←パスワード入力ウインドウの文字列
<Limit GET>
  require valid-user                   ←パスワードファイルに記載したユーザを許可するの意
</Limit>

/home/takoに「.htpasswd」名でテキスト書類を用意。アクセス権は644。
.htpasswdにユーザを登録します。コマンド入力です。

$ htpasswd -c /home/tako/.htpasswd hanako

password入力を要求してきます。
入力、再入力すれば、hanakoのpasswordは暗号化されて「.htpasswd」に記載されます。


[  追記  ]  

ApacheのBasic認証アクセス制限は、ある特定のdirectoryの制限を、登録したパスワードとユーザ名で行うのものです。

 Digest認証

AuthType Digest      ←Digest認証を宣言
AuthName "Secret Zone"
AuthUserFile /home/tako/.htdigest   ←ユーザ名、パスワードのファイル名を指定。
Require valid-user;    ←パスワードファイルに記載したユーザを許可するの意

# htdigest -c /home/tako/.htdigest 'Secret Zone' tako
Adding password for tako in realm Secret Zone.
New password:
Re-type new password:



 特定のホストを許可

《 ■ httpd.conf ■ 》
特定のディレクトリのアクセス制限です。

<Directory />
   order deny,allow        ←denyを先に評価
   deny from all
   allow from www.xxx.ne.jp    ←www.xxx.ne.jpの接続を許可
</Directory>


 特定のホストを拒否

《 ■ httpd.conf ■ 》
特定のディレクトリのアクセス制限です。

<Directory />
   order allow,deny        ←allowを先に評価
   allow from all
   deny from www.xxx.ne.jp    ←www.xxx.ne.jpの接続を拒否
</Directory>

「deny from」の行が「.xxx.ne.jp」ならドメイン「.xxx.ne.jp」の接続を拒否します。また「202.224.xxx.」なら「202.224.xxx.0」から「202.224.xxx.255」を接続を拒否します。つまり、Webサーバへの接続を、ホスト、ドメイン、IPアドレスで拒否することができます。これらを複数指定する場合は、半角スペースで改行無しで列挙し記述します。


 特定ファイルへのアクセス

<Directory "/home/tako/public_html/data">
  <Files ~ "\.(gif|jpe?g|png)$">
    order deny,allow
    deny from all
    allow from .tako.co.jp
  </Files>
</Directory>

この例では「/home/tako/public_html/data」ディレクトリ内の拡張子が正規表現で指定した「gif、jpeg、jpg、png」が対象となり、ドメイン「.tako.co.jp」がアクセスできる。

CGI利用のためのアクセス設定


《 ■ httpd.conf ■ 》

Webサーバを通じて外部プログラム(CGI)を起動するには、CGIプログラムを専用のディレクトリに置く方法と、任意のディレクトリを設けてする方法があります。「httpd.conf」には専用ディレクトリの指定記述として以下の行があります。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

この設定で、「/var/www/cgi-bin/」に「tako.cgi」を置くと、

http://Webサーバ名/cgi-bin/tako.cgi

でCGIプログラムを起動できるようになります。
任意のディレクトリで外部プログラム(CGI)を起動できるようにするには、やはり「httpd.conf」に記述します。

<Directory "/home/tako/public_html/cgi">
   Options ExecCGI
   AddHandler cgi-script .cgi .pl
</Directory>

これで「tako」はCGIスクリプトを「/home/tako/public_html/cgi」に、拡張子「cgi」「pl」のファイルで格納することで利用できるようになる。


補記

《 ■ 参照URL   ※サイト内参照ページ    引用、参照書籍 ■ 》
Apache
日本Apacheユーザ会
Apache日本語マニュアル
『Apacheアプリケーションサイト構築』 著/安田幸弘 刊/オーム社開発局
『Apache Server Bible』 著/モハメッド・J・カビール 刊/IDG
『Apache WebサーバBlack Book』 著/Greg Holden 刊/インプレス

“このページの作成にあたり、上記に掲げたURLや書籍を参考にしました。謝意を表します。具体的な引用については明記しました。内容の間違いや、誤字は筆者の責任であり、関係する参照先の責任ではありません”

top     home:top     server library:top     PHP PostgreSQL MySQL サンプルスクリプト     SiteMap     Open SiteMap