Chapter 12. グループのマッピング: Microsoft Windows と UNIX
Prev | Part III. 詳細な設定方法 | Next

## Chapter 12. グループのマッピング: Microsoft Windows と UNIX

### John H. Terpstra

Samba Team

`<jht@samba.org>`

### Jean François Micouleau

### Gerald (Jerry) Carter

Samba Team

`<jerry@samba.org>`

Samba-3からWindowsのグループSIDとUNIXのグループを関連づける新しいグループ マッピング機能が利用できる。netツールに含まれる。`groupmap` サブコマンドを、 関連づけの管理に使用する。

NTのグループとUNIXのシステムグループをマッピングするこの新しい機能では、 管理者が、どのNTドメイングループをMicrosoft Windowsクライアントに公開するか を決定することができる。既定値(`-1`)以外の値を持つ UNIXのグループにマッピングするNT のグループのみが、ドメインユーザ及び グループにアクセスするツールのグループ選択リストに含まれる。

### Warning

Samba-3では`domain admin group`パラメータが削除されたので、 `smb.conf`中にもはや指定してはならない。Samba-2.2.x中では、このパラメータは このパラメータは、一覧表示されたユーザに、 ワークステーション上でローカル管理 権限を与える`Domain Admins`Windowsグループのメンバーシップを 付与するのに使用されていた(既定値の設定では)。

## 機能と利便性

Sambaでは、管理者がMicrosoft Windows NT4/200x グループアカウントを作成し、それらを 任意にUNIX/Linuxのグループアカウントと関連づけることができる。

グループアカウントは、Microsoft Windows NT4またはMicrosoft Windows 200x/XP Professional のMMCツールを使用して管理することができる。これらのツールを使って自動的にUNIX/Linux のシステムアカウントを作成するには、適切なスクリプトを`smb.conf`で提供する必要が ある。それらのスクリプトが無い場合、`winbindd`が動作している 限りは、これらのツールを使って作成されたSambaグループアカウントは`smb.conf` ファイル中のidmap uid/idmap gid パラメータで指定されているID範囲内でUNIX UID/GIDを割り当てられる。

Figure 12.1. IDMAP: グループSIDからGIDへの解決

Figure 12.2. IDMAP: GIDから対応するSIDへの解決

どちらのケースでもwinbinddが動作していない場合は、ローカルで解決可能なグループ のみが認識される。IDMAP: グループSIDからGIDへの解決 とIDMAP: GIDから対応するSIDへの解決を 参照のこと。IDMAPのグループマッピングの保存 で示すように、`net groupmap`が、NTのSIDに対応するUNIXグループの 作成に使用される。

Figure 12.3. IDMAPのグループマッピングの保存

`smb.conf`のグループインタフェーススクリプトが、直接UNIX/Linuxシステムツール (shadowユーティリティ,`groupadd`,`groupdel`と `groupmod`)を呼び出した場合、UNIX/Linuxグループ名は、これらの ツールが課す制約を受けることを、管理者は知っていなければならない。もし、 ツールが、大文字や空白文字を認めない場合、Microsoft Windows NT4/200x風の `Engineering Managers`というグループの作成は、同名のUNIX/Linux グループの作成が試みられることになるが、それはもちろん失敗する。

このOSツールの制約に対しては幾つかの回避策がある。一つはOSの制約に合うUNIX/Linux システムグループ名を作成し、Sambaインターフェースの呼び出しには、UNIX/Linuxの グループID(GID)を返すようなスクリプトを使う方法である。これは、動的な回避策である。

もう一つの回避策は、手動でUNIX/Linuxグループを作成し、次に手動でSamba サーバに Microsoft Windows NT4/200xグループを作成し、そして`net groupmap` ツールを使ってこの2つを互いに関連付けることである。

## 議論

コンピュータにMicrosoft Windows NT4/200xをインストール するとき、インストールプログラムは既定値のユーザとグループを作成し、特に、 `Administrators`グループの場合は、必須のシステムタスクを実行 するのに必要な権限をグループに付与する。例えば、ローカルマシンの日付や時間を変更 したり、ローカルマシン上の実行中のプロセスを止める(又は閉じる)ような権限である。

`Administrator`ユーザは`Administrators` グループのメンバで、そのため、`Administrators`グループの 権限を引き継ぐ。もし、`joe`というユーザが `Administrators`グループのメンバとして作成された場合、 `joe`は`Administrator`というユーザと 全く同じ権限を持つ。

Microsoft Windows NT4/200x/XPマシンがドメインメンバになる場合、 PDCの“Domain Admins”グループは、ワークステーションのローカル `Administrators`グループに追加される。 `Domain Admins`グループのいずれのメンバもワークステーション にログオンすると、ローカルの`Administrators`グループの 権限を継承する。

以下のステップは、Samba PDCユーザを`Domain Admins`グループの メンバにする方法を説明する。

1. `domadm`と呼ばれるUNIXグループを作成(通常`/etc/group`の中に)。

2. このグループに“Administrators”にならなければならないユーザを 追加。たとえば、`joe, john`と`mary` administratorsにしたいならば、`/etc/group`のエントリは 下記のようになる:

       		domadm:x:502:joe,john,mary

3. 以下のコマンドを実行して、“Domain Admins”グループをdomadm グループにマップする:

       root# net groupmap add ntgroup="Domain Admins" unixgroup=domadm rid=512 type=d

   “Domain Admins”の両側の引用符は、グループ名に空白があるために 必要である。また、イコール記号(=)の前後に空白を入れないこと。

これで`joe, john`と`mary`はdomain administratorsになった。

任意のUNIXグループを任意のWindows NT4/200xグループにマッピングしたり、UNIX グループをWindowsドメイングループにすることが可能である。例えば、あるUNIXグループ (例: acct)をドメインメンバマシンのローカルファイルやプリンターのACLに含めたい場合、 以下のコマンドをSamba PDC上で実行して、そのグループをドメイングループにする:

    root# net groupmap add rid=1000 ntgroup="Accounting" unixgroup=acct type=d

`ntgroup`の値は、コマンドのデリミタとして解釈されてしまうことを 防ぐために、空白が入っている場合には引用符で囲まなければならない。

RIDパラメーターは通常1000から始まる符号なしの32ビット整数である。しかし、このRIDは ユーザーに割り当てられるRIDと重複してはならない。これを検証する方法は、使用して いるpassdbバックエンドによって異なる。このツールの今後のバージョンでは自動検証が 可能になるかもしれまないが、現行では、使用者が自分でやらなければならない。

### 警告:ユーザ固有のグループ問題

Windowsは同じ名前のユーザとグループアカウントを許可しない。これは、プライベート グループを使っているすべてのサイトに重大な影響がある。プライベートグループ アカウントは、ユーザがおのおの固有のグループアカウントを持つという管理上の 設定である。Red Hat Linuxやいくつかの自由なLinuxディストリビューションでは、 既定値でプライベートグループを作成する。

UNIX/LinuxグループアカウントがWindowsグループアカウントにマップされた場合、 すべての競合は、任意のユーザアカウント名にWindowsドメイングループ名が オーバラップしないことを保証することで防げる。

### ネストされたグループ: WindowsドメイングループをWindowsローカルグループに追加

`nested groups`として知られているこの機能は、Samba-3.0.3 で初めて追加された。

Windows NT 3.10リリース以降のすべてのMicrosoft Windows製品は、ネストされた グループをサポートしている。セキュリティ管理をとても簡単にするので、多くの Windowsネットワーク管理者はこの機能に依存している。

ネストされたグループアーキテクチャは、日々のユーザとグループメンバ管理をドメイン セキュリティデータベース上で実行されるべきという理由でデザインされた。グループ セキュリティの応用は、ローカルグループのみを使うドメインメンバサーバ上で実装 されるべきである。ドメインメンバサーバ上で、すべてのファイルシステムセキュリティ 制御は、ドメイングローバルグループとドメイングローバルユーザを含むローカル グループの使用を制限する。

この取り決めの利便性は何か、という疑問があるかもしれない。Windowsネットワーク アーキテクチャの深い闇を知っている人にとって、答えは明確である。20万ものファイル があり、各ファイルは個別のドメインユーザとドメイングループに設定されているサーバ について考えてみよう。ファイルサーバを持つ会社が別の会社を買い、その結果、サーバ を別の場所に移動し、別のドメインのメンバにするとする。誰がすべてのファイルと ディスクを所有すると思うか? 答えは「不明なアカウント」である。

ファイル所有権の混乱を解決することは、すべてのファイルとディレクトリアクセス 制御をコントロールするためにローカルグループを用いて簡単に避けられることが できる面白くない管理業務である。この場合、ローカルグループのメンバのみが 失われる。記憶サブシステム中のファイルとディレクトリは引き続きローカル グループによって所有される。同じことはそれらに対するすべてのACLについても 存在する。サーバがメンバとなった新しいドメイン中のドメイングローバルグループ のための適当なエントリをもつローカルグループ内の `不明なアカウント`メンバシップエントリを削除するのは 管理的により簡単である。

ネストされたグループを使用する、もう一つの突出した例は、ドメインメンバワーク ステーションとサーバーで管理特権の実装を伴う。管理特権は各ドメインメンバマシンの ビルトイン`Administrators`ローカルグループのすべてのメンバに 与えられる。すべてのdomain administratorsがメンバサーバまたはワークステーション に対してとドメインの参加に対して完全な権限を持つようにするには、 `Domain Admins`グループをローカルのAdministratorsグループに 追加する。そのため、Domain Adminsグループのメンバとしてドメインにログオンする 誰もが、各ドメインメンバ上のローカル管理特権をも持つ。

UNIX/Linuxはネストされたグループという概念を持たないので、Sambaは長い間それを サポートしてこなかった。問題は、`/etc/group`中の追加グループ のメンバとしてUNIXグループを入力しなければならないことである。これは、今実装 されているUNIXファイルシステムセキュリティモデルのデザインの要求でないために 動作しない。Samba-2.2以降、winbindは、メンバであるSambaサーバのドメイン コントローラからのユーザとグループ情報をオンデマンドで `/etc/group`に提供出来る。

実際、Sambaは動的な`libnss_winbind`メカニズム経由で `/etc/group`データを補完する。Samba-3.0.3から、この機能は Windowsが行うのと同じ方式でローカルグループを提供するために使われる。これは、 アクセス時にその場でローカルグループに展開されることによって動作する。たとえば、 ドメインの`Domain Users`グループがローカルグループ `demo`のメンバになるというようなことである。Sambaが ローカル(alias)グループ`demo`のメンバであることを解決する 必要がある時はいつも、winbindはDomain Usersグループのdemoメンバーについて ドメインコントローラに問い合わせる。定義によって、UNIX/Linuxグループ `demo`のメンバであるように見せかけることが出来る、ユーザ オブジェクトのみを含むことが出来る。

ネストされたグループを有効にするために、`winbindd`はNSS winbind と一緒に使わなければならない。ローカルグループの作成と管理はWindowsのドメイン ユーザマネージャかそれのSambaでの相当品、`net rpc group` ユーティリティ経由が最適である。ローカルグループ`demo` の作成は以下のように行う:

    	root#  net rpc group add demo -L -Uroot%not24get

ここで、-Lスイッチはローカルグループ作成を意味する。適切なユーザかルート権限で 正しいホストにアクセスするために、-Sと-Uスイッチの追加が必要かもしれない。 グループメンバの追加と削除は`net rpc group`コマンドの `addmem`と`delmem`サブコマンド経由で 行える。たとえば、ローカルグループ`demo`に “DOM\Domain Users”を追加するのは以下のように行う:

    	net rpc group addmem demo "DOM\Domain Users"

これら2つのステップを完了し、`getent group demo`を実行すると、 グループ`demo`のメンバとしてグローバルな `Domain Users`グループのメンバとしてdemoを表示する。 これはまた、任意のローカルまたはドメインユーザでも動作する。ドメインDOMが 他のドメインを信頼している場合、信頼されたドメインに、 `demo`のメンバとしてグローバルユーザとグループを追加すること も可能である。`demo`グループに追加されたグループのメンバで ある他のドメインからのユーザはローカルドメインユーザが持つのと同じアクセス許可を 持つことになる。

### 管理に関する重要な情報

管理者権限は以下の二つの用途に対して必要である:

1. Samba-3のドメインコントローラ、ドメインメンバサーバ及びクライアントのため。

2. Windowsのドメインメンバワークステーション管理のため。

Samba 3.0.10までのバージョンは、Windowsドメインメンバークライアントマシンから システム管理作業のために必要である権利と特権を割り当てる機能は提供しない。その ため、ユーザの追加、削除とユーザとグループ情報の変更と、ワークステーションの ドメインメンバシップ管理のような管理作業はroot以外のどのようなアカウントでも 扱える。

Samba-3.0.11から、管理作業を非root(すなわち、Microsoft Windows Administratorと 同等以外のアカウント)に委譲できる新しい特権管理インタフェースが含まれるように なった(ユーザの権限と権利を参照)。

Windowsドメインメンバワークステーション上の管理作業は`Domain Admins` グループのメンバの誰かによって行える。このグループは任意の適切なUNIXグループに マップできる。

#### 3.0.11より前のバージョンのみに適用

ユーザの追加削除のようなUNIX/Linux上の管理作業は`root`と 同等の権限が必要である。Samba のドメインに対するWindowsクライアントの追加は、 Windows クライアントに対するユーザアカウントの追加が含まれる。

多くのUNIX管理者がSamba Teamに対して`root`の権限を持たなくても Windowsクライアントの追加、ユーザの追加、変更、削除ができるようにしてほしいという 要望を寄せ続けている。このような要望はUNIXシステムの基本的なセキュリティの観念と 接触するものある。

`root`レベルの権限を与えずにUNIX/Linuxシステムに対してアクセス する安全な方法はない。`root`権限は、ドメインに `root`ユーザでログインするか、ある特定のユーザを、 `/etc/passwd`データベースの中にUID=0とすることで可能となる。 それらの ユーザは、NT4 のドメインユーザマネージャやドメインサーバマネージャ などのツールを使用してユーザやグループに加えドメインメンバサーバやクライアント アカウントの管理ができる。また、このレベルの権限が、共有レベルのACL管理には 必要である。

### 既定値のユーザ、グループと相対識別子

インストール直後、Windows NT4/200x/XPは特定のユーザ、グループ及び別名のエントリ が事前に設定される。それらはよく知られている相対識別子(RID)を持つ。これらは 運用の継続的な整合性のために維持しなければならない。Sambaは必須のドメイン グループを持たなければならず、それらのグループは適切なRID値を必要とするSamba-3 が`tdbsam`を使用するよう設定されていると、必須のドメイン グループは自動的に作成される。その既定値のNTグループを作成(準備)するのはLDAP 管理者の責任である。

必須のドメイングループには良く知られているRIDを割り当てなければならない。既定値の ユーザ、グループ、別名とRIDは よく知られているユーザのRID既定値を参照のこと。

### Note

必須のドメイングループ作成と、それに既定値のRIDを割り当てるのは管理者の責任である。

他にも必要なドメイングループを作成することは問題ありませんが、必須のドメイン グループ(良く知られているもの)が作成済みで、既定値のRIDが割り当てられている ことを確認すること。作成する他のグループには任意のRIDを割り当てることができる。

各ドメイングループをUNIXシステムグループにマッピングすること。それが、これらの グループをNTドメイングループとして使用できる唯一の方法である。

Table 12.1. よく知られているユーザのRID既定値

よく知られているエントリ | RID | タイプ | 必須
--- | --- | --- | ---
Domain Administrator | 500 | User | No
Domain Guest | 501 | User | No
Domain KRBTGT | 502 | User | No
Domain Admins | 512 | Group | Yes
Domain Users | 513 | Group | Yes
Domain Guests | 514 | Group | Yes
Domain Computers | 515 | Group | No
Domain Controllers | 516 | Group | No
Domain Certificate Admins | 517 | Group | No
Domain Schema Admins | 518 | Group | No
Domain Enterprise Admins | 519 | Group | No
Domain Policy Admins | 520 | Group | No
Builtin Admins | 544 | Alias | No
Builtin users | 545 | Alias | No
Builtin Guests | 546 | Alias | No
Builtin Power Users | 547 | Alias | No
Builtin Account Operators | 548 | Alias | No
Builtin System Operators | 549 | Alias | No
Builtin Print Operators | 550 | Alias | No
Builtin Backup Operators | 551 | Alias | No
Builtin Replicator | 552 | Alias | No
Builtin RAS Servers | 553 | Alias | No

### 設定例

`net groupmap list`を実行することでマッピングデータ ベース中の種々のグループを表示出来る。以下が例である:

    root#  net groupmap listDomain Admins (S-1-5-21-2547222302-1596225915-2414751004-512) -> domadminDomain Users (S-1-5-21-2547222302-1596225915-2414751004-513) -> domuserDomain Guests (S-1-5-21-2547222302-1596225915-2414751004-514) -> domguest

`net groupmap`の完全な詳細は、net(8)のマニュアルを参照のこと。

## 設定スクリプト

誰もがツールを必要とする。自分のツールを作ることが好きな人もいれば、既成のツール (汎用に誰かが作成したもの)を好む人もいる。

### `smb.conf`にグループを追加するスクリプト例

Sambaのグループインタフェースで使用するグループ名を作成するスクリプトは smbgrpadd.shで提供されている。 このスクリプトは一時的なエントリを`/etc/group` ファイルに追加し、指定された名前に改名する。これは、いくつかの バージョンの`groupadd`ツールに存在する、OS管理ツールの 制限を避ける方法の例である。

Example 12.1. smbgrpadd.sh

    #!/bin/bash# 通常のgroupaddツールを使ってのグループ追加。groupadd smbtmpgrp00thegid=`cat /etc/group | grep ^smbtmpgrp00 | cut -d ":" -f3`# 次にMicrosoft Windowsネットワーク用に使いたい名前に変更。cp /etc/group /etc/group.bakcat /etc/group.bak | sed "s/^smbtmpgrp00/$1/g" > /etc/grouprm /etc/group.bak# 通常のようにGIDを返す。echo $thegidexit 0

グループ追加スクリプトのための`smb.conf`エントリの設定 中に示している上記のスクリプトのための`smb.conf`エントリは、どのように動くかを デモする。

Example 12.2. グループ追加スクリプトのための`smb.conf`エントリの設定

`[global]`
`add group script = /path_to_tool/smbgrpadd.sh "%g"`

### グループマッピング設定のためのスクリプト

上記の例では、`ntadmin`と呼ばれるUNIX/Linuxグループを作成した。 このスクリプトで、`Orks`, `Elves`と `Gnomes`という追加のグループも作成することにする。 後でマッピングデータベースを再作成する必要がある場合に備え、このシェルスクリプト を保存することを推奨する。便宜上、`initGroups.sh`という ファイル名で保存する。このスクリプトは intGroups.shで提供されている。

Example 12.3. Script to Set Group Mapping

    #!/bin/bashnet groupmap add ntgroup="Domain Admins" unixgroup=ntadmin rid=512 type=dnet groupmap add ntgroup="Domain Users" unixgroup=users rid=513 type=dnet groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=dgroupadd Orksgroupadd Elvesgroupadd Gnomesnet groupmap add ntgroup="Orks"   unixgroup=Orks   type=dnet groupmap add ntgroup="Elves"  unixgroup=Elves  type=dnet groupmap add ntgroup="Gnomes" unixgroup=Gnomes type=d

もちろん、必要に合わせて管理者がこれを編集することを想定している。 `net groupmap`ツールの使用方法の詳細についてはマニュアル ページを参照のこと。

### Note

Sambaのバージョン3.0.23未満では、 `Domain Admins, Domain Users`と`Domain Guests` Windowsグループに対する既定値のグループマッピングを自動的に生成する。しかし、 UNIX GIDへのマップは行わない。これは管理者の混乱と障害を引き起こす。Samba-3.0.23 以降はこの異常は修正された。そのため、Windowsグループは、手動かつ明示的にSamba 管理者によって有効なUNIX GIDへのマップの作成とマッピングを行わなければならない。

## よくあるエラー

この時点で、油断していると管理者はいろいろな細かいことにびっくりされられることになる。現実問題として、自動の制御スクリプトの全ステップを本番環境に移す前には、注意深く手動でテストしなければならない。

### グループの追加が失敗する

これはSambaインタフェーススクリプトが`smb.conf`ファイル中の add group scriptとして直接 `groupadd`呼んだ時によくある問題である。

もっともよくある失敗の原因は、名前に大文字かつまたはスペースを含む Microsoft Windows グループアカウントを追加しようとしたということである。

これには 3 つの回避策がある。一つ目は、UNIX/Linuxの`groupadd` システムツールの制約に沿うグループ名のみを使用することである。二つ目は、 この章で先に言及したスクリプトを使用することである。三つ目は、 Microsoft Windowsグループ名に代わるUNIX/Linuxグループアカウントを手動で作成し、 上で説明した手順でそのグループをMicrosoft Windows グループにマッピングする という方法である。

### ワークステーションのPower UsersグループへのDomain Usersの追加

“ domain usersをPower Usersグループに追加するにはどうすればいいですか? ”

Power Usersグループは各Windows 200x/XP Professionalワークステーションの ローカルグループである。Domain Usersグループは自動でPower Usersグループに 追加することはできない。ローカルマシンにadministrator としてローカルワークステーションにログオンすることで、各ワークステーション でこの作業を行わなければならず、その後以下の手続きを行う:

1. Click スタート -> コントロールパネル -> ユーザとパスワードをクリック。

2. 詳細タブをクリック。

3. 詳細ボタンをクリック。

4. `グループ`をクリック。

5. `Power Users`をダブルクリック。この作業後、ローカル マシンの`Power Users`グループにユーザとグループを 追加するパネルが起動する。

6. 追加ボタンをクリック。

7. `Domain Users`グループに追加するドメインを選択。

8. `Domain Users`グループをダブルクリック。

9. OKボタンをクリック。この作業中にログオン ボックスが表示されたならば、 接続するために `DOMAIN\UserName`を入力することを忘れないこと。 すなわち、ドメイン`MIDEARTH`とユーザ `root`を`MIDEARTH\root`として入力する。

Prev | Up | Next
Chapter 11. アカウント情報データベース | Home | Chapter 13. リモートとローカル管理:Netコマンド