[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .

パッケージ: apache (apache 2.4)

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 が動いていることを確認してください (確認方法は上述の操作と同じです)。

設定ファイル /usr/pkg/etc/httpd/httpd.conf (apache 2.4)

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 を参照。

注意: VirtualHost の書式が変わった

(1) NameVirtualHost 行を削除。 NameVirtualHost は 2.4 で無くなりました。

(2) VirtualHost ディレクティブに、きちんとポート番号をつける。

<VirtualHost 192.168.0.1>
<VirtualHost 192.168.0.1:80>

なるたけ 2.2 ぽくしやう

2.2 と 2.4 でデフォルト値が違うようなので、コメントをはずします。

httpd.conf の上の方で

LoadModule include_module lib/httpd/mod_include.so
LoadModule negotiation_module lib/httpd/mod_negotiation.so
httpd.conf の下の方では
Include etc/httpd/httpd-autoindex.conf
Include etc/httpd/httpd-languages.conf

SSI を有効にしやう

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

CGI を有効にする (Apache 2.4)

(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 をリスタートしてください。

suExec を有効にする (Apache 2.4)

/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 を見直して下さい。

LDAP による Basic 認証 (Apache 2.4)

話がややこしいのですが、粛々と記述するしかありません ;-)

まず、Apache 2.4 は次の三つで一セットです。

www/apache24
devel/apr
devel/apr-util 
apr は 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 をリスタート
するだけです。

httpd.conf の例: モジュールの追加と Directory Directive の設定

(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>

.htaccess の例

(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 が違うのは当然です (参考のため、そのまま記載しておきます)ね。

演習問題

Notes

[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 モジュールを組み込みます。

[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .
Copyright (C) 1993-2022 Ken'ichi Fukamachi mail:< fukachan at fml.org >