知られざるActive Directory技術の「舞台裏」

第4回 LDAPを使ってActive Directoryを制御しよう[その2:ldifde]

この記事を読むのに必要な時間:およそ 6 分

本編について,少し時間が空いてしまいました。申し訳ありません。今までは,Active Directory にはLDAPが使われていること,LDAPの基本的な構造,LDAPを制御するツール(Ldpツール,csvdeツール)をご紹介しました。今回は,LDAPを使ってActive Directoryを制御するコマンドとして,ldifdeコマンドを紹介しましょう。

ldifdeコマンド

ldifdeコマンドはcsvdeコマンドと同じく,Active Directoryの情報をエクスポートしたり,インポートすることができるツールです。csvdeコマンドと同じような使い方ができますが,次の点でcsvdeコマンドとは異なります。

まず,ldifdeコマンドは"LDIF形式"と呼ばれる業界標準のフォーマットでデータを扱います。LDIFとは"LDAP Data Interchange Format(LDAPデータ交換形式)"と呼ばれ,RFC2849で勧告された標準形式となります。このフォーマットを使うことで,オブジェクトの追加や削除のほか,個々の属性についても,追加・変更・削除を自由に行うことができます。

また,csvdeコマンドではパスワードのインポートを行うことはできませんが,ldifdeコマンドは可能です。ただし,パスワードをインポートする場合,SSLまたはTLSによる暗号化セッションで行う必要があること,またフォーマットについて,ダブルクォーテーションでくくられた「リトルエンディアン形式(文字コードの一形式)のパスワード文字列」をBase64でエンコードしたものを利用する,といった条件が必要です。

ldifdeコマンドはcsvdeコマンドに比べて柔軟性が高いため,さまざまなシチュエーションで威力を発揮してくれます。しかし,フォーマットが特殊なため,表管理ソフトなどでは管理しづらい,というデメリットがないわけでもありません。

ldifdeコマンドでパスワードを含むアカウントをインポートする

ldifdeコマンドでは,インポートファイルにLDIF形式のフォーマットを利用します。LDIF形式の例として,次のような内容を紹介します。

dn: CN=田所 明,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
changeType: add
objectClass: user
description: 営業部第二課ユーザー
saMaccountName: atadokoro
displayName: 田所 明
sn: 田所
givenName: 明
company: ○×株式会社
department: 営業部第二課
title: 課長
mail: atadokoro@marubatsucorp.local
telephoneNumber: 03-1234-6789
userPrincipalName: atadokoro@marubatsucorp.local
unicodePwd:: IgBwAGEAcwBzAHcAbwByAGQAJAAwADEAIgA=
userAccountControl: 512

LDIF形式では,1行目に追加・変更を行うDNを記載し,2行目に追加・変更・削除のどれを行うかchangeTypeで指定します。ここではadd(追加)を指定しますが,modify(変更)やdelete(削除)を指定することで,属性の変更やオブジェクトの削除を行うことも可能です。

3行目以降に追加するオブジェクトの属性を指定していきます。属性の詳細は前回の記事を参考にしていただきのですが,いくつか新しい属性があります。まず,"unicodePwd"属性はActive Directoryのアカウント(ユーザアカウントやコンピュータアカウント)のパスワードを指定する属性となります。LDIF形式で"unicodePwd"属性を指定するには,ダブルクォーテーションでくくられた「リトルエンディアン形式の文字列」をBase64でエンコードした文字列が必要です。ここでは"password$01"文字列をリトルエンディアン形式に変換し,さらにbase64形式に変換しています(⁠::」はBase64形式であることを示しています)⁠なお,リトルエンディアンに変換するツールには,川俣晶さんのtconvなどが利用できます。

また,"userAccountControl"属性はアカウントオブジェクトの状態を示すもので,"512"はオブジェクトが有効で通常利用が可能な状態に指定することを意味します(なにも指定しない場合アカウントは無効で設定されます)⁠

ここでは,次のようなLDIFファイルを用意します。このファイルは,OU,ユーザアカウントおよびグループアカウントを追加するものとなります(内容はcsvdeコマンドと同じものです)⁠この内容のファイルを"Unicode"形式でimport.ldfファイルとして保存します。Windowsのメモ帳でファイルを保存する場合,通常は"ANSI"形式で保存されますので,⁠ファイル]⁠⁠名前を付けて保存]から文字コードを"Unicode"に設定して保存するようにします。

dn: OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
changeType: add
objectClass: organizationalUnit
description: 営業部第二課OU

dn: CN=田所 明,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
changeType: add
objectClass: user
description: 営業部第二課ユーザー
saMaccountName: atadokoro
displayName: 田所 明
sn: 田所
givenName: 明
company: ○×株式会社
department: 営業部第二課
title: 課長
mail: atadokoro@marubatsucorp.local
telephoneNumber: 03-1234-6789
userPrincipalName: atadokoro@marubatsucorp.local
unicodePwd:: IgBwAGEAcwBzAHcAbwByAGQAJAAwADEAIgA=
userAccountControl: 512

dn:CN=松谷 一郎,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
changeType: add
objectClass: user
description: 営業部第二課ユーザー
saMaccountName: imatsutani
displayName: 松谷 一郎
sn: 松谷
givenName: 一郎
company:○×株式会社
department:営業部第二課
title: 主任
mail: imatsutani@marubatsucorp.local
telephoneNumber: 03-1234-6789
userPrincipalName: imatsutani@marubatsucorp.local
unicodePwd:: IgBwAGEAcwBzAHcAbwByAGQAJAAwADEAIgA=
userAccountControl: 512

dn: CN=来島 たえ,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
changeType: add
objectClass: user
description: 営業部第二課ユーザー
saMaccountName: tkurushima
displayName: 来島 たえ
sn: 来島
givenName: たえ
company: ○×株式会社
department: 営業部第二課
title: 課長代理
mail: tkurushima@marubatsucorp.local
telephoneNumber: 03-1234-6789
userPrincipalName: tkurushima@marubatsucorp.local
unicodePwd:: IgBwAGEAcwBzAHcAbwByAGQAJAAwADEAIgA=
userAccountControl: 512

dn: CN=営業部第二課,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
changeType: add
objectClass: group
description: 営業部第二課グループ
saMaccountName: 営業部第二課
member: CN=田所 明,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
member: CN=松谷 一郎,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local
member: CN=来島 たえ,OU=第二課,OU=営業部,DC=marubatsucorp,DC=local

LDIFファイルを保存したら(ここではデスクトップ上に保存します)⁠次にドメインコントローラ上で"暗号化によるLDAPの通信"を行えるよう,サーバ証明書を設定します。⁠LDIFファイルに記載された)unicodePwd属性は,暗号化されたLDAPによる通信で,書き込みを行うことができます。通常のLDAPの通信は平文でやり取りされるため,unicodePwd属性に書き込みを行うために,LDAP over SSLまたはLDAP over TLSによる通信の暗号化が必要になります。

LDAP over SSLは,SSLセッションをトンネリングさせることでLDAPの通信を暗号化するもので,セキュアLDAP(LDAPS)とも呼ばれます。非暗号化のLDAP(389/tcp)とは異なる636/tcpポートが利用されます。LDAP over TLSは,Transport Layer Securityと呼ばれる汎用的な暗号化セッションを構成するセキュリティ機能(RFC2246で勧告されています)でLDAPの通信を暗号化します。TLSはSSL3.0を改良したもので,利用しているポートを変更する必要がない(LDAPなら389/tcp)⁠クライアント側からの要求で必要時に暗号化を開始できるなどの特長があります。これらの暗号化にはSSL証明書(サーバ証明書)とクライアント側にCAルート証明書が必要となります。

著者プロフィール

小鮒通成(こぶなみちなり)

Active DirectoryおよびWindows Serverに関するコンサルタント。あわせて各種コミュニティ活動や執筆活動を行っており,Microsoft Most Valuable Professional (Windows Server System - Directory Services) 表彰を5年連続で受けている。現在はNTTデータ先端技術株式会社に勤務。

コメント

コメントの記入