FreeRADIUSとActiveDirectory(成功編)
FreeRADIUSの認証をActiveDirectoryに任せる。OpenLDAPへ認証を流す方法はすでにやったことがあって、ここにも書いたことがある。ActiveDirectoryってLDAPがお喋りできるよなぁとすこし調べたんですが、どうも期待するスキーマをもっていないようなのでLDAPでの連携は断念。Sambaを中間にいれてActiveDirectoryの認証をFreeRADIUSから利用することができました。
Sambaの設定
まずはSambaの設定。SambaとActiveDirectoryの連携はウェブ上にも情報があるし、文献も豊富なのでさらっと。
smb.confを設定
ドメイン名:MYDOMAIN、ActiveDirectoryが動作している機器のアドレスを10.1.100.1とすると、smb.confはこんな。
[global] dos charset = CP932 unix charset = UTF-8 display charset = UTF-8 passdb backend = tdbsam socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 lm announce = False local master = No domain master = No dns proxy = No realm = MYDOMAIN security = ads password server = 10.1.100.1 idmap uid = 30000-40000 idmap gid = 30000-40000 winbind enum users = Yes winbind enum groups = Yes template shell = /bin/bash template homedir = /tmp
設定すべきところはrealmと,password server,securityくらいかな。あとはお好みで。
krb5.conf
/etc/krb5.confを設定。こんな内容。
[libdefaults] ticket_lifetime = 24000 default_realm = MYDOMAIN dns_lookup_realm = false dns_lookup_kdc = false [realms] MYDOMAIN = { kdc = 10.1.100.1 } [domain_realm] .mydomain = MYDOMAIN
default_realmのところに、smb.confで設定したrealmと同じ値を設定。それと[realms]のところでkdc=以下にActiveDirectoryが動作しているサーバのIPアドレスを設定。
/etc/hosts
/etc/hostsでActiveDirectoryが動作しているサーバの名前解決を書いてあげる。これ書いとかないとあとでドメインに参加するコマンドが失敗します。
10.1.100.1 AD.MYDOMAIN
ここで試験
まずはsambaの認証がActiveDirectoryに渡っているか試験。wbinfoコマンドを使います。
winbinddを起動*1してから。
# /usr/local/sbin/winbindd # wbinfo -a hogehoge%hogepass plaintext password authentication failed error code was NT_STATUS_NO_SUCH_USER(0xc0000064) error message was:No such user Could not authenticate user hogehoge%hogepass with plaintext password. challenge/respons password authentication succeeded.
chapの認証がうまくいったようなので、OK。
次にFreeRADIUSの認証で仕様するntlm_authを使って試験します。
# /usr/local/samba/bin/ntlm_auth --request-nt-key --doamin=MYDOMAIN --username=hogehoge --password=hogepass NT_STATUS_OK: Success(0x0)
ここまででSambaの設定は終了。
FreeRADIUSの設定
インストールはされているものとして。インストールディレクトリは/usr/local/bin,設定ファイルなどは/usr/local/etc/raddbなんかにあったりします。*2
radiusd.confを編集
modulesのセクションに以下の行を加えます。
exec ntlm_auth { wait = yes program = "/usr/local/samba/bin/ntlm_auth --request-nt-key --doamin=MYDOMAIN --username=%{User-Name} --password=%{User-Password}" }
もう一ヶ所。authenticateのところにntlm_authって行を追加。
authenticate{ ntlm_auth unix }
usersファイル
デフォルトの認証手段がここに書いてあるので、ntlm_authを使いますよーと書いてあげます。
DEFAULT Auth-Type = ntlm_auth Fall-Through = 1
FreeRADIUSを起動
まずはデバッグモードで起動。
# /usr/local/sbin/radiusd -X (中略) Module: Instantiated files (files) Listening on authentication *:1812 Listening on accounting *:1813 Ready to process requests.
Ready to process request.と出てきたら準備完了。
FreeRADIUSで認証を確認
radtestコマンドを使います。これも以前に紹介しましたね。
# radtest hogehoge hogepass localhost 0 testing123 Sending Access-Request of id 185 to 127.0.0.1 port 1812 User-Name = "hogehoge" User-Password = "hogepass" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=185, length=20
Access-Acceptってことで認証が通ったようです。めでたしめでたし。
今回実験した環境ではすでにSambaがActiveDirectoryと連携している実績があるサーバ上でやったため、sambaの設定まわりには抜けがあるかも。
FreeRADIUSの設定あたりはスクラッチからやったので多分間違いないと思います。
*1:もう動作していたら再起動
*2:2010年1月26日追記。FreeRADIUS2.0.5以降だとデフォルトの設定ファイルの位置がすこし違います。詳細は2010年1月25日のエントリを参照。