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

John H. Terpstra

Samba Team

Jean François Micouleau

Gerald (Jerry) Carter

Samba Team

Table of Contents

機能と利便性
議論
警告:ユーザー固有のグループ問題
ネストされたグループ: WindowsドメイングループをWindowsローカルグループに追加
管理に関する重要な情報
既定値のユーザー、グループと相対識別子
設定例
設定スクリプト
smb.confにグループを追加するスクリプト例
グループマッピング設定のためのスクリプト
よくあるエラー
グループの追加が失敗する
ワークステーションのPower UsersグループへのDomain Usersの追加

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 AdminsWindowsグループのメンバーシップを 付与するのに使用されていた(既定値の設定では)。

機能と利便性

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への解決

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

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

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

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

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

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

smb.confのグループインタフェーススクリプトが、直接UNIX/Linuxシステムツール (shadowユーティリティ,groupadd,groupdelgroupmod)を呼び出した場合、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グループのメンバーとして作成された場合、 joeAdministratorというユーザーと 全く同じ権限を持つ。

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

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

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

  2. このグループにAdministratorsにならなければならないユーザーを 追加。たとえば、joe, johnmary 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, johnmaryは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コマンドの addmemdelmemサブコマンド経由で 行える。たとえば、ローカルグループdemoDOM\Domain Usersを追加するのは以下のように行う:

	net rpc group addmem demo "DOM\Domain Users"
	

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

管理に関する重要な情報

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

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

  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 がtdbsamを使用するよう設定されていると、必須のドメイン グループは自動的に作成される。その既定値の NT グループを作成(準備)するのは LDAP 管理者の責任である。

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

Note

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

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

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

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

よく知られているエントリRIDタイプ必須
Domain Administrator500UserNo
Domain Guest501UserNo
Domain KRBTGT502UserNo
Domain Admins512GroupYes
Domain Users513GroupYes
Domain Guests514GroupYes
Domain Computers515GroupNo
Domain Controllers516GroupNo
Domain Certificate Admins517GroupNo
Domain Schema Admins518GroupNo
Domain Enterprise Admins519GroupNo
Domain Policy Admins520GroupNo
Builtin Admins544AliasNo
Builtin users545AliasNo
Builtin Guests546AliasNo
Builtin Power Users547AliasNo
Builtin Account Operators548AliasNo
Builtin System Operators549AliasNo
Builtin Print Operators550AliasNo
Builtin Backup Operators551AliasNo
Builtin Replicator552AliasNo
Builtin RAS Servers553AliasNo


設定例

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

root#  net groupmap list
Domain Admins (S-1-5-21-2547222302-1596225915-2414751004-512) -> domadmin
Domain Users (S-1-5-21-2547222302-1596225915-2414751004-513) -> domuser
Domain 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 smbtmpgrp00

thegid=`cat /etc/group | grep ^smbtmpgrp00 | cut -d ":" -f3`

# 次にMicrosoft Windowsネットワーク用に使いたい名前に変更。
cp /etc/group /etc/group.bak
cat /etc/group.bak | sed "s/^smbtmpgrp00/$1/g" > /etc/group
rm /etc/group.bak

# 通常のようにGIDを返す。
echo $thegid
exit 0


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

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

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


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

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

Example 12.3. Script to Set Group Mapping

#!/bin/bash

net groupmap add ntgroup="Domain Admins" unixgroup=ntadmin rid=512 type=d
net groupmap add ntgroup="Domain Users" unixgroup=users rid=513 type=d
net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d

groupadd Orks
groupadd Elves
groupadd Gnomes

net groupmap add ntgroup="Orks"   unixgroup=Orks   type=d
net groupmap add ntgroup="Elves"  unixgroup=Elves  type=d
net groupmap add ntgroup="Gnomes" unixgroup=Gnomes type=d


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

Note

Sambaのバージョン3.0.23未満では、 Domain Admins, Domain UsersDomain 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とユーザー rootMIDEARTH\rootとして入力する。