AD バックエンド
===========================

概要
-----

::

    unicornidm.conf, templates/<name>.py

説明
------

バックエンドセクションのうち、 *type* が *ad* となっているバックエンドは、
Active Directory ドメインコントローラー (AD DC) への接続に関する設定を行います。

各バックエンドには必ずテンプレートファイルを用意する必要があります。
テンプレートファイルとは Unicorn ID Manager の任意属性 (フロントエンド属性) を
バックエンド固有の属性 (バックエンド属性) にマッピングするためのものです。

パラメーター
--------------

type
    バックエンドのタイプを指定します。

uris
    AD DC の URI を指定します。カンマ区切りで複数の URI を指定できます。
    URI が複数ある場合、通常先頭の URI への接続が実行され、失敗すれば、
    次の URI への接続を試みます。

bind_user
    AD DC へ接続する際に使用するユーザー名を指定します。 DN とユーザープリンシパル名
    の両方の形式に対応しています。

bind_password_file
    AD DC へ接続するユーザーのパスワード情報を格納したファイルパスを指定します。

domain
    接続する AD DC のドメイン名を指定します。

ou_user
    接続する AD DC においてユーザーオブジェクトが格納されている OU (組織単位) を
    指定します。デフォルトは CN=Users です。

ou_group
    接続する AD DC においてグループオブジェクトが格納されている OU (組織単位) を
    指定します。デフォルトは CN=Users です。

filter_user
    ユーザー検索時に使用するフィルターを指定します。
    デフォルト値は (&(objectClass=user)(!(objectClass=computer))) です。

filter_group
    グループ検索時に使用するフィルターを指定します。
    デフォルト値は (objectClass=group) です。

backend_primary_key_user
    ユーザーの RDN の値を格納する属性を指定します。
    デフォルト値は cn です。

backend_primary_key_group
    グループの RDN の値を格納する属性を指定します。
    デフォルト値は cn です。

member_keys
    グループのメンバーに該当するバックエンド属性名を指定します。
    カンマ区切りで複数指定することもできます。
    デフォルト値は member です。

assign_auto_uid_number
    ユーザーの uidNumber を自動生成するかのフラグです。
    デフォルト値は no (uidNumber を自動生成しない) です。

assign_auto_uid_number_min
    ユーザーの uidNumber を自動生成する際、 uidNumber に割り当てる最小値
    を指定します。デフォルト値はありません。

assign_auto_uid_number_max
    ユーザーの uidNumber を自動生成する際、 uidNumber に割り当てる最大値
    を指定します。デフォルト値はありません。

assign_auto_gid_number
    グループの gidNumber を自動生成するかのフラグです。
    デフォルト値は no (gidNumber を自動生成しない) です。

assign_auto_gid_number_min
    グループの gidNumber を自動生成するかのフラグです。
    デフォルト値は no (gidNumber を自動生成しない) です。

assign_auto_gid_number_max
    グループの gidNumber を自動生成する際、 gidNumber に割り当てる最大値
    を指定します。デフォルト値はありません。

テンプレート
-------------

以下は、 ad のテンプレートファイルの例です。

::

    User = {
        "objectClass": [
            "top",
            "person",
            "organizationalPerson",
            "user",
        ],
        "sAMAccountName": userName,
        "sn": familyName,
        "givenName": givenName,
        "unicodePwd": password,
        "userAccountControl": "512",
        "description": default(description),
        "displayName": default(displayName, "%(familyName)s %(givenName)s"),
    }


    Group = {
        "objectClass": [
            "top",
            "group",
            ],
        "sAMAccountName": groupName,
        "description": default(description),
    }

注意すべき点は以下のとおりです。

* User と Group の辞書には必ず、 *objectClass* を list 型で指定してください

* User と Group の属性定義では必ず *sAMAccountName* を ``userName`` と
  ``groupName`` に紐付けてください

* User の *objectClass* には必ず user を含めてください

* Group の *objectClass* には必ず group を含めてください


ad バックエンド特有のバックエンド属性
---------------------------------------


.. envvar:: userPrincipalName

    テンプレートファイルに *userPrincipalName* バックエンド属性が
    定義されていない場合、 *sAMAccountName* と
    *domain* から、 *userPrincipalName* を自動生成します。
    手動で入力する場合、メールアドレス形式で指定してください。

.. envvar:: cn

    テンプレートファイルに *cn* バックエンド属性が
    定義されていない場合、 *sAMAccountName* から、
    *cn* を自動生成します。

.. envvar:: unicodePwd

    *unicodePwd* バックエンド属性は AD ユーザーのパスワードを
    セットするために利用されます。

.. envvar:: accountExpires

    *accountExpires* バックエンド属性は AD ユーザーのアカウント有効期限を
    セットするために利用されます。このバックエンド属性に値をセットする際は、
    "2016-05-28" の形式か、 "2016/05/28" の形式で値をセットしてください。
    アカウントの有効期限を無期限にする場合は "NEVER_EXPIRES" という文字列を
    セットしてください。

.. envvar:: parentOu

    *parentOu* バックエンド属性はユーザーやグループの所属 OU を指定するための
    バックエンド属性です。この値がセットされた場合、 *parentOu* と
    *domain* パラメーターを元にしたルートサフィックスを結合した
    サフィックスが適用されます。 *parentOu* が存在しない場合 *ou_user* か *ou_group*
    が適用されます。

    例::

        backend_primary_key_user = "CN"
        userName = "user1
        parentOu = "ou=org1"
        domain = "example.com"
        ou_user = "CN=Users"

            ===> "CN=user1,ou=org1,DC=example,DC=com"

        backend_primary_key_user = "CN"
        userName = "user1
        parentOu = None
        domain = "example.com"
        ou_user = "CN=Users"

            ===> "CN=user1,CN=Users,DC=example,DC=com"

.. versionadded::
     v3.3.0

     parentOu で所属 OU を変更できるようになりました。


.. envvar:: ADPrimaryGroup

    ``ADPrimaryGroup`` はユーザーのプライマリーグループを変更するためのバックエンド属性です。
    ユーザーを追加、更新するときにこの属性を指定すると、
    Unicorn ID Manager は操作対象のターゲットの中から ``groupName`` が
    この属性の値と一致するグループを探し、そのグループを
    ユーザーのプライマリーグループに設定します。

.. versionadded::
    v3.14.1

    ``ADPrimaryGroup`` 属性が追加されました。


注意事項
--------------

AD バックエンドでは ``userName`` , ``groupName`` を ``sAMAccountName`` に紐付ける必要があるため、以下の制限が発生します。

* ``userName`` , ``groupName`` は 20文字以下でなければなりません
* ``userName`` , ``groupName`` には以下の文字を含めてはいけません
    * ``"/ \ [ ] : ; | = , + * ? < >``
* ``userName``, ``groupName`` の値は AD 全体で一意でなければいけません。 UIDM 管理外のツリー（所属OU）やユーザー、グループ以外のオブジェクトの ``sAMAccountName`` とも被ってはいけません。

これらはどれも AD の ``sAMAccountName`` の仕様に基づくものです。
