ActiveDirectoryとFreeRADIUS

昨年の2月16日のエントリに書いたFreeRADIUSの認証をActiveDirectoryへ投げる技。今日は別のマシンに同様の設定を実施したのですが、なぜだかうまくいかなくて一日まるハマり。結局は、今日インストールしたFreeRADIUSに付属していたデフォルトのradiusd.confでは、モジュールとか、Auth-Typeを記述するところがサブディレクトリに分割されていて、参照しているファイルがちがったことが原因。
忘れないうちにメモメモ。

認証モジュールの記述

FreeRADIUS2.0.5以降だと、${confdir}/modules/以下の全ファイルをincludeしています。ソースからインストールした場合だと、/usr/local/etc/raddb/modules以下のファイル。
今回の場合はntlm_authモジュールを追加したので、/usr/local/etc/raddb/modules/ntlm_authというファイルを作成。内容は以下の通り。

exec ntlm_auth {
        wait = yes
        program = "/usr/local/samba/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name} --password=%{User-Password}"
}

認証方式の指定

authenticationセクションは${confdir}/sites-enabled/inner-tunnelに記述されています。このファイルは${confdir}/sites-available/inner-tunnelのシンボリックリンクですので、どちらを編集しても可。

inner-tunnelのauthenticateセクションに以下を追加。

authenticate {
 (中略)
    ntlm_auth
 (後略) 

}

もう一個なぜかdefaultにも追加

これ、なんで必要なんだろう。ここに情報がありました。
${confdir}/site-enabled/defaultのauthenticateセクションに上記と同様に追加。

authenticate {
 (中略)
    ntlm_auth
 (後略) 

}

defaultに追加しないと、FreeRADIUSでこんなエラーがでます。

Mon Jan 25 16:39:33 2010 : Info: Found Auth-Type = ntlm_auth
Mon Jan 25 16:39:33 2010 : Info:   WARNING: Unknown value specified for Auth-Type.  Cannot perform requested action.
Mon Jan 25 16:39:33 2010 : Info: Failed to authenticate the user.
Mon Jan 25 16:39:33 2010 : Info: Using Post-Auth-Type Reject

でもってusersファイルにデフォルト認証方法を指定

${confdir}/usersファイルにこう書く。

DEFAULT Auth-Type = ntlm_auth
        Fall-Through = 1

ntml_authをシェルから動かせばちゃんと認証が通るのに、radtestではRejectされて何でだろーとずっと悩んでました。わかってみれば、defaultにエントリがないってだけでした。