Warning |
Apache は 2.4 系列 を使います。 1.x も 2.2 も、もう保守されていません。 |
Important: チェックポイント
□ ターゲット /usr/pkgsrc/www/apache22 □ /etc/rc.conf apache=yes □ 設定ファイル /usr/pkg/etc/httpd/httpd.conf □ ポート番号 80/tcp □ 動作の確認 psとってhttpdが動作している。80/tcpが開いている。
注意: # や % の意味が分からない人は 用語 を参照してください。
% su root # cd /usr/pkgsrc/www/apache22 # make install
Caution |
2011/04 以降: make packege ではなく make install を使ってください。 事情の詳細は the Section called 2011 春: make install および make package の動作が変わる 節を参照してください。 |
OS 起動時に apache も起動するように設定してください。
# cp -p /usr/pkg/share/examples/rc.d/apache /etc/rc.d/ # echo apache=yes >> /etc/rc.conf
設定ファイル /usr/pkg/etc/httpd/httpd.conf の編集をしてください(後述)。
テスト(1): apache は起動するか?
# /etc/rc.d/apache start動いていることを確認してください。
# ps auxww |grep httpd # fstat |grep httpd # netstat -na|grep 80注: 80 は WWW の標準ポート番号です。
テスト(2): OS をリブートし、きちんと apache が動いていることを確認してください (確認方法は上述の操作と同じです)。
Caution |
Apache の基本書式は同じですが、 運用上の流儀は時代によって移り変わっています。 たとえば httpd.conf 一つにまとめて書くのか、三つのファイルに分けるのか、 Include するのか、といった流儀はバージョンによって異なります。 2.2 の流儀は、 「/usr/pkg/etc/httpd/httpd.conf」ファイルが基本設定、 拡張設定は 「/usr/pkg/etc/httpd/httpd-何か.conf」 に書いて Include するということになったようです(?)。 最近の運用では、その流儀を前提に、できるだけ Include するようにしています。 |
/etc/mk.conf に
PKG_OPTIONS.apache=suexecと書いてから www/apache22 をコンパイルして下さい。
すでにインストール済みの場合、 一度アンインストールし、リコンパイル、再インストールになります。
# make deinstall # make install
あとは、/home ディレクトリで public_html 以下を有効にする directory ディレクティブを書く必要があります。 /usr/pkg/etc/httpd/httpd-userdir.conf を参考にしてファイルを作成し、 Include してください。
例: 個人ユーザが public_html を使えるように /usr/pkg/etc/httpd/local/userdir.conf を作成します。 /usr/pkg/etc/httpd/local/userdir.conf は次のような感じです。
UserDir public_html <Directory "/home/hostname/*/public_html"> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory>そして、httpd.conf で userdir.conf を include します。
Include etc/httpd/local/userdir.conf
なお、各ユーザに CGI の使用を許す場合は、 上の Options 行に ExecCGI も追加します。
これで apache をリスタートすれば動くはずです。 うまく動かない場合、 その理由はログファイル (デフォルトは /var/log/httpd/suexec.log) に書いてあります。 たいていは、単なる permission の間違いです。 ~ユーザ/public_html/ 以下の permission を見直して下さい。
話がややこしいのですが、粛々と記述するしかありません ;-)
まず、Apache 2.2 は次の三つで一セットです。
www/apache22 devel/apr devel/apr-utilapr は Apache Portable Run-time の頭文字です。 「移植性を高めるために拡張部分を本体から分離しましょう」 といった心意気なのだと思って下さい。
pkgsrc の www/apache22 デフォルトでは LDAP 認証が無効です。
(*** そして、ここが分かりにくいところですが ***) 「LDAP を使う」という設定は www/apache22 ではなく devel/apr-util で行ないます。
/etc/mk.conf に
PKG_OPTIONS.apr-util=ldap[1] を書いてから、apache22 をコンパイルして下さい。 [2] なお、 すでに apache がインストールされている場合(rebuild する場合)は、 apr apr-util apache22 すべてをアンインストール( pkg_delete )してから apache22 をコンパイルし、インストールし直して下さい。
必要なライブラリ等は、すべて自動的にインストールされます。 httpd.conf の書き換え(mod_authnz_ldap の追加等)も不要です。 すべて自動的に行なわれます。
あとは認証したいディレクトリで .htaccess ファイルを作成するだけです。
(LDAP については自分で勉強してください)。
標準的な posixAccount を使っている LDAP で Basic 認証を行なう例です。
AuthType Basic AuthName "LDAP Auth" AuthBasicProvider ldap AuthLDAPURL ldap://${server}:${port}/ou=people,dc=example,dc=org?uid?? Require ldap-attribute objectClass=posixAccount例:
AuthType Basic AuthName "LDAP Auth" AuthBasicProvider ldap AuthLDAPURL "ldap://10.0.0.1:389/ou=people,dc=example,dc=org?uid??" Require ldap-attribute objectClass=posixAccountこれは、LDAP サーバの IP アドレスが 10.0.0.1 で、 ベース DN が ou=people,dc=example,dc=org の例です。 objectClass は典型的な posixAccount になっています。
AuthLDAPURL の部分が BaseDN やフィルタをまとめて書く大事なところです。 書式は次のようになります。
ldap://host:port/basedn?attribute?scope?filter標準の 389/tcp を使っている場合 :port は不要です。
Require (もっとも単純な例では Require valid-user)をどうするべきか?は LDAP の設計に依存しています。
上の例では、単純に objectClass=posixAccount のユーザ全員です。 LDAP に登録されているユーザは当然このクラスに属しているので、 登録されているユーザ全員が認証に挑戦できることになります。
LDAP サーバを複数台指定する場合は、単純にサーバ名を二つ書きます。
AuthLDAPURL "ldap://10.0.0.1:389 10.0.0.2:389/ou=people,dc=example,dc=org?uid??"(ど真ん中にスペースが入っていて Unix の人が見ると不思議にみえますが) こういう書き方になります。
認証に成功すると、新たな環境変数が追加されます。 AUTHENTICATE_UID AUTH_TYPE REMOTE_USER の三つです。 プログラム側では AUTHENTICATE_UID か REMOTE_USER を見ることで、 認証に成功したユーザ名(下の例では testuser)が分かります。
生ログ: 認証のない場合と LDAP Basic 認証のある場合の環境変数の diff です。
+AUTHENTICATE_UID="testuser" +AUTH_TYPE="Basic" +REMOTE_USER="testuser" -REMOTE_PORT="59721" +REMOTE_PORT="61391" -UNIQUE_ID="TTwQsKwZ-AUAAFH0QgsAAAAE" +UNIQUE_ID="TTwSPKwZ-AUAAEK3NSwAAAAD"REMOTE_PORTと UNIQUE_ID が違うのは当然です (参考のため、そのまま記載しておきます)ね。
www/apache22/Makefile を解析し、 「www/apache22 側でも ldap authnz_ldap モジュールを組み込む」 という部分を説明せよ。
[1] | PKG_OPTIONS.apr-util で指定可能なオプションは pkgsrc/apr-util で make show-options を実行すると表示されます。 2011/01 現在、利用可能なオプションは db4 ldap mysql pgsql sqlite3です。 mysql や pgsql( PostgreSQL )を使う認証も、 同様に apr-util でオプション指定して下さいということになります。 |
[2] | PKG_OPTIONS.apr-util 変数を見て ldap が指定されている場合、 www/apache22 側でも ldap authnz_ldap モジュールを組み込みます。 |
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >