winbind でユーザ情報テンプレートとして SFU のスキーマを使う
昨日の続きです。
2007/12/05 追記
下記の設定のままでは Samba 3.0.25 の場合にうまく動きません。詳しくはSamba-3.0.25 と SFU スキーマでハマった - daily dayflower 参照
一行まとめ
ads で winbind 使うなら DC に SFU をインストールしなくてもいいから AD のスキーマを拡張しておくとよい
※今日は ActiveDirectory 環境限定のお話です;NT ドメインモデルには適用できないと思います
sudoers の編集
前回積み残し課題だった /etc/sudoers の設定ですが,素直に設定すればいけました。visudo すると RedHat 系の場合
## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL
みたいにサンプルが書いてあるのでそれに習って
%Domain\ Admins ALL=(ALL) ALL
のように書くと,ドメインの管理者は sudo できるようになります。グループ名にスペースが含まれているので,\ でエスケープする必要があります。
最初 % の代わりに + を使っていてうまくいかなかったんですが,素直に % にしてうまくいきました。昔の sudo だと nsswitch.conf で group の設定を「group: winbind files」みたく winbind を頭にもってこないといけなかったらしいんですが,今の sudo なら大丈夫。
ログインシェルをユーザ毎に指定したい
ActiveDirectory のユーザを UNIX のユーザ情報(/etc/passwd)にマッピングする際,必要な情報として以下のものがあります。
- uid / gid
- Gecos (名前)
- Home Directory
- Login Shell
昨日の設定では,uid / gid については rid idmap backend を使うことで AD の RID から一意に算出をしていました。Gecos は,たぶん AD のユーザの CN (Common Name) から引いてくれるんだと思います。で,残りの Home Directory と Login Shell については,smb.conf の template homedir / shell というパラメータで設定していました。
しかしこのままだと Login Shell が,AD の全ユーザで共通のものを使わなくてはいけません。このユーザにはシェルを遣わせたくない,とか,俺は zsh 命なんだ,というニーズにこたえられないのです。
そこで用意されているのが昨日もちらりと触れましたが,smb.conf の winbind nss info というパラメータです(参考→【Samba 3.0.20のwinbind nss infoパラメータ】)。昨日はなんとなく idmap backend に ad を指定したときにあわせて設定すると便利かな,くらいの理解だったんですが,このたかはしもとのぶさんの日記を読んで「そっか,idmap (uid / gid) と nss (user information) は独立して与えられるんだ!」と目から鱗でした。
私個人はどうしても zsh を使いたいのでがんばってみますよ!
Step 1: ActiveDirectory のスキーマを SFU 用に拡張する
ディレクトリコントローラに SFU をまるっと入れてもいいんですが,NFS だの NIS だの Interix だのがインストールされるのがうっとおしいですよね。管理の手間も増えるし。
スキーマ拡張だけであれば、NISモジュールをインストールしなくても、sfusch.exe を実行すればOKっぽいです。ただし、その場合は管理GUIがインストールされないので、データの入力とかが若干面倒になりそう(未検証)。詳細は企業ユーザーのためのSFU 3.5活用ガイダンス 第2回 NISサーバとパスワード同期機能(前編)とかをみてくださいませ。
だめだめ日記(2005-09-21)
ディレクトリから Login Shell(や Home Directory)がとれるだけで十分だと思うのです。なので,SFU 全体はインストールせずに sfusch で AD を SFU 用に拡張するところだけやります。手順は上記で引用している @IT のサイトを見ればわかります*1。
と,ここですんごくはまったところをお教えしておきます。最初 SFU のアーカイブを My Documents 以下に展開して sfusch を実行してたんですが,「スキーマ管理者グループに所属してません」と怒られてしまいます(Administrator でやってるのに!)。解決策は,SFU を LFN じゃないところに展開してから sfusch を実行する,というものです。
ちなみに私の環境ではドメインサーバは Windows 2000 Server(古っ)です。2003 Server R2 だとひょっとすると AD のスキーマは拡張されているかもしれませんRFC2307 に準拠したスキーマとなりました。Samba 3.0.23 以降?で使えます(参考→【http://www.exconn.net/Blogs/windows/archive/2006/03/02/7360.aspx】*2)。
Step 2: winbind の設定を代える
私の場合,uid / gid についてはいちいち AD に設定したくないので idmap backend は rid のままでいきます。ということで,昨日から winbind nss info だけ書き換えます。
monyo さんのように,smb.conf を以下のように書き換えます。
[global] ... winbind nss info = sfu template ...
smb.conf のマニュアルを読みつつ,なんとなく fallback として template も指定しておきました。SFU 用エントリが存在しない場合,template homedir / shell を使ってくれます。
で winbind を再起動。
Step 3: ユーザの Login Shell を設定する
設定する前に,とりあえず現状の mapping を確認してみます。
# getent passwd dayflower dayflower:*:11190:10513:Dayly Dayflower:/home/dayflower:/bin/bash
「/home/ユーザ名」というのと「/bin/bash」というのは template homedir / shell で指定したものです。
さて,SFU をきちんとインストールしないとユーザ管理用の GUI がなくて困ります。適当な LDAP ディレクトリエディタを使うことになります。
- 案 1: LDAPEditor を使う
- 案 2: Windows 2000 SP4 Support Tools の ADSI Edit を使う
今回は後者でいきます。英語版でよければ【http://www.microsoft.com/windows2000/downloads/servicepacks/sp4/supporttools.mspx】からダウンロードできます。
- ADSI Edit を開く
- Domain NC を開く
- 下位ツリー(今回の例だと DC=hoge,DC=example,DC=com)を開く
- CN=Users を開く
- ターゲットユーザの CN(例では DC=Dayly Dayflower)を選択,右クリックしてプロパティを開く
- Attributes タブを選択
- 「Select which properties to view」は Optional か Both を選択
- 「Select a property to view」で「msSFU30LoginShell」を選択(この選択肢がない場合,スキーマの拡張がうまくいっていない)
- 「Edit Attribute」欄に,(今回の例では)「/bin/zsh」を入力
- 「Set」ボタンを押す
以上の手順でこのユーザの Login Shell が変更できました。もし Home Directory を変更したい場合は「msSFU30HomeDirectory」を変更します。私はホームディレクトリについては template homedir におまかせしてます。
さて,新しい mapping を確認してみましょう。
# getent passwd dayflower dayflower:*:11190:10513:Dayly Dayflower:/home/dayflower:/bin/zsh
おお,でけたでけた。