RHEL をドメイン参加させる (Samba Winbind)

## Introduction
Samba Winbind で RHEL 9.3 のドメイン参加を検証したので、解説します。
SSSD を使用した方法はこちらを参照してください。

https://qiita.com/TakSewo/items/4eae2d349878c1585dd3

どちらを使えばいい？となるかもしてませんが基本的に、SSSD がより新しく、多くの機能を提供します。その代替手段として Samba Winbind サービスがあります。それぞれ機能が異なるため、ご用件に合わせて選択してください。SSSD の利点としてはこちらをご参照ください。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_authentication_and_authorization_in_rhel/con_benefits-of-using-sssd_understanding-sssd-and-its-benefits

Samba に関してはこちらをご参照ください。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html-single/configuring_and_using_network_file_services/index#assembly_using-samba-as-a-server_configuring-and-using-network-file-services



ほとんどドキュメント通りですが、ドメイン参加するコマンドなど、ドキュメントのままでは失敗した部分もあるので、ここに残しておきます。

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/integrating_rhel_systems_directly_with_windows_active_directory/proc_joining-samba-to-a-domain_connecting-rhel-systems-directly-to-ad-using-samba-winbind

タイトルにもある Samba Winbind は、Red Hat Enterprise Linux (RHEL) システムを Active Directory (AD) に接続するための System Security Services Daemon (SSSD) の代替手段です。realmd を使用して Samba Winbind を設定することで、RHEL システムを AD ドメインに参加させることができます。

サポートされるドメインコントローラ―の OS は以下です。
- Windows Server 2022 (RHEL 8.7 以降)
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2

今回はドメインコントローラに Windows Server 2022 を使用しています。

### Samba に関して
RHEL システムをドメイン参加させるために必要なのは 2 つのコンポーネントです。
- Samba Winbind: AD の ID および認証ソースと対話します。つまり Linux システムが Windows クライエントの様に動作し、AD と通信できるようにするツールです
- realm: 利用可能なドメインの検出と Samba Windbind が AD ドメインに接続するように設定します

realm を使用すると、以下を実行して Samba Windbind の設定ができます。
- ネットワーク認証およびドメインメンバーシップの設定：Linux システムがネットワークに認証し、ドメインに参加できるようにするための基本的な設定を行います
- アクセス可能なドメインおよびレルムの情報を自動的に検出：realmd は、ネットワーク内の利用可能なドメインやレルムを自動的に見つけ出すことができます
- ドメインまたはレルムへの参加に高度な設定は不要：realmdを使用すれば、Linuxシステムをドメインに参加させるための複雑な手順や設定を大幅に簡素化できます

### RHEL システムの AD ドメインへの参加

1\. 非推奨ですが Kerberos 認証に RC4 暗号化タイプが必要な場合は、RHEL でこの暗号のサポートを以下のコマンドで有効にできます.
```bash
update-crypto-policies --set DEFAULT:AD-SUPPORT
```

2\. 必要なパッケージのインストールを以下のコマンドで行います。
```bash
yum install realmd oddjob-mkhomedir oddjob samba-winbind-clients
samba-winbind samba-common-tools samba-winbind-krb5-locator
```

<details><summary>コマンドの説明</summary>

- `oddjob-mkhomedir`: このパッケージは、authconfig コマンドがホームディレクトリを作成するために使用する pam_oddjob_mkhomedir.s oライブラリを提供します
- `oddjob`: oddjobdは、D-Bus システムバス上でクライアントアプリケーションを代表して奇妙なジョブを実行するサービスです
- `samba-winbind-clients`: samba-winbind-clients パッケージは、wbinfo と ntlm_auth ツールを提供します
- `samba-winbind`: samba-winbind パッケージは、winbind NSS ライブラリといくつかのクライアントツールを提供します
- `samba-common-tools`: samba-common-tool sパッケージは、SMB/CIFS クライアントのためのツールを提供します
- `samba-winbind-krb5-locator`: samba-winbind-krb5-locator は、MIT および Heimdal Kerbero sライブラリが Window sのセマンティクスを使用して KDC を検出するためのプラグインです
</details>

正しくインストールされると Complete! のメッセージが表示されます。

3\. 次にドメインメンバーでディレクトリーまたはプリンターを共有するには、samba パッケージをインストールします。
```bash
yum install samba
```

4\. .既存の Samba ファイルのバックアップをします。
```bash
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
```

5\. ドメインに参加します。
```bash
realm join --membership-software=samba --client-software=winbind -U <AD ユーザー名> <ドメイン名>
```
検証では
AD ユーザー名: azureadmin
ドメイン名: lab001.local
としているため以下のコマンドになります。

```bash
realm join --membership-software=samba --client-software=winbind -U azureadmin lab001.local
```

6\. AD 側で ドメイン参加させた RHEL システムを確認します。
Active Directory Users and Computers の Computers でドメイン参加させた RHEL システムの名前があることを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/cb8c9c29-86ab-9331-531b-df428ae4d73f.png)

必要に応じて、etc/samba/smb.conf ファイルの別の ID マッピングバックエンド、またはカスタマイズした ID マッピングを設定します。詳細は、

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/assembly_using-samba-as-a-server_deploying-different-types-of-servers# 

を参照してください。

8\. etc/krb5.conf ファイルを編集し、以下のセクションを追加します。

```conf
[plugins]
    localauth = {
        module = winbind:/usr/lib64/samba/krb5/winbind_krb5_localauth.so
        enable_only = winbind
    }
```

これにより Kerberos 認証において、ユーザーアカウントのマッピングが可能になります。 ただしこの設定を適用するには winbind デーモンが稼働している必要があります。

9\. winbind が稼働していることを以下のコマンドで確認します。
```bash
systemctl status winbind
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/43429bf2-4d20-beed-0b1b-bd9ab44ca5eb.png)

10\. AD ドメインの AD 管理者アカウントなどの詳細を以下のコマンドで確認します。
```bash
getent passwd "<AD ユーザー名>@<ドメイン名>"
# または
getent passwd "<ドメイン名>\<AD ユーザー名>"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/8b91c803-5121-945f-4765-d5ae87e03cf9.png)

11\. RHELでドメインユーザーでログインできることを確認します。
```bash
su - azureadmin@lab001.local
```
その際以下のようにホームディレクトリが自動作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/37bef367-3298-0f2b-71b1-7d3a28644aae.png)

ドメインに参加できていることが確認できました。

12\. 最後にKerberos 認証が期待通りに機能することを確認します。
まずazureadmin@LAB001.COM のプリンシパルチケットを取得します。
```bash
kinit azureadmin@LAB001.LOCAL
```

:::note warn
ここでドメイン名は大文字であることに注意してください。
:::

またパッケージがインストールされていない場合は、以下のコマンドでパッケージをインストールができます。
```bash
yum install krb5-workstation krb5-libs
```
最後にキャッシュされた Kerberos チケットを以下のコマンドで表示します。

```bash
klist
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/657824d5-6148-e9fc-32f2-8011614ccc73.png)

13\. 最後に AD サーバーで Kerberos チケットが発行されたログを確認します

1\. Windows の [イベントビューア] を開きます
2\. 左側のペインで [Windowsログ] > [セキュリティ] を選択します
3\. 右側のペインで [現在のログをフィルター] をクリックします
4\. 「イベント ID を含める/除外する」フィールドに 4768 を入力します
5\. [キーワード] フィールドで [成功の監査] を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/b7f3abc7-7792-e111-de92-42d1842db89d.png)

以下の様にログが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693422/907c158d-30a2-f74e-6e61-0798b44363ea.png)

## Wrap up
今回は Samba Winbind を使用して、RHEL 9.3 を Windows Server 2022 の DC に参加させました。
SSSD を使用した例の記事はこちらです。

https://qiita.com/TakSewo/items/4eae2d349878c1585dd3

ではでは