>
Welcome! page:server/apache/access.php |
server library |
odic.ne.jp library
Apacheによるアクセス制限 |
by:大阪演劇情報センター+未知座小劇場 |
更新日: |
home:topへ
server library:top へ |
Apacheによるアクセス制限
- httpd.conf
- virtualhosut
- アクセス制限
- WebDAV
- OpenSSL
- Analog
- Webalizer
- 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の制限を、登録したパスワードとユーザ名で行うのものです。
- アクセス制限したいdirectoryに「.htaccess」を設置する事ができます。
- 二人目のユーザ登録からはオプション「-c」はつけません。「-c」は新規作成を意味します。
- AuthConfigは認証設定を最優先するの意
- Limitはアクセス制限の設定を最優先するの意
- htpasswdはApache付属のパスワード暗号化ツールです。
- これは筆者の経験ですが、入れ子でアクセス制限をかけると、ブラウザにより不具合がおきました。
- phpでのアクセス制限と認証は 「認証とデータ保護」 を参照してください。
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