Windows Server 2022のADサーバーでのドメインユーザーの作成とログイン検証

## はじめに
前回構築したWindows Server 2022のADサーバーを使用して、ドメイン上にアカウントを作成し、それぞれWindowsクライアントおよびLinuxクライアント端末からログインを試みたいと思います。

普段はローカルアカウントで作業を行っていますが、今回はドメイン上の共通アカウントでログインして動作検証を進めていきます。

また、単にドメイン上にアカウントを作成するだけではなく、効率化を図るため、ADサーバー上でバッチファイルを使用してアカウントを作成します。


## 前提条件
・VirtualBox上で稼働しているWindows Server 2022 を使用
・VirtualBox上で稼働しているWindows 10端末（評価版）を使用
・VirtualBox上で稼働しているAlmaLinux（CentOSの後継）を使用

**自宅のVirtualBox環境**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/c10b71a8-9fd9-6034-8333-eaf7ae1d5f45.png)

:::note info
※検証には「Windows Server 2022」「Windows 10端末」「AlmaLinux」を使用します。
:::

## 全体像

過去の記事では、AD兼DNSサーバーの構築方法と、WindowsクライアントおよびLinuxクライアント端末を「honda.co.jp」という自宅のドメインに参加させる手順について紹介しました。

:::note warn
**過去の記事**
[Windows Server 2022で自宅ネットワークにADサーバーを構築し、Windows 10端末をドメインに参加させる方法](https://qiita.com/free-honda/items/2fcdc8343aa878c17d9e)

[LinuxサーバーをWindows Server 2022のADドメインに参加させる手順と確認方法](https://qiita.com/free-honda/items/a7b4c6fec0ef6eef0247)
:::

今回は、このドメインに参加しているクライアント端末に、ドメインユーザーとしてログインを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5904d87d-934a-7f2f-44d7-351434af56f7.png)

引用画像：https://milestone-of-se.nesuke.com/sv-advanced/activedirectory/domain-and-local-users/

## 知識整理
前回の記事と重複する内容も含まれますが、基本的な前提知識は重要ですので、必要に応じて確認してください。

### Active Directory（AD）の役割と機能
```
役割:
Active Directoryは、ユーザー、コンピューター、グループ、ネットワークリソースを一元管理するディレクトリサービスです。
主な役割は、ユーザー認証、アクセス管理、リソースの割り当て、セキュリティポリシーの適用です。

機能:
- ユーザーとグループ管理: ユーザーやグループを作成、管理し、アクセス権限を設定できる。
- 認証: Kerberosプロトコルを使用したセキュアな認証を提供。
- グループポリシー: 組織全体のセキュリティやシステム設定を一元的に管理。
- ドメインコントローラー（DC）: Active Directoryをホストするサーバーで、認証やディレクトリ情報の管理を行う。
```

### DNSサーバの役割と機能
```
役割:
DNS（Domain Name System）は、ドメイン名とIPアドレスを相互に変換するシステムです。
Active DirectoryはDNSと密接に連携しており、ADドメイン内での名前解決をサポートします。

機能:
- 名前解決: ホスト名（例: server.local）をIPアドレスに変換する。
- リバースルックアップ: IPアドレスをホスト名に変換する。
- Active Directoryとの連携: ADのドメイン名やリソースレコードの自動登録と管理を行う。
```

今回は、ADやDNSにある程度慣れている方向けの内容となります。

:::note warn
基本的な前提知識については、以下のサイトをご参照ください。

**Active Directoryについて**
参考サイト：https://business.ntt-east.co.jp/content/cloudsolution/column-498.html
参考サイト：https://www.sbbit.jp/article/cont1/37798

**DNSについて**
参考サイト：https://www.xdomain.ne.jp/column/about-dns/
参考サイト：https://xtech.nikkei.com/it/article/COLUMN/20060414/235341/

**ドメイン参加について**
参考サイト：https://www.buffalo.jp/support/faq/detail/16331.html
公式サイト：https://learn.microsoft.com/ja-jp/windows-server/identity/ad-fs/deployment/join-a-computer-to-a-domain

**ドメインコントローラー について**
参考サイト：https://jousys-force.deepapex.com/blogs/domain-controller
参考サイト：https://atmarkit.itmedia.co.jp/ait/articles/1405/26/news024.html

**ドメインユーザとローカルユーザの違いについて**
参考サイト：https://milestone-of-se.nesuke.com/sv-advanced/activedirectory/domain-and-local-users/
:::

## 構築の流れ
ドメイン上にアカウントを作成し、それぞれのクライアント端末からログインするプロセスを以下の2つのステップに分けて紹介します。

**ステップ1: Active Directory上でのアカウント作成**
**ステップ2: Windows/Linuxクライアント端末からのログイン**

:::note info
前提として、検証環境はすでに構築済みであることを想定しています。
:::

## ステップ1：Active Directory上でのアカウント作成
ここでは、単にGUIを使用するのではなく、より実戦的なアプローチとしてバッチファイルを作成してアカウントを作成します。

**バッチファイルを作成**

Windowsのメモ帳などのテキストエディタを使用して、バッチファイル（.bat）を作成します。このバッチファイルは、対話形式でユーザーアカウントを作成し、パスワードの有効期限を無期限に設定します。

![スクリーンショット 2024-09-12 6.11.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/16b7f1ab-f43a-5b57-f8ce-613f6aa03273.png)

:::note alert
**※注意: ファイルの文字エンコーディングがUTF-8などに設定されていると、バッチファイル実行時に文字化けが発生することがあります。
文字化けを避けるために、ファイルを「Shift-JIS」で保存してください。文字エンコーディングを「UTF-8」から「Shift-JIS」に変換する方法については、記事の最後に紹介しています。**
:::

**スクリプトの内容**
このバッチファイルを実行すると、対話形式でユーザー情報を入力し、ご自身のドメイン上にユーザーが追加されます。必要に応じて修正してご活用ください。

```bat
@echo off
:: ドメインに新しいユーザーアカウントを作成するバッチファイル

:: ユーザー名を入力
set /p username=ユーザー名を入力してください (例: jdoe): 

:: フルネームを入力
set /p fullname=フルネームを入力してください (例: John Doe): 

:: パスワードを入力
set /p password=パスワードを入力してください: 

:: フルネームを姓と名に分割 (姓が最初、名が最後)
for /f "tokens=1,2 delims= " %%A in ("%fullname%") do (
    set firstname=%%A
    set lastname=%%B
)

:: 姓と名が同じ場合の対処 (フルネームが1単語の場合)
if "%lastname%"=="" (
    set lastname=%firstname%
)

:: ユーザーアカウントを作成 (CN=Usersコンテナを指定)
dsadd user "CN=%fullname%,CN=Users,DC=honda,DC=co,DC=jp" -samid %username% -upn %username%@honda.co.jp -fn %firstname% -ln %lastname% -display "%fullname%" -pwd %password% -mustchpwd no

:: dsadd コマンドの結果を確認
if errorlevel 1 (
    echo ユーザーアカウントの作成に失敗しました。入力内容を確認してください。
    pause
    exit /b
)

:: パスワードの有効期限を無期限に設定
wmic useraccount where name="%username%" set PasswordExpires=FALSE

:: 完了メッセージ
echo お疲れ様です！ドメインユーザ1名の作成が完了しました。

pause
```

これにより、GUIを使わずに複数のユーザーを効率よく作成できるようになります。

**バッチファイルの実行**
このバッチファイルを保存し、管理者権限で実行します。対話形式でユーザー名、フルネーム、パスワードを入力することで、新しいドメインユーザが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/41dd81b1-8c63-7e18-3874-8dd3e3aa104f.png)


:::note info
作成が完了すると、「**お疲れ様です！ドメインユーザ1名の作成が完了しました。**」というメッセージが表示され、「**honda test(honda)**」という表示名のユーザが作成されています。
:::

## ステップ2：Windows/Linuxクライアント端末からのログイン
まず、Windowsクライアント端末をドメインに参加させ、作成したユーザーアカウントでログインを行います。

**Windowsクライアント端末からのドメインログイン**
Windows 10端末を起動し、ロック画面で「その他のユーザー」を選択し、ドメイン名（honda.co.jp\）と作成したユーザー名を入力し、パスワードを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f6f9ebf8-5c86-7371-b159-ddd779cea1a2.png)

ドメインユーザとしてログインする際には、「**ドメイン名\ログオン名**」として、作成時のパスワードを入力してログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/40d2a4a2-2fbf-653d-4487-6cc6390f8829.png)

正常にログインできることを確認し、初回のプロファイル作成が問題なく行われていることを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/764cdacb-2e08-32f9-241f-bc3ce6fa4c88.png)

無事、作成したドメインユーザで自宅環境のドメインに参加することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8c533f02-362f-6247-5e21-fad192c601b6.png)


**Linuxクライアント端末からのドメインログイン**

次に、Linuxクライアント端末からWindowsドメイン（Active Directory）にログインするためには、端末をドメインに参加させる必要があります。

:::note warn
詳細については、前回のブログで紹介しているのでご参照ください。
[LinuxサーバーをWindows Server 2022のADドメインに参加させる手順と確認方法](https://qiita.com/free-honda/items/a7b4c6fec0ef6eef0247)
:::

ドメインに参加した後、Linuxクライアント端末からドメインユーザーとしてログインできるか確認します。

ログイン時には、**domain\username** 形式でユーザー名を指定します。私の環境ではTera Termを使いSSH接続でアクセスしています。

```
例：
ユーザー名: ドメイン名\ドメインユーザ名
パスワード：作成時のパスワード
```

ログイン後、以下のコマンドで正しくドメインにログインできているか確認します。

``` 
id ドメインユーザ名@ドメイン名
```

**コマンド結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ba0673e2-0edf-79ee-f4b0-8bebbfa60dd3.png)

:::note info
ドメインに参加したアカウント情報が正しく表示されれば、設定が成功しています。
:::

これで、LinuxクライアントからActive Directoryドメインにログインが完了しました。



## まとめ
この記事では、Windows Server 2022のActive Directory（AD）サーバーを構築し、ドメイン上にアカウントを作成することができました。

また、バッチファイルを使用することで、効率よくAD上にアカウントを作成し、その結果、作成されたアカウントを使ってWindows/Linuxクライアントでは問題なくログインできたので、今回の検証は成功と言えそうです。

ドメイン上でのユーザ作成及びログインの動作確認もこれでばっちりですね！

## おまけ
おまけ記事として、**サクラエディタを使用してバッチファイルの文字エンコーディングを「UTF-8」から「Shift-JIS」に変換する**手順をご紹介します。

対象ファイルを開き、メニューから「変換」 > 「文字コード変換」を選択し、「文字コード」メニュー で「日本語 (Shift-JIS)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/fdfbdf48-a8f0-8dd3-3c30-6bb79d1ade96.png)


文字コードを「Shift-JIS」に変更したら、サクラエディタのメニューから「ファイル」 > 「上書き保存」を選択して、ファイルを保存するだけで手軽に文字コードを変換することができます。


## 参考記事
https://blogs.manageengine.jp/create_account/

https://docs.qnap.com/operating-system/qts/4.3.x/ja-jp/GUID-9B572B6B-8216-41AE-BA54-A9D97CC8B694.html

https://www.server-world.info/query?os=Windows_Server_2022&p=active_directory&f=4

https://atmarkit.itmedia.co.jp/ait/articles/0609/02/news014.html