2011年12月30日金曜日

mod_spnego を使った Apache サーバでの Windows ドメイン統合認証

とりあえず動かせたので、結果を記しておく。


環境

  • Windows Server 2003 SP2
  • CentOS 6.2 (Apache 2.2.15)
  • mod_spnego 0.2.0

ドメイン側準備


マッピング用ユーザーアカウントを作る。

ドメインコントローラで keytab ファイルを作る。ktpass コマンドはサポートツールに入っている。Windows Server 2003 では SP2 のでないと不具合があるらしいことに注意。パスワードはこのあとどこにも入力しないので、自動でランダム生成させる。

> ktpass -princ HTTP/servername.example.com@EXAMPLE.COM -mapuser EXAMPLE\username -ptype KRB5_NT_PRINCIPAL -out http.keytab +rndPass

インストール


Apache はインストール・設定済みとする。ビルドに必要なパッケージをインストール。

# yum install httpd-devel gcc krb5-devel

モジュールのインストール。

# cd /var/tmp
# tar zxvf /path/to/mod_spnego-0.2.0.tar.gz
# cd mod_spnego-0.2.0
# apxs -c -i -DHAVE_SPNEGO -lgssapi_krb5 mod_spnego.c


keytab ファイルを保護する。/etc/httpd/ に配置しておく。

# chown apache.apache /etc/httpd/http.keytab
# chmod 400 /etc/httpd/http.keytab


設定


/etc/krb5.conf は実際に運用するドメイン名に合わせて変更する。

ドキュメントルートの spnego ディレクトリ以下を制限する例。

/etc/httpd/conf.d/spnego.conf
LoadModule spnego_module modules/mod_spnego.so
Krb5AuthEachReq Off
<Location "/spnego">
 AuthType SPNEGO
 Krb5ServiceName HTTP/servername.example.com
 Krb5KeyTabFile /etc/httpd/http.keytab
 Require valid-user
</Location>

 

テスト


# yum intall krb5-workstation
# kinit -k -t /etc/httpd/http.keytab HTTP/servername.example.com



何も出てこなければ OK。

備考


認証ユーザー名は環境変数の REMOTE_USER に「username@EXAMPLE.COM」の形式で入ってくる。

サーバの時刻が正しくないと認証に失敗する(はず)。

keytab で mapuser したアカウントのパスワードを、Active Directory ユーザーとコンピュータの管理ツールでリセットすると、認証できなくなる。

keytab を作り直したら、Windows クライアントでは klist purge する。古いチケットをキャッシュしているため。

アカウントに keytab は一つしかマップできなくて、別のプリンシパルを同じアカウントにマップすると、前のが使えなくなる。またプリンシパルはホスト名を含むので、keytab を共有することはできない。なのでホストごとにドメインにダミーアカウントを作る必要がある。

Internet Explorer 以外のブラウザ

Google Chrome設定不要。
Firefoxaboug:config で network.negotiate-auth.trusted-uris にホスト名もしくは「http://」を指定。
Opera非対応。

参考にしたもの

Apache Kerberos/SPNEGO module | Free software downloads at SourceForge.net
アーカイブ内の readme.txt
Active Directoryと apacheで 統合Windows認証 - あぁ そうだった

2011年12月24日土曜日

AnkhSVN と TortoiseSVN と PuTTY でいろいろハマったお話

  • サーバとクライアントのバージョンは揃えた方がいい。
  • PuTTY 0.61 の Pageant は 0.60 までとの互換性がない。
環境
  • SVN リポジトリは svn+ssh でサーバに接続。
  • SSH 認証は公開鍵パスフレーズで、Pageant 利用。
以下時系列順で。

Visual Studio 2008 + AnkhSVN 2.3.10509 で SVN サーバに Add Solution to Subversion しようとしたら、「指定されたパスのフォーマットはサポートされていません」と出てきた。 例外は System.NotSupportedException だけど、内部のことなのでよく分からず。

これは AnkhSvn 2.1.10129 に落としたら解決。使ってる SVN サーバが 1.6 だから?

ワーキングコピーは 1.7 になっているので、チェックアウトし直すことに。TortoiseSVN も 1.7.1 を消して 1.6.16 で入れ直し。

ここで TortoiseSVN と AnkhSVN がリポジトリに繋がらなくなる。メッセージは
Disconnected: No supported authentication methods available
TortoisePlink.exe を直接叩いても変わらずだけど、Tera Term からの SSH 接続では問題なし。

WinSCP 4.3.5 に付属の pageant.exe を使っていたのだけど、これは PuTTY 0.61 のもの。Change Log を見ると、0.62 で
Bug fix: Pageant now talks to both new-style clients (0.61 and above) and old-style (0.60 and below).
Tera Term 4.71 の TTSSH が使ってる PuTTY ライブラリは 0.61 なので OK だけど、TortoiseSVN 1.6.16 付属の TortoisePlink.exe は 0.60 だったというわけ。

pageant.exe だけ 0.62 を拾ってきて、WinSCP\Putty にあるそれと差し替えて解決。

2011年12月13日火曜日

rsyslog で追加のソケットを指定する方法

日本語の情報がほとんど出てこないので、記述しておく。

CentOS 6 では syslogd が rsyslog に置き換わっている。jail を利用する場合などでは追加のソケットが必要になるが、これを指定する方法。syslogd の -a オプションに相当するもの。

/etc/rsyslog.conf
$ModLoad imuxsock
$AddUnixListenSocket /chroot/dev/log


Unix Socket Input rsyslog