![見出し画像](https://assets.st-note.com/production/uploads/images/111220007/rectangle_large_type_2_ee2a0ae436441e6c11c2794da4d8857b.png?width=1200)
395.3 Sambaをドメインメンバーサーバとして設定する
主題395:Sambaのドメイン統合
395.3 Sambaをドメインメンバーサーバとして設定する
LinuC300の試験範囲である主題390~397まであるうちの「主題395:Sambaのドメイン統合」から「395.3 Sambaをドメインメンバーサーバとして設定する」についてのまとめ
重要度:3
説明:
Linuxサーバをアクティブディレクトリが存在する環境と連携できること。主要な知識範囲:
- SambaをNT4ドメインに追加する
- SambaをADドメインに追加する
- KDCからTGTを得ることができる重要なファイル、用語、ユーティリティ:
- smb.conf
- サーバロール
- サーバのセキュリティ
- netコマンド
- kinitおよびTGTとREALM
SambaをNT4ドメインに追加する
(補足)
既存のWindowsNTによるPDCに対して、SambaをBDCにすることはできない。これはWindowsとSambaの機能的な差異によるもので、Sambaでドメインコントローラーを構成したい場合はすべてSambaにする必要がある。
なお、WindowsNTで構成されたドメインにSambaサーバーがメンバーとして参加することはできる。
~コマンド~
net rpc join
既存のNTドメインに参加する。net rpc testjoin
既存のNTドメインに参加可能かテストする。
~操作例~
<・・・調査中・・・>
SambaをADドメインに追加する
~コマンド~
net domain info
ドメイン情報を取得するnet domain join
ドメインに参加する
~操作例~
以下の操作例では、既存のADサーバー(rocky9-samba42, rocky9-samba43)で構成されているEXAMPLE.LOCALというドメインにrocky9-samba44を参加させています。
参照するDNSサーバーをADドメインコントローラーのアドレスにする
ADドメインに参加する際には、参照するDNSサーバーをADサーバーのアドレスにする必要がある。
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# vi /etc/resolv.conf
nameserver 192.168.56.42
nameserver 192.168.56.43
[root@rocky9-samba44 ~]#
既存の設定ファイルを退避する
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# mv /usr/local/samba/etc/smb.conf /usr/local/samba/etc/smb.conf.orig
[root@rocky9-samba44 ~]#
既存のドメイン情報を確認する
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# samba-tool domain info 192.168.56.42
Forest : example.local
Domain : example.local
Netbios domain : EXAMPLE
DC name : rocky9-samba42.example.local
DC netbios name : ROCKY9-SAMBA42
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
[root@rocky9-samba44 ~]# samba-tool domain info 192.168.56.43
Forest : example.local
Domain : example.local
Netbios domain : EXAMPLE
DC name : rocky9-samba43.example.local
DC netbios name : ROCKY9-SAMBA43
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
[root@rocky9-samba44 ~]#
ドメインに参加する
samba-tool domain joinコマンドでドメインに参加する。
このとき参加するタイプにMEMBERを指定する。
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# samba-tool domain join example.local MEMBER -U Administrator
Password for [EXAMPLE\Administrator]: ********
No DNS domain configured for rocky9-samba44. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
Joined domain example.local (S-1-5-21-1945139037-3003495288-3791116124)
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# cat /usr/local/samba/etc/smb.conf
# Global parameters
[global]
realm = EXAMPLE.LOCAL
server role = member server
workgroup = EXAMPLE
[root@rocky9-samba44 ~]#
![](https://assets.st-note.com/img/1689784464490-WjUTKDMqlC.png?width=1200)
smbを起動する
必要に応じてsmb.confの設定を変更して起動する。
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# systemctl status smb
[root@rocky9-samba44 ~]#
winbindを起動する
winbindを起動して/etc/nsswitch.confにwinbindを追加するとADサーバーのユーザ情報が参照できるようになる。
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# systemctl start winbind
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# vi /etc/nsswitch.conf
:
passwd: sss files systemd winbind <--- ★winbindを追加する
:
group: sss files systemd winbind <--- ★winbindを追加する
:
[root@rocky9-samba44 ~]#
[root@rocky9-samba44 ~]# wbinfo -u | sort
EXAMPLE\administrator
EXAMPLE\guest
EXAMPLE\krbtgt
EXAMPLE\winuser01
EXAMPLE\winuser02
EXAMPLE\winuser03
[root@rocky9-samba44 ~]#
KDCからTGTを得ることができる
Keroberos認証はActiveDirectoryのユーザー認証に使われている技術で、一度の認証で様々なリソースにアクセスできるシングルサインオン(SSO : Single Sign On)を実現するための重要な要素。
現在主流はKerberosバージョン5(kbr5)が使われている。
Kerberos認証で使われるTCP/IPのポート番号は TCP:88とUDP:88を使う。
~用語~
KDC(Key Distribution Center)
ユーザーやサーバーの情報を管理するデータベース
SSO に利用するチケット(=TGT)を払い出す機能を持っている。
KDC には AS と TGS が含まれている。AS(Authentication Service)
ユーザーからの認証を受け付ける機能
認証を行い、成功の場合には1つ目のチケット(=TGT)を払い出す。TGT(Ticket Granting Ticket)
SSOで様々なリソースにアクセスできるようにするためのサービスチケットを発行するためのチケット。
認証済みの身分証のようなもの。TGS(Ticket Granted Service)
TGTを持っているユーザがあるサービスにアクセスしたいときに、適切な権限でアクセスを許可するサービスチケットを払い出す機能です。プリンシパル(Principal)
サービスを利用するユーザーやサーバーで「利用者」に相当する。レルム(Realm)
KDC配下の論理的なグループで「ドメイン名」に相当する。
~認証の流れ~
ユーザー → AS@KDC
利用者(=Principal)はユーザーIDとパスワードを使ってASに対して認証要求をする。AS@KDC → ユーザー
認証要求を受け付けたASはKDCにあるユーザー情報を確認し、認証が成功したら1つ目のチケットとなるTGTを発行する。ユーザー → TGS@KDC
ASから発行されたTGTを使って「リソースを提供するサーバー」のリソースにアクセスするためのサービスチケットを要求する。TGS@KDC → ユーザー
サービスチケットの要求を受けたTGSはTGTを確認してリソースを利用するためのサービスチケットを発行する。ユーザー → リソースを提供するサーバー
ユーザーはサービスチケットを使って「リソースを提供するサーバー」にあるリソースにアクセスができる。
~コマンド~
kinit
KDCからTGTを発行する。
発行されたTGTはキャッシュの保存される。klist
キャッシュに保存されているTGTを確認する。kdestroy
キャッシュされているTGTを削除する。
~操作例~
KDCに相当するActiveDirectoryドメインコントローラー1号機(rocky9-samba42)で確認。
★ ドメインコントローラーに登録済みのユーザーを確認 ★
[root@rocky9-samba42 ~]#
[root@rocky9-samba42 ~]# wbinfo -u
EXAMPLE\administrator
EXAMPLE\guest
EXAMPLE\krbtgt
EXAMPLE\winuser01
EXAMPLE\winuser02
EXAMPLE\winuser03
[root@rocky9-samba42 ~]#
★ administratorというプリンシパルでTGTの発行を依頼 ★
[root@rocky9-samba42 ~]#
[root@rocky9-samba42 ~]# kinit administrator@EXAMPLE.LOCAL
Password for administrator@EXAMPLE.LOCAL: ********
Warning: Your password will expire in 38 days on 2023年08月27日 23時16分45秒
[root@rocky9-samba42 ~]#
★ winuser01というプリンシパルでTGTの発行を依頼 ★
[root@rocky9-samba42 ~]#
[root@rocky9-samba42 ~]# kinit winuser01@EXAMPLE.LOCAL
Password for winuser01@EXAMPLE.LOCAL: ********
Warning: Your password will expire in 39 days on 2023年08月28日 22時44分28秒
[root@rocky9-samba42 ~]#
★ winuser99という存在しないプリンシパルでTGTの発行を依頼 ★
[root@rocky9-samba42 ~]#
[root@rocky9-samba42 ~]# kinit winuser99@EXAMPLE.LOCAL
kinit: Client 'winuser99@EXAMPLE.LOCAL' not found in Kerberos database while getting initial credentials
[root@rocky9-samba42 ~]#
★ TGTの発行状況を確認 ★
[root@rocky9-samba42 ~]#
[root@rocky9-samba42 ~]# klist -l
Principal name Cache name
-------------- ----------
winuser01@EXAMPLE.LOCAL KEYRING:persistent:0:krb_ccache_XeRC4Mn
administrator@EXAMPLE.LOCAL KEYRING:persistent:0:0
[root@rocky9-samba42 ~]#
[root@rocky9-samba42 ~]# klist -A
Ticket cache: KEYRING:persistent:0:krb_ccache_XeRC4Mn
Default principal: winuser01@EXAMPLE.LOCAL
Valid starting Expires Service principal
2023-07-20T22:27:57 2023-07-21T08:27:57 krbtgt/EXAMPLE.LOCAL@EXAMPLE.LOCAL
renew until 2023-07-27T22:27:53
klist: Credentials cache keyring 'persistent:0:krb_ccache_vHVB2JX' not found
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@EXAMPLE.LOCAL
Valid starting Expires Service principal
2023-07-20T22:26:42 2023-07-21T08:26:42 krbtgt/EXAMPLE.LOCAL@EXAMPLE.LOCAL
renew until 2023-07-27T22:26:38
[root@rocky9-samba42 ~]#
ActiveDirectoryドメインコントローラー2号機(rocky9-samba43)で確認。
[root@rocky9-samba43 ~]#
[root@rocky9-samba43 ~]# klist -l
Principal name Cache name
-------------- ----------
winuser01@EXAMPLE.LOCAL KEYRING:persistent:0:krb_ccache_XeRC4Mn
administrator@EXAMPLE.LOCAL KEYRING:persistent:0:0
[root@rocky9-samba43 ~]#
[root@rocky9-samba43 ~]# klist -A
Ticket cache: KEYRING:persistent:0:krb_ccache_XeRC4Mn
Default principal: winuser01@EXAMPLE.LOCAL
Valid starting Expires Service principal
2023-07-20T22:27:57 2023-07-21T08:27:57 krbtgt/EXAMPLE.LOCAL@EXAMPLE.LOCAL
renew until 2023-07-27T22:27:53
klist: Credentials cache keyring 'persistent:0:krb_ccache_vHVB2JX' not found
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@EXAMPLE.LOCAL
Valid starting Expires Service principal
2023-07-20T22:26:42 2023-07-21T08:26:42 krbtgt/EXAMPLE.LOCAL@EXAMPLE.LOCAL
renew until 2023-07-27T22:26:38
[root@rocky9-samba43 ~]#