winbind で Linux 認証 on Ubuntu
2011-06-02 追記: 古くなったんで Natty (11.04) 向けに書きなおした ⇒ winbind による Active Directory 認証 on Ubuntu 11.04 - daily dayflower
winbind で Linux の認証を ActiveDirectory にまかせる - daily dayflower を Ubuntu でやろうとしたら,いくらか RedHat 系と勝手が違うところがあったのでメモ書き。
Linux マシンの諸元は下記の通り:
Active Directory Server の諸元は下記の通り:
- Windows 2000 Server
- Active Directory with SFU schema *1
サンプル名称:
- ドメイン名:
HOGE
- ActiveDirectory のレルム:
hoge.example.com
- ActiveDirectory の Domain Controller:
dc.hoge.example.com
- Unix サーバの NETBIOS 名:
PENGUIN
Kerberos の設定
デフォルトのインストールでは kinit
コマンドが使えないので krb5-user パッケージをインストールします。
さらに /etc/krb5.conf
は以下のような感じ。
# /etc/krb5.conf: [libdefaults] default_realm = HOGE.EXAMPLE.COM ...... snip snip snip ...... [realms] HOGE.EXAMPLE.COM = { kdc = dc.hoge.example.com admin_server = dc.hoge.example.com } ...... snip snip snip ...... [domain_realm] .hoge.example.com = HOGE.EXAMPLE.COM hoge.example.com = HOGE.EXAMPLE.COM ...... snip snip snip ......
実際には krb5-config というパッケージをインストールしたときに CUI の設定画面が開いたのでそこで設定しました。ただし,[][domain_realm][]
セクションについては設定してくれなかったので,そこは手書きで。
winbindd (Samba) の設定
一般的な設定についてはすっとばして,今回の winbindd に関わる部分の設定のみ書きます。
# /etc/samba/smb.conf: [global] name resolve order = wins bcast workgroup = HOGE realm = HOGE.EXAMPLE.COM password server = dc.hoge.example.com netbios name = PENGUIN algorithmic rid base = 10000 idmap domains = HOGE idmap config HOGE:default = Yes idmap config HOGE:backend = rid idmap config HOGE:range = 10000-19999 idmap config HOGE:base_rid = 0 winbind nss info = sfu:HOGE winbind separator = ! winbind cache time = 15 winbind use default domain = Yes winbind normalize names = Yes template homedir = /home/%U template shell = /bin/bash
静的に名前を解決している場合はきちんと /etc/hosts
が設定されているからいいんですが,とりあえず DHCP でインストールして適当にホスト名をつけている場合,/etc/hosts
に参加したい NETBIOS 名を書いておきます。
# /etc/hosts: 127.0.0.1 localhost 127.0.1.1 penguin.hoge.example.com penguin # The following lines are desirable for IPv6 capable hosts ...... snip snip snip ......
この 127.0.1.1
って Ubuntu 作法なのかしら。
さて Kerberos と winbind の設定がすんだので,いよいよ ActiveDirectory に Linux マシンを参加させます。
% sudo kinit Administrator Password for Administrator@HOGE.EXAMPLE.COM: ******** % sudo net ads join -U Administrator Administrator's password: ******** Using short domain name -- HOGE Joined 'PENGUIN' to realm 'HOGE.EXAMPLE.COM' % sudo net ads testjoin Join is OK
winbindd を立ち上げて,
% sudo /etc/init.d/winbind start * Starting the Winbind daemon winbind ...done. % wbinfo -t checking the trust secret via RPC calls succeeded % wbinfo -u administrator guest ...... snip snip snip ......
nsswitch の設定
Linux からさまざまなネットワーク情報(ユーザアカウントやマシン名等)を取得できるように nsswitch.conf
を設定します。
# /etc/nsswitch.conf: passwd: compat winbind group: compat winbind shadow: compat winbind hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins networks: files ...... snip snip snip ......
おおもとの設定に winbind
や wins
を付与しただけです。
PAM の設定
/etc/pam.d/common-*
に winbind 用の設定を付け加えていきます。ただし common-account
については設定する必要はありません。
/etc/pam.d/common-auth
の設定は以下の通り。
# /etc/pam.d/common-auth: auth sufficient pam_unix.so nullok_secure auth sufficient pam_winbind.so use_first_pass auth required pam_deny.so
/etc/pam.d/common-password
の設定は以下の通り。
# /etc/pam.d/common-password: password sufficient pam_unix.so nullok obscure md5 password sufficient pam_winbind.so use_authtok password required pam_deny.so
/etc/pam.d/common-session
の設定は以下の通り。
# /etc/pam.d/common-session: session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel umask=0022 session optional pam_foreground.so
pam_unix.so
が required
になっているところを sufficient
にして,最後に pam_deny.so
を required
で追加してます(common-session
は required
のままです)。つかもう PAM の仕組みを忘れたのでちょっとあやふや。
SFU スキーマにアクセスできるように
さて,以上の設定で Linux のアカウントとして ActiveDirectory の情報が使えるようになったのですが,Home Directory や Login Shell などの SFU スキーマの情報が取得できませんでした。
あれこれ探ったのですが,RedHat 系(CentOS 等)では *_static_modules_idmap
に idmap_ad
が含まれるのに対し,Ubuntu では含まれていないんですね。んで,SFU 情報を取得する関数は実は idmap_ad
に含まれているのでこれをなんとかして読み込ませなきゃいけないのです。
最初ダミーのドメインを idmap domains
に追加してその idmap config backend
を ad
にしたのですが,HOGE ドメインでは依然 SFU スキーマにアクセスしないままでした。
で,ちょっと無理やりな解決法をみつけました。Samba 用の動的ライブラリディレクトリに nss_info/sfu.so
というファイルがあると winbind nss info = sfu
時にそれを読み込んでくれるので,idmap/ad.so
の symbolic link としておいておきます。
% cd /usr/lib/samba % sudo mkdir nss_info % sudo ln -s ../idmap/ad.so nss_info/sfu.so
こうすることで nss_info/sfu.so
として idmap/ad.so
を読み込んでくれるので,idmap config backend = rid
時にも winbind nss info
として sfu
を使えるようになります。
2008/04/03 追記: Ubuntu 8.04 Hardy Heron ではもともと同じようにシンボリックリンクを貼ってました。Ubuntu 的にはこの対処法で OK ってことで。