見出し画像

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 ~]#
ドメインに参加しているWindowsPCからAD管理ツールで確認できる

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配下の論理的なグループで「ドメイン名」に相当する。

~認証の流れ~

  1. ユーザー → AS@KDC
    利用者(=Principal)はユーザーIDとパスワードを使ってASに対して認証要求をする。

  2. AS@KDC → ユーザー
    認証要求を受け付けたASはKDCにあるユーザー情報を確認し、認証が成功したら1つ目のチケットとなるTGTを発行する。

  3. ユーザー → TGS@KDC
    ASから発行されたTGTを使って「リソースを提供するサーバー」のリソースにアクセスするためのサービスチケットを要求する。

  4. TGS@KDC → ユーザー
    サービスチケットの要求を受けたTGSはTGTを確認してリソースを利用するためのサービスチケットを発行する。

  5. ユーザー → リソースを提供するサーバー
    ユーザーはサービスチケットを使って「リソースを提供するサーバー」にあるリソースにアクセスができる。

~コマンド~

  • 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月27231645秒
[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月28224428秒
[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 ~]#

参考文献


この記事が気に入ったらサポートをしてみませんか?