目次
Samba-3 から Windows のグループ SID と UNIX のグループを関連づける新しいグループ
マッピング機能が利用できる。netツールに含まれる。groupmap
サブコマンドを、 関連づけの管理に使用する。
NTのグループとUNIXのシステムグループをマッピングするこの新しい機能では、
管理者が、どのNTドメイングループをMicrosoft Windowsクライアントに公開するか
を決定することができる。既定値(-1
)以外の値を持つ
UNIXのグループにマッピングするNT のグループのみが、ドメインユーザー及び
グループにアクセスするツールのグループ選択リストに含まれる。
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を割り当てられる。
どちらのケースでもwinbinddが動作していない場合は、ローカルで解決可能なグループ
のみが認識される。IDMAP: グループSIDからGIDへの解決
とIDMAP: GIDから対応するSIDへの解決を
参照のこと。IDMAPのグループマッピングの保存
で示すように、net groupmap
が、NTのSIDに対応するUNIXグループの
作成に使用される。
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
グループの
メンバーにする方法を説明する。
domadm
と呼ばれるUNIXグループを作成(通常/etc/group
の中に)。
このグループに「Administrators」にならなければならないユーザーを
追加。たとえば、joe, john
とmary
administratorsにしたいならば、/etc/group
のエントリは
下記のようになる:
domadm:x:502:joe,john,mary
以下のコマンドを実行して、「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ドメイングループ名が オーバーラップしないことを保証することで防げる。
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
グループに追加されたグループのメンバーで
ある他のドメインからのユーザーはローカルドメインユーザーが持つのと同じアクセス許可を
持つことになる。
管理者権限は以下の二つの用途に対して必要である:
Samba のドメインコントローラー、ドメインメンバーサーバー及びクライアントのため。
Windowsのドメインメンバーワークステーション管理のため。
Samba 3.0.10までのバージョンは、Windowsドメインメンバークライアントマシンから システム管理作業のために必要である権利と特権を割り当てる機能は提供しない。その ため、ユーザーの追加、削除とユーザーとグループ情報の変更と、ワークステーションの ドメインメンバーシップ管理のような管理作業はroot以外のどのようなアカウントでも 扱える。
Samba-3.0.11から、管理作業を非root(すなわち、Microsoft Windows Administratorと 同等以外のアカウント)に委譲できる新しい特権管理インタフェースが含まれるように なった(ユーザーの権限と権利を参照)。
Windowsドメインメンバーワークステーション上の管理作業はDomain Admins
グループのメンバーの誰かによって行える。このグループは任意の適切なUNIXグループに
マップできる。
ユーザーの追加削除のような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既定値を参照のこと。
他にも必要なドメイングループを作成することは問題ありませんが、必須のドメイン グループ(良く知られているもの)が作成済みで、既定値のRIDが割り当てられている ことを確認すること。作成する他のグループには任意のRIDを割り当てることができる。
各ドメイングループをUNIXシステムグループにマッピングすること。それが、これらの グループをNTドメイングループとして使用できる唯一の方法である。
表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 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)のマニュアルを参照のこと。
誰もがツールを必要とする。自分のツールを作ることが好きな人もいれば、既成のツール (汎用に誰かが作成したもの)を好む人もいる。
Sambaのグループインタフェースで使用するグループ名を作成するスクリプトは
smbgrpadd.shで提供されている。
このスクリプトは一時的なエントリを/etc/group
ファイルに追加し、指定された名前に改名する。これは、いくつかの
バージョンのgroupadd
ツールに存在する、OS管理ツールの
制限を避ける方法の例である。
例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
エントリは、どのように動くかを
デモする。
上記の例では、ntadmin
と呼ばれるUNIX/Linuxグループを作成した。
このスクリプトで、Orks
, Elves
と
Gnomes
という追加のグループも作成することにする。
後でマッピングデータベースを再作成する必要がある場合に備え、このシェルスクリプト
を保存することを推奨する。便宜上、initGroups.sh
という
ファイル名で保存する。このスクリプトは
intGroups.shで提供されている。
例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
ツールの使用方法の詳細についてはマニュアル
ページを参照のこと。
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 グループにマッピングする
という方法である。
「 domain usersをPower Usersグループに追加するにはどうすればいいですか? 」
Power Usersグループは各Windows 200x/XP Professionalワークステーションの ローカルグループである。Domain Usersグループは自動でPower Usersグループに 追加することはできない。ローカルマシンにadministrator としてローカルワークステーションにログオンすることで、各ワークステーション でこの作業を行わなければならず、その後以下の手続きを行う:
Click
タブをクリック。
ボタンをクリック。
グループ
をクリック。
Power Users
をダブルクリック。この作業後、ローカル
マシンのPower Users
グループにユーザーとグループを
追加するパネルが起動する。
ボタンをクリック。
Domain Users
グループに追加するドメインを選択。
Domain Users
グループをダブルクリック。
DOMAIN\UserName
を入力することを忘れないこと。
すなわち、ドメインMIDEARTH
とユーザー
root
をMIDEARTH\root
として入力する。