Important: チェックポイント
□ ターゲット /usr/pkgsrc/www/apache24 □ /etc/rc.conf apache=yes □ 設定ファイル /usr/pkg/etc/httpd/httpd.conf □ ポート番号 80/tcp □ 動作の確認 psとってhttpdが動作している。80/tcpが開いている。
Apache は 2.4 系列を使います。
1.x も 2.2 も、もう保守されていません。 とっとと 2.4 に移りましょう。
今回も設定ファイルの書式が若干変わりました(とほほ)。
注意: # や % の意味が分からない人は 用語 を参照してください。
% su root # cd /usr/pkgsrc/www/apache24 # 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 するようにしています。 |
歴史的な書式
Order allow,deny Allow from allを
Require all grantedへ変更してください。
Require の詳細は https://httpd.apache.org/docs/2.4/ja/howto/auth.html を参照。
(1) NameVirtualHost 行を削除。 NameVirtualHost は 2.4 で無くなりました。
(2) VirtualHost ディレクティブに、きちんとポート番号をつける。
<VirtualHost 192.168.0.1>を
<VirtualHost 192.168.0.1:80>
2.2 と 2.4 でデフォルト値が違うようなので、コメントをはずします。
httpd.conf の上の方で
LoadModule include_module lib/httpd/mod_include.so LoadModule negotiation_module lib/httpd/mod_negotiation.sohttpd.conf の下の方では
Include etc/httpd/httpd-autoindex.conf Include etc/httpd/httpd-languages.conf
LoadModule include_module lib/httpd/mod_include.soを有効にしている(コメントをはずしている)ことを確認してください。
<IfModule dir_module> DirectoryIndex index.html </IfModule>を
<IfModule dir_module> DirectoryIndex index.shtml index.html </IfModule>へ変更。
<IfModule mime_module> の一番下で
AddType text/html .shtml AddOutputFilter INCLUDES .shtml
(1) cgid_module をロードするように変更(コメントをはずす)
LoadModule cgid_module lib/httpd/mod_cgid.so
(2) CGI のパスや拡張子の設定をする (2.a) (必要に応じて) /cgi-bin/ のパスを変更し
ScriptAlias /cgi-bin/ "/usr/pkg/libexec/cgi-bin/"(2.b) ファイル名に .cgi があれば CGI として動作させるように設定 (Perl スクリプトなので .pl も追加する必要があれば、それらも適宜追加)
AddHandler cgi-script .cgi
(3) ScriptAlias で指定したパスについて Directory ディレクティブを設定。 「Options ExecCGI」が重要。
<Directory "/usr/pkg/libexec/cgi-bin"> AllowOverride FileInfo AuthConfig Options ExecCGI Require all granted </Directory>
apache をリスタートしてください。
/etc/mk.conf に
PKG_OPTIONS.apache=suexecと書いてから www/apache24 をコンパイルして下さい。
すでに apache がインストール済みの場合には、 一度 apache をアンインストールし、リコンパイル、再インストールしてください。
# 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> Require all granted </Limit> <LimitExcept GET POST OPTIONS> Require all granted </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.4 は次の三つで一セットです。
www/apache24 devel/apr devel/apr-utilapr は Apache Portable Run-time の頭文字です。 「移植性を高めるために拡張部分を本体から分離しましょう」 といった心意気なのだと思って下さい。
pkgsrc の www/apache24 デフォルトでは LDAP 認証が無効です。
Important: (*** そして、ここが分かりにくいところですが ***) 「LDAP を使う」という設定は www/apache24 ではなく devel/apr-util で行ないます。
/etc/mk.conf に
PKG_OPTIONS.apr-util=ldap[1] を書いてから、apache24 をコンパイルして下さい。 [2] なお、 すでに apache がインストールされている場合(rebuild する場合)は、 apr apr-util apache24 すべてをアンインストール( pkg_delete )してから apache24 (つまり apache24 apr apr-util すべて)をリコンパイルし、 インストールし直して下さい。
必要なライブラリ等は、すべて自動的にインストールされます。
あとは
(1) httpd.conf の書き換え(mod_authnz_ldap の追加等) (2) 認証したいディレクトリで .htaccess ファイルを作成 (3) apache をリスタートするだけです。
(a) まず、次の二つのモジュールを追加してください (コメントになっているので # を削除)。
LoadModule authnz_ldap_module lib/httpd/mod_authnz_ldap.so LoadModule ldap_module lib/httpd/mod_ldap.so
(b) LDAP 認証しつつ公開したいディレクトリ (以下の例では /var/www/htdocs)について Directory ディレクティブを作ります。 認証のために(.htaccess を有効にするために)は AllowOverride AuthConfig の設定を忘れずに。
<Directory "/var/www/htdocs"> AllowOverride FileInfo AuthConfig Options None Require all granted </Directory>
(LDAP については自分で勉強してください)。
最後に LDAP 認証しつつ公開したいディレクトリ(以下の例では /var/www/htdocs)に .htaccess を作成します。
標準的な 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/apache24/Makefile を解析し、 「www/apache24 側でも ldap authnz_ldap モジュールを組み込む」 という部分を説明せよ。
[1] | PKG_OPTIONS.apr-util で指定可能なオプションは pkgsrc/apr-util で make show-options を実行すると表示されます。 2015/11 現在、利用可能なオプションは db4 Enable db4 support. ldap Enable LDAP support. mysql Enable MySQL support. pgsql Enable PostgreSQL support. sqlite3 Enable SQLite3 support. ssl Enable SSL support.です。 mysql や pgsql( PostgreSQL )を使う認証も、 同様に apr-util でオプション指定することになります。 |
[2] | PKG_OPTIONS.apr-util 変数を見て ldap が指定されている場合、 www/apache24 側でも ldap authnz_ldap モジュールを組み込みます。 |
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >