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 ディレクトリエディタを使うことになります。

今回は後者でいきます。英語版でよければ【http://www.microsoft.com/windows2000/downloads/servicepacks/sp4/supporttools.mspx】からダウンロードできます。

  1. ADSI Edit を開く
  2. Domain NC を開く
  3. 下位ツリー(今回の例だと DC=hoge,DC=example,DC=com)を開く
  4. CN=Users を開く
  5. ターゲットユーザの CN(例では DC=Dayly Dayflower)を選択,右クリックしてプロパティを開く
  6. Attributes タブを選択
  7. 「Select which properties to view」は Optional か Both を選択
  8. 「Select a property to view」で「msSFU30LoginShell」を選択(この選択肢がない場合,スキーマの拡張がうまくいっていない)
  9. 「Edit Attribute」欄に,(今回の例では)「/bin/zsh」を入力
  10. 「Set」ボタンを押す

以上の手順でこのユーザの Login Shell が変更できました。もし Home Directory を変更したい場合は「msSFU30HomeDirectory」を変更します。私はホームディレクトリについては template homedir におまかせしてます。


さて,新しい mapping を確認してみましょう。

# getent passwd dayflower
dayflower:*:11190:10513:Dayly Dayflower:/home/dayflower:/bin/zsh

おお,でけたでけた。

雑感

NT ドメインモデルではできない,と書きましたけど,Samba (LDAP) PDC だったら LDAP サーバに SFU30 のスキーマを定義してやればいけるんじゃないかなぁとなんとなく思いました。

*1:@IT のサイトでは,『フォレスト内のドメイン・コントローラが1台の場合以外は』と書いてありますが,SFU 全体をインストールしたくないなら,ドメインコントローラが1台の場合でも sfusch を使ってください

*2:でもたぶんこの SUA って Interix の POSIX サブシステム部分だと思うです;だからやはりスキーマの拡張は必要なんじゃないかなぁ