LDAP バックエンド
============================

概要
-----

::

    unicornidm.conf, templates/<backendname>.py

説明
------

バックエンドセクションのうち、 *type* が *ldap* となっているバックエンドは、
LDAP サーバーへの接続に関する設定を行います。

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

リファレンス
------------

unicornidm.conf のパラメーター
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. envvar:: type

    バックエンドのタイプを指定します。 `ldap` に設定してください。

.. envvar:: description

    バックエンドの説明文を指定します。

    .. versionadded:: 3.18.7

.. envvar:: uris

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

.. envvar:: bind_user

    LDAP サーバーへ接続する際に使用する BIND DN を指定します。

.. envvar:: bind_password_file

    LDAP サーバーへ接続する BIND DN のパスワード情報を格納したファイルパスを指定します。

.. envvar:: suffix

    接続する LDAP サーバーの DIT (Directory Information Tree) の suffix を指定します。

.. envvar:: suffix_user

    接続する LDAP サーバーでユーザー情報が格納されているツリーを指定します。
    例えば、 *ou=Users,%(suffix)s* と指定します。なお、ここで利用している *%(...)s*
    という形式は別のパラメーターの値を変数として利用することを意味します。ここでは
    *suffix* パラメーターの値に置き換えられます。

.. envvar:: suffix_group

    接続する LDAP サーバーでグループ情報が格納されているツリーを指定します。

.. envvar:: filter_user

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

.. envvar:: filter_group

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

.. envvar:: backend_primary_key_user

    ユーザーの RDN を指定します。
    デフォルト値は uid です。

.. envvar:: backend_primary_key_group

    グループの RDN を指定します。
    デフォルト値は cn です。

.. envvar:: member_keys

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

.. envvar:: assign_auto_uid_number

    ユーザーの uidNumber を自動生成するかのフラグです。
    デフォルト値は yes (uidNumber を自動生成する) です。
    自動生成される番号は Unicorn ID Manager が最後に割り当てた uidNumber の次に大きな番号で、LDAP サーバー上でまだ使われていない番号です。

.. envvar:: assign_auto_uid_number_min

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

.. envvar:: assign_auto_uid_number_max

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

.. envvar:: assign_auto_gid_number

    グループの gidNumber を自動生成するかのフラグです。
    デフォルト値は yes (gidNumber を自動生成する) です。
    自動生成される番号は Unicorn ID Manager が最後に割り当てた gidNumber の次に大きな番号で、LDAP サーバー上でまだ使われていない番号です。

.. envvar:: assign_auto_gid_number_min

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

.. envvar:: assign_auto_gid_number_max

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

.. envvar:: uid_number_must_unique
            gid_number_must_unique

    追加、更新操作時に ``uidNumber`` （ ``gidNumber`` ） が同じユーザー（グループ）がバックエンドに既に存在しないことを確認します。
    存在していた場合追加、更新操作が失敗します。


.. envvar:: password_hash

    パスワードのハッシュアルゴリズムを指定します。
    指定可能な値は以下です。

    ::

        MD5             MD5 でハッシュ化
        SHA             SHA-1 でハッシュ化
        SHA256          SHA-2 256-bit でハッシュ化
        SHA384          SHA-2 384-bit でハッシュ化
        SHA512          SHA-2 512-bit でハッシュ化
        SSHA            SHA-1、salt 付きでハッシュ化
        SSHA256         SHA-2 256-bit、salt 付きでハッシュ化
        SSHA384         SHA-2 384-bit、salt 付きでハッシュ化
        SSHA512         SHA-2 512-bit、salt 付きでハッシュ化
        CRYPT           crypt(3) DES、salt 付きでハッシュ化
        CRYPT-MD5       crypt(3) MD5、salt 付き、1000 回でハッシュ化
        CRYPT-SHA256    crypt(3) SHA-2 256-bit、salt 付き、5000 回でハッシュ化
        CRYPT-SHA512    crypt(3) SHA-2 512-bit、salt 付き、5000 回でハッシュ化
        PBKDF2          PBKDF2 SHA-1、salt 付き 10000 回でハッシュ化
        PBKDF2-SHA256   PBKDF2 SHA-2 256-bit、salt 付き 10000 回でハッシュ化
        PBKDF2-SHA512   PBKDF2 SHA-2 512-bit、salt 付き 10000 回でハッシュ化
        PASSMOD         LDAP サーバーでハッシュ化

    デフォルト値は CRYPT-SHA512 です。

.. note::
    パスワード変更リクエストでは、仕様上パスワードが平文で送信されます。
    PASSMODを利用する際は、LDAPサーバーへの接続にLDAPSを用いた暗号化通信を利用するようにしてください。

.. versionadded:: 3.17.9

     PASSMOD が追加されました。

.. envvar:: password_hash_iteration

    パスワードハッシュアルゴリズムを PBKDF2 シリーズのどれかに指定した時に
    有効なパラメーターです。このパラメーターにより、ハッシュ回数を指定できます。
    デフォルト値は 10000 です。

.. envvar:: enable_ppolicy

    ユーザーの認証の際に以下のメッセージをログに出力するかどうかを指定します。
    ppolicy オーバーレイを利用していない場合、ユーザーの認証の際に以下の
    ログが出力されます。この値を no とすることで、メッセージが出力されなくなります。
    デフォルト値は yes (メッセージを出力する) です。

    ::

        slap_global_control: unrecognized control: 1.3.6.1.4.1.42.2.27.8.5.1

テンプレートファイル
^^^^^^^^^^^^^^^^^^^^

以下は、 `ldap` バックエンドのテンプレートファイルの例です。

::

    User = {
        "objectClass": [
            "top",
            "person",
            "organizationalPerson",
            "inetOrgPerson",
            "posixAccount",
        ],
        "uid": userName,
        "cn": userName,
        "uidNumber": default(uidNumber),
        "gidNumber": default(gidNumber, 100),
        "loginShell": default(loginShell, "/bin/bash"),
        "homeDirectory": default(unixHomeDirectory, "/home/%(userName)s"),
        "sn": familyName,
        "givenName": givenName,
        "userPassword": password,
        "mail": mail,
        "description": default(description),
        "displayName": default(displayName, "%(familyName)s %(givenName)s"),
    }


    Group = {
        "objectClass": [
            "top",
            "posixGroup",
            ],
        "cn": groupName,
        "gidNumber": default(gidNumber),
        "description": default(description),
    }

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

* User と Group の辞書には必ず、 *objectClass* を list 型で指定する必要があること

* *objectClass* で必須のバックエンド属性を必ず含めること

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

.. envvar:: parentOu

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

    例::

        backend_primary_key_user = "uid"
        userName = "user1
        parentOu = "ou=org1"
        suffix = "dc=example,dc=com"
        suffix_user = "ou=Users,%(suffix)s"

            ===> "uid=user1,ou=org1,dc=example,dc=com"

        backend_primary_key_user = "uid"
        userName = "user1
        parentOu = None
        suffix = "dc=example,dc=com"
        suffix_user = "ou=Users,%(suffix)s"

            ===> "uid=user1,ou=Users,dc=example,dc=com"

    CSVファイルで所属 OU を ``suffix`` 直下に変更したい場合には、
    ``--`` か ``-`` 接頭辞を利用してください。

    例えば以下の CSV では user1, user2 の 所属 OU を ``suffix`` 直下に
    変更しています。

    例::

        userName,--parentOu
        user1,
        user2

    CSV の ``parentOu`` カラムを空文字にした場合には、所属 OU は
    変更されません。

    以下では user1 の所属 OU は変更されますが、 user2 の所属 OU は
    変わりません。

    例::

        userName,parentOu
        user1,ou=Org1
        user2,

    上記の、カラムを空文字にした場合の挙動は期待する動作と異なるかも
    しれません。
    つまり、1つの CSV ファイルで
    あるユーザーの所属 OU を ``suffix`` 以外に変え、別のユーザーの
    所属 OU を ``suffix`` に変更したい場合に、上記のような CSV ファイルでは
    user2 の所属OUは変更されません。
    
    このような動作を1つのCSVファイルで実現するには、 ``-`` と ``+`` 接頭辞を
    併用してください。
    この場合、対象ユーザーの現在の所属 OU を CSV ファイルに書く必要があります。
    
    以下の CSV では、 user1 の所属 OU は *ou=Org2* に、 user2 の所属 OU は
    ``suffix`` に変更されます。
    どちらのユーザーも元々の所属OU は *ou=Org1* であると仮定しています。

    例::

        userName,-parentOu,+parentOu
        user1,ou=Org1,ou=Org2
        user2,ou=Org1,

    ブラウザからの GUI 操作の場合には、 ``parentOu`` のインプットフォームを
    空にすると 所属OU は ``suffix`` に変わります。

.. versionadded:: 3.3.0

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


.. envvar:: LDAPPrimaryGroup

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

    ``gidNumber`` と ``LDAPPrimaryGroup`` の両方に値が設定された場合、
    ``gidNumber`` の値が優先されます。
    従って、テンプレートファイルで ``gidNumber: default(gidNumber, 100)``
    のように ``gidNumber`` のデフォルト値が指定されている場合には、
    ``LDAPPrimaryGroup`` 属性は使われません
    （ ``gidNumber`` のデフォルト値が ``LDAPPrimaryGroup`` の値よりも
    優先されてしまう）。

.. versionadded:: 3.10.10
    

制限
----

* 組織単位 (`OU`) の管理には対応していません。
  ユーザーに所属させたい組織単位は別途 LDAP DIT の管理ツールで作成しておいてください。
