目次

Apache

セットアップ

httpd.conf

Basic 認証の設定例

<Directory "/foo/bar"> 
  AuthType Basic 
  AuthName "web system administrator" 
  AuthUserFile /foo/.htpasswd 
  AuthGroupFile /dev/null 
  require valid-user 
</Directory> 

特定のファイルに対してだけ Basic 認証を設定

<Directory "/foo/bar"> 
  Options ExecCGI FollowSymLinks 
  AllowOverride Options 
  AddHandler cgi-script .cgi 
  <Files admin.cgi> 
    AuthType Basic 
    AuthName "web system administrator" 
    AuthUserFile /foo/.htpasswd 
    AuthGroupFile /dev/null 
    require valid-user 
  </Files> 
</Directory> 

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」に所属するグループに対して許可

 
<Location /wedge-svn> 
     DAV svn 
     SVNPath /data/svn/wedge 
     <IfModule mod_authz_ldap.c> 
        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 
     </IfModule> 
</Location> 

(例2) 正規表現で一致した URL の場合、LDAP の objectClass が inetOrgPerson のユーザに対して、SSL接続を使った認証のみ許可

 
<LocationMatch "/trac/[^/]+/(login|browser)"> 
   AuthType Basic 
   AuthName "Trac" 
   SSLRequireSSL 
     <IfModule mod_authz_ldap.c> 
        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 
     </IfModule> 
</LocationMatch> 

「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

 
<Directory /var/www> 
  Options FollowSymLinks MultiViews 
  AllowOverride None 
  Order allow,deny 
  allow from all 
  <IfModule mod_auth_mysql.c> 
    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 
    <Limit POST GET> 
      require valid-user 
    </Limit> 
  </IfModule> 
</Directory> 

mod_auth_mysql は mod_auth_basic よりも前にロードする必要があるそうです。

  apache 2.2 の場合は、mods_enabled に対してシンボリックリンクをはる時、mod_auth_basic よりも前の順序にくる名前にしておきます。\\ 
  (例) <code>ln -s ../mods-available/auth_mysql.load 0.auth_mysql.load</code> 

拡張子 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 

証明書

「RSA server certificate CommonName (CN) `www.host.dom' does NOT match server name」

  /etc/apache2/site-alilables/<設定ファイル> で CN を ServerName に、別名(SAN)を ServerAlias に記述します。\\ 
  <code>ServerName www.host.dom  <== 証明書の CN 

ServerAlias www.sub.host.dom ⇐= 証明書の SAN(別名)</code>

トラブルシューティング

次の行を /etc/apache2/ports.conf に記述する。

  <code>NameVirtualhost *:443</code>