Ubuntu Weekly Recipe

第854回Sambaで作るActive Directory互換環境(3) ドメインコントローラーの基本操作

第852回第853回でSambaを使ったActive Directory(以下、AD)互換環境を構築しました。今回は複数のドメインコントローラー(DC)の基本的な操作について解説します。

FSMOロールの転送

第853回で解説したように、ADにはFSMOロールと呼ばれるものが複数あります。DC同士は基本的に対等な関係にありますが、特定の操作で競合・不整合が発生しないようDCに対してFSMOロールが割り当てられ、ロールを持つDCだけがその操作をおこなえます。

このFSMOロールは他のDCに転送が可能です。もっとも、FSMOロールを持つDCが正常に稼働している限りは特に転送する必要はありません。しかし、あるFSMOロールを持っているDCをメンテナンスのために停止させる状況やFSMOロールを持つDCが正常に動作してないといった状況ではロールの転送が必要となります。本節ではこれらのシチュエーションを想定して、FSMOロールの転送方法について紹介します。

まず、用語について整理すると、FSMOロールの移動には転送(transfer)と押収(seize)の2つがあります。転送はDC同士が協力して実施します。それに対し、押収は「強制転送」とも呼ばれることがあるように、強制的にFSMOロールを移動させる操作で、最後の手段と位置づけられています[1]

構成については、前回までに構築した環境を前提とします。

  • ドメイン名: example.com
    • 1台目のDC
      • ホスト名: samba-ad-dc01
    • 2台目のDC
      • ホスト名: samba-ad-dc02
  • OS: Ubuntu Server 24.04 LTS

操作を始める前に、第853回までの作業が完了した時点でのFSMOロールの所在を確認してみます。次のようにsamba-ad-dc01がすべてのFSMOロールを持っているはずです。

samba-ad-dc02$ sudo samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
InfrastructureMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
RidAllocationMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
DomainNamingMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com

この状態を前提にDC samba-ad-dc01をメンテナンスのために計画的に停止するというシチュエーションを想定します。この場合、マシンの停止に先立って、DC samba-ad-dc01が持つFSMOロールを平和的にDC samba-ad-dc02に転送させたいところです。そのため、FSMOロールを引き受ける(転送先となる)samba-ad-dc02側で次のコマンドを実行します。

samba-ad-dc02:$ sudo samba-tool fsmo transfer --role=all -U [email protected]
...
FSMO transfer of 'rid' role successful
FSMO transfer of 'pdc' role successful
FSMO transfer of 'naming' role successful
FSMO transfer of 'infrastructure' role successful
FSMO transfer of 'schema' role successful
Password for [[email protected]]:
FSMO transfer of 'domaindns' role successful
FSMO transfer of 'forestdns' role successful

すべてのFSMOロールの転送が完了したようなので、実際に確認してみます。

samba-ad-dc02$ sudo samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
InfrastructureMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
RidAllocationMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
DomainNamingMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com

確かにsamba-ad-dc02にすべてのFSMOロールが転送されています。なお、第853回で構成したようなSYSVOLフォルダの同期をおこなっている場合は適宜同期を止めるなどの対応が別途必要です。

また、一部のFSMOロールだけ転送する場合には--roleオプションで転送したいロールを指定できます。--roleオプションに指定できる内容はsamba-tool fsmo transfer --helpで確認できます。

samba-ad-dc02$ samba-tool fsmo transfer --help
Usage: samba-tool fsmo transfer [options]

Transfer the role.


Options:
  ...
  --role=ROLE           The FSMO role to seize or transfer.
                        rid=RidAllocationMasterRole  schema=SchemaMasterRole
                        pdc=PdcEmulationMasterRole
                        naming=DomainNamingMasterRole
                        infrastructure=InfrastructureMasterRole
                        domaindns=DomainDnsZonesMasterRole
                        forestdns=ForestDnsZonesMasterRole  all=all of the
                        above  You must provide an Admin user and password.

このようにFSMOロールを持っているDCが利用可能な場合は転送できます。しかし、障害等でDCが利用できない場合には押収が必要となります。

そのため、次は(FSMOロールを転送したばかりですが)DC samba-ad-dc02で問題が発生し、DCとして動作できないというシチュエーションを想定します。この場合、DC samba-ad-dc02は利用不可なので転送はおこなえず、すべてのFSMOロールをDC samba-ad-dc01が押収することになります。

それでは具体的に見ていきます。まずは、疑似障害を起こすために、DC samba-ad-dc02をシャットダウンします。

samba-ad-dc02$ sudo poweroff

OSがシャットダウンしてもFSMOロールはDC samba-ad-dc02が持ったままで転送されていません。また、DC samba-ad-dc02が動作していないため、転送によるFSMOロールの移動はうまくいきません。

samba-ad-dc01$ sudo samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
InfrastructureMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
RidAllocationMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
DomainNamingMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=SAMBA-AD-DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com

samba-ad-dc01:~$ sudo samba-tool fsmo transfer --role=all -U [email protected]
...
ERROR: Transfer of 'rid' role failed: Failed FSMO transfer: WERR_HOST_UNREACHABLE

仕方がないので押収します。

$ sudo samba-tool fsmo seize --role=all -U [email protected]
...
Attempting transfer...
Transfer unsuccessful, seizing...
Seizing rid FSMO role...
FSMO seize of 'rid' role successful
Attempting transfer...
Transfer unsuccessful, seizing...
Seizing pdc FSMO role...
FSMO seize of 'pdc' role successful
Attempting transfer...
Transfer unsuccessful, seizing...
Seizing naming FSMO role...
FSMO seize of 'naming' role successful
Attempting transfer...
Transfer unsuccessful, seizing...
Seizing infrastructure FSMO role...
FSMO seize of 'infrastructure' role successful
Attempting transfer...
Transfer unsuccessful, seizing...
Seizing schema FSMO role...
FSMO seize of 'schema' role successful
Attempting transfer...
Failed to connect to ldap URL 'ldap://703255c4-6c27-4329-b5d4-1b92ac7219d2._msdcs.example.com' - LDAP client internal error: NT_STATUS_HOST_UNREACHABLE
Failed to connect to 'ldap://703255c4-6c27-4329-b5d4-1b92ac7219d2._msdcs.example.com' with backend 'ldap': LDAP client internal error: NT_STATUS_HOST_UNREACHABLE
Transfer unsuccessful, seizing...
Seizing domaindns FSMO role...
FSMO seize of 'domaindns' role successful
Attempting transfer...
Failed to connect to ldap URL 'ldap://703255c4-6c27-4329-b5d4-1b92ac7219d2._msdcs.example.com' - LDAP client internal error: NT_STATUS_HOST_UNREACHABLE
Failed to connect to 'ldap://703255c4-6c27-4329-b5d4-1b92ac7219d2._msdcs.example.com' with backend 'ldap': LDAP client internal error: NT_STATUS_HOST_UNREACHABLE
Transfer unsuccessful, seizing...
Seizing forestdns FSMO role...
FSMO seize of 'forestdns' role successful

押収が完了しました。

なお、出力から確認できる通り、samba-tool fsmo seizeで押収をおこなうよう指示した場合でも、まずは転送が試みられます。冒頭で述べた通り、押収は強制的に実施されて、動作に影響の出るリスクがありますので、まずは転送を試すという動きになっていると考えられます。

とはいえ、繰り返しになりますが押収は最後の手段です。いくら押収前に転送が試されるとしても、いきなり押収する、というのは避けて、転送できるよう手を尽くしてからのほうがいいでしょう[2]

DCの降格

DCとして動作しているマシンをドメインのDCから除外できます。この操作を降格(demote)といいます。

今回は、DC samba-ad-dc02を降格させるというシチュエーションを想定して進めます。

まずは現在のDCの状況を確認してみましょう。

samba-ad-dc02:~$ sudo samba-tool computer list --full-dn
CN=SAMBA-AD-DC02,OU=Domain Controllers,DC=example,DC=com
CN=SAMBA-AD-DC01,OU=Domain Controllers,DC=example,DC=com

当然ですが、ドメインコントローラーが2台見えています。それではいよいよDC samba-ad-dc02を降格させます。

メンテナンスや機器の入れ替え等で計画的にDCを降格させる場合は降格させるDC自身から操作をおこないます。

samba-ad-dc02$ sudo samba-tool domain demote -U [email protected]
...
Using samba-ad-dc01.example.com as partner server for the demotion
Password for [[email protected]]:
...
Demote successful

うまく降格できました。実際、samba-ad-dc02というマシンはドメインコントローラーでなくなったことが確認できます。

samba-ad-dc01$ sudo samba-tool computer list --full-dn
CN=SAMBA-AD-DC01,OU=Domain Controllers,DC=example,DC=com
CN=SAMBA-AD-DC02,CN=Computers,DC=example,DC=com

DCから降格させたらsamba-ad-dc.serviceを停止・無効化します。

samba-ad-dc02$ sudo systemctl disable samba-ad-dc --now

ただし、samba-ad-dc02はDCから降格しただけで、メンバーコンピューターとしては残っています[3]。もし、降格したDCを再度DCとして復帰させたい(昇格させたい)場合は、降格前のファイルのクリーンアップしてから、構築時と同様の手順を実施します。

samba-ad-dc02$ sudo rm /var/lib/samba/private/ -rf
# 以下、構築時の手順を再実施する

降格させたい理由が障害などでDCが操作不能となったためということもあります。この場合は、降格させるDC以外からsamba-tool domain demoteコマンドを--remove-other-dead-serverオプション付きで実行します。そうすることで、操作不能となったDCも降格させられます。

samba-ad-dc01$ sudo samba-tool domain demote --remove-other-dead-server=samba-ad-dc02

なお、この方法ではコンピューターオブジェクトも削除されます。


今回はSamba AD DCの基本的な取り扱い方を中心に解説しましたが、本来、ADはそれだけで一大技術領域をなすトピックです。実際に利用してみる場合は、Sambaの公式WikiやSambaが「お手本」としているWindows Serverのドキュメント等を見て、動かしながら挙動を確認してみてください。

おすすめ記事

記事・ニュース一覧