LoginSignup
4
2

More than 3 years have passed since last update.

Apache httpdでsatisfy anyを使うと一部ファイルへのアクセス制限が外れる仕様がある

Posted at

確認方法

Apache 2.4の環境において、AllowOverride FileInfoなどで.htaccessを有効にした状態で、以下のような設定をする。この設定では、特定のネットワーク内からだと認証無し、それ以外からはShibboleth認証をした場合にウェブページが閲覧できるようになる。

.htaccess
Satisfy any

Order deny,allow
Deny from all
Allow from 192.168.0.0/24

AuthType shibboleth
Require shib-session

ただし、この場合許可されたIPアドレスの範囲(192.168.0.1など)から当該ディレクトリにアクセスした際、URIを指定することで.htaccessの内容が閲覧できるようになっている。
上記設定だと特に見られても問題なさそうではあるが、設定によっては致命的となりうる。

たとえば以下の場合、不用意にも.htpasswdをドキュメントルート配下に設置しているため、.htaccessを見た後に.htpasswdをウェブブラウザで見ることができ、ユーザ名とパスワードハッシュが漏洩する。

/var/www/html/.htaccess
Satisfy any

Order deny,allow
Deny from all
Allow from 192.168.0.0/24

AuthType basic
AuthUserFile /var/www/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Authentication required"
Require valid-user

もしBASIC認証にLDAPを利用していた場合は、バインドユーザの情報が漏洩することになる。

対応方法

httpd 2.2互換の記述方法ではなく、httpd 2.4標準のRequireAnyを使う。

.htaccess
<RequireAny>
   Require all denied
   Require ip 192.168.0.0/24

   AuthType shibboleth
   Require shib-session 
</RequireAny>

補足メモ

  • ググってみると本現象について簡単に触れているものはあったが、半ば常識なのか詳細な解説は見られなかった。バグでは無く仕様っぽい。
  • 恐らく/etc/httpd/conf/httpd.confで、.ht*に対してアクセスできないよう設定されているディレクティブが上書きされてしまうため、このような現象となると思われる。
  • CentOS 7で確認したが、httpd 2.4.46をソースからビルドしても同様となった。
  • 許可されたIPアドレスからアクセスした場合のみ.ht*にアクセス可能、認証した場合は.ht*にはアクセスできない(許可されたIPアドレスであっても)。
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2