メニューを開く

2019/05/18

Apache ~ .htaccess設定方法と使い方 セキュリティ関連~

.htaccessファイルは、分散設定ファイルとも呼ばれ、Webサーバーの挙動を設定することができるファイルのひとつで、WebサーバーとしてApacheが使用されていて、管理者が.htaccessファイルの設置を許可していれば使用することができます。

設定方法


Apacheは、http.confにディレクティブという命令を記述することで設定しますが、http.confは管理者にしか編集できなくなっています。それに対して、.htaccessファイルは各ユーザーがディレクトリ単位に設定することができます。ファイルの構文は、主設定ファイルのhttp.confファイルと同じです。
注意事項
  • 基本的に、http.confファイルにアクセスできない場合以外は極力使用しない
  • FTPで転送する場合、ASCIIモードまたは、テキストモードを使用する
  • Windowsで編集する場合、一旦htaccess.txtなどに置き換え、サーバーに配置後にリネームする
  • 設置されたディレクトリと配下ディレクトリ全てに影響する
  • 構文誤りや管理者が許可していないディレクティブを使用した場合、該当ディレクトリ配下のファイルアクセスが、500 Internal Server Errorになる
  • 最終行には、改行を入れる

使い方

いろんな使い方ができるみたいですが。ざっくりとですが、こんなことができるみたいです。勉強しながら少しずつ記事にしていきたいと思っています。

使い方概要
  • セキュリティ関連
  • エラーページ制御
  • キャッシュ制御
  • ページ表示の高速化
  • 多言語対応
今回は、セキュリティ関連の使い方について記事を書きます。
セキュリティ関連
  • ディレクトリの内容を表示させない
  • ファイルへのアクセス制限
  • ディレクトリへのアクセス制限
  • パスワード(ベーシック)認証
  • DirectoryIndex

ディレクトリの内容を表示させない 
URIにスラッシュで終わるアクセスがあった場合、index.htmlなどのデフォルトで表示するファイルがない時、ディレクトリのファイル一覧が表示されてしまいます。
Optionsディレクティブを使用することで、ディレクトリのファイル一覧を表示させないように設定できます。
Options -Indexes
Optionsディレクティブは、どのサーバー機能を特定のディレクトリで使用可能とするかを制御します。⁺は元の設定に追加、‐は元の設定から削除します。上位ディレクトリで指定した設定は原則として下位ディレクトリまで適用される。下位ディレクトリで、Optionsディレクティブ設定をした場合、⁺は設定を有効に、‐は設定を無効に、そして±を省略した場合には新規に設定が適用されます。

Optionsディレクティブに指定できる値
All :MultiViewsを除いて全ての機能が有効になる
ExecCGI :mod_cgiによるCGIスクリプトの実行を許可する
FollowSymLinks :ディレクトリ内でシンボリックリンクをたどれる
Includes :mod_includeが提供するSSIを有効にする
IncludesNOEXEC :SSIを有効にするが、#exec、#execCGIは無効になる
Indexes :URLがディレクトリにマップするリクエストでDirectoryIndexで指定したファイルがディレクトリ内に存在しなければmod_autoindexがディレクトリ内の一覧を返す
MultiViews :mod_negotiationによるコンテントネゴシエーションされた言語ネゴシエーション機能を有効にする
SymLinksIfOwnerMatch :シンボリック先のファイルまたはディレクトリが、シンボリックの所有ユーザーIDと同じ場合にだけ、シンボリックリンクをたどれる
None : 全ての機能を無効にする
レンタルサーバーによっては、管理者によってOptionsディレクティブが使えないように制限されている場合があります。その場合には、次のようにすることでディレクトリ一覧を表示ができないようにできます。
IndexIgnore *
ファイルへのアクセス制限
FilesディレクティブやFilesMatchディレクティブで特定のファイルにアクセスできないようにアクセスを制限することができます。Filesディレクティブのブロック内に記述した設定をfilenameで指定したファイルにのみ適用します。ファイル名またワイルドカード文字列で指定することができます。下記の例は、Filesディレクティブを用いて、特定のIPアドレス(10.10.10.*)のみfilenameで指定したファイルへの全アクセスを許可する例です。
<Files filename> Order Deny,Allow Deny from all Allow from 10.10.10.*</Files>
FilesMatchディレクティブのブロック内に記述した設定を正規表現に一致するファイル名に適用します。下記の例は、FilesMatchディレクティブを用いて、.htaccessまたは.htpasswdファイルへの全アクセスを拒否する例です。
<FilesMatch "^\.(htaccess|htpasswd)$"> deny from all</FilesMatch>
ディレクトリへのアクセス制限
ディレクトリへのアクセス制限を行うには、deny from allと記載した.htaccessファイルを制限したい特定ディレクトリに配置します。下記の例は、特定ディレクトリへの全アクセスを拒否する例です。
 deny from all
パスワード(ベーシック)認証
パスワード認証を行うには、.htaccessファイルの他に.htpasswdファイルという、ユーザー名とパスワードを記載したファイルを用意します。特に指定をしなければ、.htaccessファイルを配置した特定ディレクトリ配下の全ファイルが認証対象になります。下記の例は、特定のファイル(pw-login.phpファイル)にのみパスワード認証を設定し、/home/XXXディレクトリに配置した.htpasswdファイルのユーザーIDとパスワードが一致すれば記述されているユーザーを許可する例です。
<Files pw-login.php> AuthType Basic AuthUserFile /home/XXX/.htpasswd AuthGroupFile /dev/null AuthName "Login Passwd Input" Require valid-user</Files>
DirectoryIndex
URIをスラッシュで終わるアクセスがあると、そのディレクトリにあるindex.htmlが呼ばれます。DirectoryIndexディレクティブを使用することで、デフォルトファイルを異なるファイルに変更できます。下記の例は、スラッシュで終わるアクセスがあった場合、記載した複数のリインデックスファイルのうち、先に記載したファイルから優先して呼ぶ場合の記述例です。全てのリインデックスファイルが見つからない場合は、ディレクトリのファイルリストを表示し、ディレクトリ一覧の表示が許可されていない場合には、403 Forbiddenになります。
DirectoryIndex index.html index.htm index.php index.cgi


EmoticonEmoticon