LDAP認証

LDAPを使用したユーザー認証の手順

Keeper Connection Managerは、LDAP認証に対応しています。

Docker環境変数

keeper/guacamoleイメージは、環境変数を使用してLDAPに対応するように変更できます。ドキュメントのLDAP_*変数の定義をご参照ください。

DockerおよびDocker Composeの自動インストールメソッド

Dockerインストールメソッドを使用してKeeper Connection Managerをインストールした場合、LDAPサポートは事前設定されません。LDAPを有効化する手順は以下のとおりです。

(1) ローカルインスタンスで、コンテナを停止します。

Dockerの自動インストール:

sudo ./kcm-setup.run stop

Docker Composeのインストール:

cd /path/to/docker-compose.yml
docker-compose stop

(2) docker-composeファイルを編集します。

簡単なdockerメソッドまたはカスタムdockerメソッドを使用するには、docker-compose.ymlファイルを修正してLDAPサポートを追加する必要があります。rootとしてdocker-compose.ymlファイルを編集し、「guacamole」セクションを見つけます。

    guacamole:
        image: keeper/guacamole:2
        environment:
            ACCEPT_EULA:"Y"
            GUACD_HOSTNAME: "guacd"
            MYSQL_HOSTNAME: "db"
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            MYSQL_PASSWORD: "xxxxxxx"
            
            # LDAP Connection
            LDAP_HOSTNAME: "localhost"
            LDAP_PORT:389
            LDAP_ENCRYPTION_METHOD: "none"
            
            # Mapping Guacamole usernames to LDAP DN’s
            LDAP_USER_BASE_DN: "ou=people,dc=example,dc=net"
            
            ## Optional Settings ##
            LDAP_USERNAME_ATTRIBUTE: "sAMAccountName"
            
            # Indirect Username Mapping
            LDAP_SEARCH_BIND_DN: "cn=someUser,ou=people,dc=example,dc=net"
            LDAP_SEARCH_BIND_PASSWORD: "some_password"
            
            # Mapping Guacamole groups to LDAP DN's
            LDAP_GROUP_BASE_DN: "ou=groups,dc=example,dc=net"
            LDAP_GROUP_NAME_ATTRIBUTE: "cn"

注意:

  • 2か所の「https://glyptodon.lurey.com」をKeeper Connection ManagerのログインURLに置き換えます

オプション設定

Guacamoleユーザー名をLDAP DNにマッピング

LDAPを使用してユーザーを認証するには、Guacamoleでユーザー名を対応するLDAP DNに変換する必要があります。LDAPディレクトリの複雑度に応じて、共通のベースDNに単一の属性を追加するといった簡単な方法や、LDAPクエリを使用する方法もあります。

ユーザー名マッピングを有効にするには、docker-compose.ymlに以下のオプションを追加します。

            # Mapping Guacamole usernames to LDAP DN’s
            LDAP_USER_BASE_DN: "ou=people,dc=example,dc=net"
            LDAP_USERNAME_ATTRIBUTE: "sAMAccountName"```

LDAP_USER_BASE_DNプロパティによって定義されるベースDNは、LDAPディレクトリ内のすべてのGuacamoleユーザーによって共有される共通ベースである必要があり、ユーザーのユーザー名を含む属性はLDAP_USERNAME_ATTRIBUTEによって定義されます。**LDAPを使用している場合は、ベースDNが必須です。**

**ユーザー名の直接マッピング**

デフォルトでは、GuacamoleはベースDNの前にユーザー名属性を付加することで、ユーザーのDNを直接取得しようとします。たとえば、ユーザーが「someUser」というユーザー名でログインしようとしているとします。ベースDNが「ou=people, dc=example, dc=net」で、ユーザー名属性が「uid」(デフォルト)の場合、Guacamoleは以下の手順を実行してユーザーを認証します。

1. 「uid」属性を使用してベースDNの前にユーザー名を付加し、以下のDNを生成します。
「uid=someUser, ou=people, dc=example, dc=net」。
2. DN「uid=someUser, ou=people, dc=example, dc=net」とユーザーが設定したパスワードを使用してバインドを試みます。
3. バインドの試行が成功すると、認証は成功します。

**ユーザー名の間接マッピング**

ユーザー名属性を付加してもユーザーDNを直接取得できないような複雑な場合、Guacamoleは代わりにLDAPクエリを発行してユーザーDNを特定できます。これには、検索DNとパスワードが必要で、LDAP_SEARCH_BIND_DNプロパティとLDAP_SEARCH_BIND_PASSWORDプロパティにそれぞれ定義されており、Guacamoleが以下のクエリを実行する場合と同様にバインドします。
        # Indirect Username Mapping
        LDAP_SEARCH_BIND_DN: "cn=someUser,ou=people,dc=example,dc=net"
        LDAP_SEARCH_BIND_PASSWORD: "some_password" 

検索DNとパスワードを設定すると、Guacamoleは以下の手順を実行してユーザーを認証します。

1. 検索DNとパスワードを使用して、LDAPディレクトリにバインドします。
2. ベースDNのサブツリー内で、定義されたユーザー名属性内にユーザーのユーザー名を含むオブジェクトを照会するLDAPクエリを発行します。
3. そのようなオブジェクトが正確に1つ見つかった場合は、そのオブジェクトのDNとユーザーが設定したパスワードを使用してバインドを試みます。
4. バインドの試行が成功すると、認証は成功します。

</details>

<details>

<summary>GuacamoleグループをLDAP DNにマッピング</summary>

Guacamole内の接続へのアクセスは、以下の2つのメカニズムのいずれかを使用して、LDAPユーザーグループによって決定される場合があります。

1. [スキーマの変更を使用してLDAP内で直接接続を定義](storing-connection-data-within-ldap.md)し、「seeAlso」属性を使用してグループアクセスを決定します。
2. LDAPグループをGuacamoleグループにマッピングし、[データベースを利用してアクセスを決定](using-ldap-with-a-database.md)します。

一般的には、LDAPスキーマは変更しないことが望ましいため、LDAPグループをGuacamoleグループにマッピングすることをお勧めします。そのためには、関連するLDAPグループをすべて検索できるベースDNを定義し、グループの一意の名前を特定するためにGuacamoleが使用すべきLDAP属性を定義する必要があります。
        # Mapping Guacamole groups to LDAP DN's
        LDAP_GROUP_BASE_DN: "ou=groups,dc=example,dc=net"
        LDAP_GROUP_NAME_ATTRIBUTE: "cn"```

接続が「guacConfigGroup」オブジェクトを使用してLDAP内に保存されている場合に、これらの接続へのアクセスをLDAPグループを使用して制御するには、実行に標準の「seeAlso」属性を使用し、LDAP_GROUP_BASE_DNプロパティが必要です。

接続がLDAPの外部に(データベース内など)保存されている場合に、LDAPグループを使用してアクセスを制御するには、LDAP_GROUP_BASE_DNとLDAP_GROUP_NAME_ATTRIBUTEの両方が必要になります。ユーザーのグループメンバーシップはベースDNなしでは照会できず、Guacamoleの他の部分で使用される、グループを示す一意の名前は名前属性なしでは特定できません。

(3) コンテナを再起動します。

簡易インストール:

sudo ./kcm-setup.run upgrade

アップグレード後にコンテナは再起動するはずです。再起動しない場合:

sudo ./kcm-setup.run start

カスタムインストール:

sudo su
docker-compose up -d

設定が完了しました。

カスタムルート証明書

LDAPサーバーでカスタムルート証明書を使用する必要がある場合は、/etc/pki/ca-trust/extracted/java/cacertsファイルをDocker Composeでボリュームマウントして、guacamole dockerコンテナの証明書を上書きしてください。

  • 「keytool」を使用して証明書をJavaトラストストアにインポートします。

  • cacertsファイルを目的のguacamole dockerコンテナにボリュームマウントします

Last updated