はじめに
Windwos Domainを構築するにはDomain Controllerが必要です。
しかし、Windows Serverは高価なのでSambaでDomain Controllerを作ることにしました。
LDAPとの連携について
ユーザー認証のバックエンドにLDAPを使いたかったのですが、Samba4ではサポートする予定はないと明言されているので諦めます。
これができればLinuxのユーザー認証と一元化できるのですが残念です。
以下のURLの「3.10.2」に記述があります。
参考
環境
- 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」は非推奨なので設定しません。
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の設定を記述することは非推奨なのでコメントします。
[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) のクライアントが無効になっている。
Comments