====== Apache ======
===== セットアップ =====
==== httpd.conf ====
=== Basic 認証の設定例 ===
AuthType Basic
AuthName "web system administrator"
AuthUserFile /foo/.htpasswd
AuthGroupFile /dev/null
require valid-user
=== 特定のファイルに対してだけ Basic 認証を設定 ===
Options ExecCGI FollowSymLinks
AllowOverride Options
AddHandler cgi-script .cgi
AuthType Basic
AuthName "web system administrator"
AuthUserFile /foo/.htpasswd
AuthGroupFile /dev/null
require valid-user
=== LDAP を使った Basic 認証 ===
Apache httpd 2.2 + mod_authz_ldap を使用\\
mod_authz_ldap は rpm, yum でインストール\\
httpd 2.2 では設定がいくつかのファイルに分かれているので、conf.d 以下のいずれかのファイルにモジュールのロード指定を記述しておきます。
LoadModule authz_ldap_module modules/mod_authz_ldap.so
(例1) グループ名「wedge-svn」に所属するグループに対して許可
DAV svn
SVNPath /data/svn/wedge
AuthType basic
AuthzLDAPMethod ldap
AuthName "Product source"
AuthzLDAPServer 192.168.1.1
AuthzLDAPUserBase ou=Users,dc=osaka,dc=mki,dc=ne,dc=jp
AuthzLDAPGroupBase ou=Groups,dc=osaka,dc=mki,dc=ne,dc=jp
AuthzLDAPUserKey uid
AuthzLDAPGroupKey cn
AuthzLDAPMemberKey memberUid
AuthzLDAPUserScope base
require group wedge-svn
(例2) 正規表現で一致した URL の場合、LDAP の objectClass が inetOrgPerson のユーザに対して、SSL接続を使った認証のみ許可
AuthType Basic
AuthName "Trac"
SSLRequireSSL
AuthzLDAPMethod ldap
AuthzLDAPServer 192.168.1.1
AuthzLDAPUserBase ou=Users,dc=osaka,dc=mki,dc=ne,dc=jp
AuthzLDAPGroupBase ou=Groups,dc=osaka,dc=mki,dc=ne,dc=jp
AuthzLDAPUserKey uid
AuthzLDAPGroupKey cn
AuthzLDAPMemberKey memberUid
AuthzLDAPUserScope base
require ldap-attribute objectClass=inetOrgPerson
* require valid-user\\
「require valid-user」を指定すると、LDAP に登録されているユーザすべてが許可されると思われます。
mod_authz_ldap を入れるとインストールされる、設定のサンプルファイル authz_ldap.conf には、''AuthzLDAPEngine on'' という記述がありますが、これを指定すると、httpd 再起動時に「AuthzLDAPEngine', perhaps misspelle」というメッセージが表示されますが、これは httpd のバグのらしいです。\\
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=164620
* 注意\\
LDAP のパスワード属性 userPassword のハッシュアルゴリズムが crypt(3) になっているとうまくいかないので、{MD5} または {SMD5} を使ってください。\\
「[[http://www.ldap.jp/openldap/v23/man/slappasswd#%E5%88%B6%E9%99%90|crypt (3) によるハッシュ化はプラットフォームに依存するので注意すること。]]」
=== MySQLを使った Basic 認証 ===
Ubuntu の場合: sudo apt-get install libapache2-mod-auth-mysql
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
Auth_MySQL_Socket /var/run/mysqld/mysqld.sock
Auth_MySQL_Host localhost
Auth_MySQL_User apache
Auth_MySQL_Password password
Auth_MySQL_DB apache
Auth_MySQL_password_table auth
Auth_MySQL_UserName_Field userid
Auth_MySQL_Password_Field password
Auth_MySQL_Encryption_Types Plaintext
#Auth_MySQL_NoPasswd Off
AuthName "Enter your ID and password"
AuthType Basic
require valid-user
* 「Bad file descriptor: Could not open password file: (null)」が error.log に出力される場合。\\
mod_auth_mysql は mod_auth_basic よりも前にロードする必要があるそうです。\\
apache 2.2 の場合は、mods_enabled に対してシンボリックリンクをはる時、mod_auth_basic よりも前の順序にくる名前にしておきます。\\
(例) ln -s ../mods-available/auth_mysql.load 0.auth_mysql.load
=== 拡張子 gz のファイルに対して Content-Encoding: gzip を設定し、内容をブラウザに解凍して表示させる。(wwwstat の過去の解析結果表示など) ===
httpd.conf に
AddEncoding x-gzip .gz .tgz
を記述。
==== ビルド ====
=== Apache 2.0.54 と openssl-0.9.8 の組み合わせで SSL を有効にして make すると、「'PEM_F_DEF_CALLBACK' undeclared」というエラーになる。 ===
ssl_engine_pphrase.c に次の記述を追加。
#ifndef PEM_F_DEF_CALLBACK
#define PEM_F_DEF_CALLBACK PEM_F_PEM_DEF_CALLBACK
#endif
==== 証明書 ====
* UCC証明書(SAN)を使ったため、サーバ名と証明書の CN が一致しなくなりエラーログに警告が記録される。\\
「RSA server certificate CommonName (CN) `www.host.dom' does NOT match server name」\\
/etc/apache2/site-alilables/<設定ファイル> で CN を ServerName に、別名(SAN)を ServerAlias に記述します。\\
ServerName www.host.dom <== 証明書の CN
ServerAlias www.sub.host.dom <== 証明書の SAN(別名)
===== トラブルシューティング =====
* _default_ VirtualHost overlap on port 443 というメッセージが表示される。\\
次の行を /etc/apache2/ports.conf に記述する。
NameVirtualhost *:443