LDAP認証

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

KeeperコネクションマネージャーはLDAP認証に対応しています。

Docker環境変数

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

Docker自動インストールおよびDocker Composeインストール

Dockerインストールメソッドを使用してKeeperコネクションマネージャーをインストールした場合、LDAPサポートが予め設定されていませんので、以下の手順でLDAPを有効にします。

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

Dockerの自動インストール

sudo ./kcm-setup.run stop

Docker Composeのインストール

cd /path/to/docker-compose.yml
docker-compose stop
  1. 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"

オプション設定

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の前にユーザー名を付加し、「uid=someUser, ou=people, dc=example, dc=net」というDNを生成します。

  2. DN「uid=someUser, ou=people, dc=example, dc=net」とユーザーが設定したパスワードを使用してバインドを試みます。

  3. バインドの試行が成功すると、認証は成功します。

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

より複雑なケースでは、ユーザーDNがユーザー名属性をベースDNに追加するだけでは直接的に導出できない場合があります。そのような場合、GuacamoleはLDAPクエリを発行してユーザーDNを取得することが可能です。このプロセスには、検索用のDNとパスワードが必要です。それらは LDAP_SEARCH_BIND_DNLDAP_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. バインドの試行が成功すると、認証は成功します。

GuacamoleグループをLDAP DNにマッピング

Guacamoleでの接続へのアクセスは、LDAPユーザーグループを使って以下の2つの方法で制御できます。

  1. LDAP内に接続を直接定義する方法 スキーマを変更し、seeAlso属性を使ってグループアクセスを制御します。

  2. LDAPグループをGuacamoleグループにマッピングする方法 データベースを利用してアクセスを制御します。

通常、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"

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

一方、接続がLDAPの外部 (例: データベース) に保存されていて、LDAPグループを使ってアクセスを制御したい場合は、LDAP_GROUP_BASE_DNLDAP_GROUP_NAME_ATTRIBUTEの両方が必要となります。

  • LDAP_GROUP_BASE_DN: ユーザーのグループメンバーシップを照会するために必要です。

  • LDAP_GROUP_NAME_ATTRIBUTE: Guacamoleがグループを固有に識別するために使用します。この属性がなければ、グループ名を正しく認識できません。

  1. コンテナを再起動します。

簡易インストール

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