Samba DCの構築

LinuxWindows

はじめに

Windwos Domainを構築するにはDomain Controllerが必要です。
しかし、Windows Serverは高価なのでSambaでDomain Controllerを作ることにしました。

3.4. Samba ID マッピングの理解および設定 | Red Hat Product Documentation
3.4. Samba ID マッピングの理解および設定 | Red Hat Documentation

LDAPとの連携について

ユーザー認証のバックエンドにLDAPを使いたかったのですが、Samba4ではサポートする予定はないと明言されているので諦めます。
これができればLinuxのユーザー認証と一元化できるのですが残念です。
以下のURLの「3.10.2」に記述があります。

FAQ - SambaWiki

参考

Setting up Samba as an Active Directory Domain Controller - SambaWiki

環境

- Debian bullseye 64bit
    - Samba 4.13.13+dfsg-1~deb11u5
- Windows Server 2022 Standard
    - Client
- Windows10 Pro
    - Client

Active Directoryの環境

1台目のDC: beta(FSMOの役割) 192.168.1.1
ドメイン名: ND
レルム: ND.somedomain
機能レベル  : 2008 R2

dns forwarder
    192.168.100.2

固定IPアドレスに変更

DHCPに関連するパッケージを削除します。

sudo apt purge isc-dhcp-common isc-dhcp-client

/etc/network/interfacesを編集します。

source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback

allow-hotplug eno1
#iface eno1 inet dhcp
auto eno1
iface eno1 inet static
  address 192.168.1.1
  netmask 255.255.255.0
  gateway xx.xx.xx.xx
  dns-domain xx.xx.xx
  dns-nameservers xx.xx.xx.xx

/etc/resolv.confを編集します。
自身のSmabaの内部DNSで解決するように設定します。

search xx.xx.xx
nameserver 127.0.0.1

パッケージのインストール

sudo apt install samba krb5-user winbind smbclient ntp ntpdate

NTPの設定

時刻を合わせます。

sudo systemctl stop ntp
sudo ntpdate -B ntp.nict.jp
sudo systemctl start ntp

NTPが動作しているか確認します。
同期まで少し時間がかかります。

ntpq -np

サービスを無効化する

不要なサービスを無効化します。

sudo systemctl stop smbd nmbd winbind
sudo systemctl disable smbd nmbd winbind
sudo systemctl daemon-reload

新規にDomain Controllerを設定する

対話型で行います。
「–use-rfc2307」は非推奨なので設定しません。

Setting up RFC2307 in AD - SambaWiki
cd /etc/samba
mv smb.conf smb.conf-old

sudo samba-tool domain provision --interactive

質問に回答します。
Realmは、Kerberos認証プロトコルにおけるドメインの識別子です。
Domainは、実際に運用するドメイン名を指定します。
DNS forwarder IP addressは、異なるサブネットのパソコンを指定した方が良いです。

Realm [ND.domain]:  ND.somedomain
Domain [ND]:  ND
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]:  192.168.100.2
Administrator password:
Retype password:

krb5.confのコピー

生成されたkrb5.confをコピーします。

sudo cp /var/lib/samba/private/krb5.conf /etc/

krb5.confの内容は以下の通りです。
betaは1台目のDCの名前です。

 [libdefaults]
        default_realm = ND.SOMEDOMAIN
        dns_lookup_realm = false
        dns_lookup_kdc = true

 [realms]
ND.somedomain = {
        default_domain = nd.somedomain
}

 [domain_realm]
        beta = ND.SOMEDOMAIN

smb.confの確認

/etc/samba/smb.confの内容を確認します。
Active DirectoryのDomain Contorollerではbackendにadおよびridは設定できないので、強制的にtdbになります。
「backend = ad」と設定した場合、testparmを実行すると分かりますが無視されます。

Samba Wikiの「RFC2307 on AD Domain Controllers」項目にあるように「idmap_ldb:use rfc2307 = yes」は非推奨なので設定しません。
また、Samba Wikiの「Identity Mapping on a Samba Domain Controller」項目にあるようにActive DirectoryのDomain Contorollerにはidmapの設定を記述することは非推奨なのでコメントします。

Setting up RFC2307 in AD - SambaWiki
Configuring Winbindd on a Samba AD DC - SambaWiki
 [global]
dns forwarder = 192.168.100.2
netbios name = BETA
realm = ND.SOMEDOMAIN
server role = active directory domain controller
workgroup = ND

; idmap config * : backend = tdb
; idmap config * : range = 100000-999999

; idmap config ND.xxx : backend = ad
; idmap config ND.xxx: range = 1001-99999
; idmap config ND.xxx: schema_mode = rfc2307
; idmap config ND.xxx: unix_nss_info = yes
; idmap config ND.xxx: unix_primary_group = yes

; idmap_ldb:use rfc2307 = yes

  winbind enum users = yes
  winbind enum groups = yes
; winbind offline logon = yes

  obey pam restrictions = yes
  template homedir = /home/%U
  template shell = /bin/bash

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No

[netlogon]
        path = /var/lib/samba/sysvol/ND.SOMEDOMAIN/scripts
        read only = No

自動実行の設定

OSの起動時にDaemonが実行するように設定します。

sudo systemctl unmask samba-ad-dc
sudo systemctl enable samba-ad-dc
sudo systemctl start samba-ad-dc
sudo systemctl status samba-ad-dc
sudo systemctl daemon-reload

動作確認

Realmの確認

Realmを確認します。

samba-tool testparm --suppress-prompt | grep realm

Samba内部DNSの確認

Active Directory特有の値を引いてみます。
host -t SRV _ldap._tcp.【realm名】の形式です。

host -t SRV _ldap._tcp.ND.SOMEDOMAIN

_ldap._tcp.xx has SRV record 0 100 389 beta.nd.somedomain.

Kerberosチケットの取得確認

Kerberosチケットの取得ができるか確認します。
Domain Controllerを作成した際に入力したAdministratorのパスワードを入力します。

sudo kinit administrator

作成したKerberos証明書を表示します。

sudo klist

アクセスのテスト

sudo smbclient //localhost/netlogon -UAdministrator -c 'ls'

サービスの確認

smbclient -L localhost -U%

または

smbclient -L localhost -N

ドメインレベルの確認

2008 R2レベルになっていれば良いです。

sudo samba-tool domain level show

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

guidの確認

sudo ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid

WindowsのAD参加

WindowsをActive Directoryのクライアントとして参加させます。
はじめにネットワークのDNSをSamba DCのIPアドレスに変更します。

「設定」→「このPCの名前を変更(詳細設定)」に移動し、「コンピュータ名」のタブで「変更」をクリックします。
DCの名前を入力、OKをクリックしてから、Samba DCのAdministratorと、そのパスワードを入力します。
認証が完了して、OSを再起動するとDCにできているはずです。

グループポリシーが適用できない点

ログインした際にグループポリシーが適用できないエラーがログに出力されます。
Windows Server 2022でも再現しますが解決策は不明です。
ユーザ認証、ログイン、リモートデスクトップなどは問題なく出来るので、とりあえず放置して解決策を探し中です。

グループ ポリシーの処理に失敗しました。ドメイン コントローラーからファイル \\nd.somedomain\sysvol\nd.somedomain\Policies\{xxxx-xxx-xxx-xx-xxxx}\gpt.ini を読み取ろうとして失敗しました。このイベントが解決するまで、グループ ポリシー設定は適用されません。この問題は一時的なものである可能性があり、次のうちのいくつかが原因と考えられます: 
a) 名前解決または現在のドメイン コントローラーへのネットワーク接続。
b) ファイル レプリケーション サービスの潜在期間 (別のドメイン コントローラーに作成されたファイルが現在のドメイン コントローラーにレプリケートされていない)。 
c) 分散ファイル システム (DFS) のクライアントが無効になっている。
Samba4のドメインコントローラにドメインログオンした際、グループポリシーが適用できない
Samba4のドメインコントローラにドメインログオンした際、グループポリシーが適用できない 現象を確認しました。 Windows8.1では問題なく動作していたので、Windows10Insider P...

Comments