Only this pageAll pages
Powered by GitBook
1 of 93

KCM (Linux RPM Method)

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Backup & Recovery

Backup and recovery options

Keeper Connection Manager is packaged and installed in your environment. As such, backups should be taken in order to recover the environment if required.

Server Backup Instructions

  • We recommend performing daily snapshots of your Keeper Connection Manager instances.

  • In most installations, a database running locally includes the connection and user data. When backing up the instance, ensure that the database is included.

  • When using the Advanced Linux Install method, ensure that the /etc/guacamole/ folder is included in the snapshot.

Database Snapshots

  • Please use the database platform's backup features, for example mysqladmin on MySQL backed installs.

License Key

Activating your Keeper Connection Manager license key

Starting with Keeper Connection Manager version 2.19, customers are required to obtain a license key from Keeper in order to continue the use of the application.

Before installing KCM 2.19 or later versions, please ensure you have a valid license key. Without a valid license key, users and administrators will be unable to use KCM after the update is applied

Obtaining a License Key

To obtain a license key, please contact Keeper Support directly at: https://www.keepersecurity.com/support.html

Upon request, Keeper Security staff will generate and send a copy of your license key.

Installation

To install your license key, you must provide the license as the sole contents of /etc/guacamole/kcm.license, which must be readable by the guacamole group.

cat "license_key_supplied_by_keeper" > /etc/guacamole/kcm.license
chmod 640 /etc/guacamole/kcm.license
chown root:guacamole /etc/guacamole/kcm.license

After adding the license key, restarting the service may be necessary.

sudo systemctl restart guacamole guacd

SAML SSO Auth

Instructions for authenticating users with a SAML 2.0 / SSO Identity Provider

This documentation assumes that you already have access to a SAML 2.0 Identity Provider, such as Microsoft Azure, Okta, JumpCloud, Ping, AD FS, etc. If you do not already have Guacamole installed, please see the installation instructions.

Overview

Keeper Connection Manager can be configured to authenticate users with any SAML 2.0 compatible identity provider. Users can be forced to login with SAML, or you can make SAML an optional login link from the home screen.

Instructions for popular Identity Providers is below.

Microsoft AzureOktaGoogle Workspace

Linux RPM Installation

Instantly access your infrastructure with zero-trust security.

What is Keeper Connection Manager?

Keeper Connection Manager ("KCM") is an agentless remote desktop gateway that provides IT Admins and DevOps with secure easy access to RDP, SSH, database and K8s endpoints through a web browser.

Benefits of the platform:

  • Agentless

  • Lightning Fast and Responsive

  • Simple Access Controls

  • Deployment options for cloud, on-prem and air-gapped environments

Features include:

  • Support for RDP, SSH, VNC, K8s remote access protocols

  • Support for MySQL, PostgreSQL, SQL Server database protocols

  • Session Recording

  • Privileged Session Management

  • Multi-User Session Sharing

  • Role-Based Access Controls

  • Two-Factor Authentication

  • SSO, OpenID Connect, Active Directory, LDAP Integration

  • Custom Branding

Video Overview

System Diagram

The system architecture diagram is below.

Apache Guacamole

Keeper Connection Manager is the commercially-supported solution produced by the original creators of Apache Guacamole, the open source platform used by millions of people for accessing remote desktops. Keeper Connection Manager is built on top of the Guacamole gateway, with expanded capabilities, advanced integrations and ongoing feature development. Glyptodon was Acquired by Keeper Security in December 2021.

Getting Started

Ready to get started with Keeper Connection Manager? Proceed to the .

Using LDAP with a database

If multiple authentication methods are installed, Guacamole will poll each method as it attempts to authenticate users, and will retrieve connection data from each method once a user has successfully authenticated. This behavior is designed to allow authentication methods to work together, and can be leveraged to authenticate Guacamole users against LDAP while storing the connection data for those users within MySQL, PostgreSQL, or SQL Server.

Guacamole's definition of identity

When reading data from multiple authentication methods, Guacamole compares the unique identifiers of users (usernames) and groups to determine identity. This means that user accounts from different authentication systems will be automatically combined by Guacamole upon successful authentication as long as those user accounts have the same username, and group memberships will take effect across authentication systems so long as the unique names of those groups match.

If both LDAP and a database authentication method have been configured, Guacamole will automatically attempt to authenticate against both systems whenever a user attempts to log in. The LDAP account will be considered equivalent to the database user if the username is identical, and that user will have access to any data associated with them via the database, as well as any visible objects within the LDAP directory. If that user has permission to query their group memberships within LDAP, and Guacamole has been configured to query groups within LDAP, then the user's group membership will also be retrieved upon authentication, and the user will have access to any data associated with those groups via the database.

For a user known to exist within LDAP, that user can be granted permissions to connections within the database by logging in as the administrative user (by default, “guacadmin”) and creating a corresponding database account having the same username. By leaving the password unspecified for the database account, the user will only be able to log in using LDAP, but will still have access to any associated connections defined within the database.

Administering LDAP users within Guacamole

Rather than having to manually look up users or groups within the LDAP directory, and then manually create those same users and groups within Guacamole, it is possible to set up administrative user accounts which can already see and manage available LDAP objects. This streamlines the administrative process, reducing the number of users which must be manually created to one.

To see LDAP objects within Guacamole’s administrative interface, one of the following tasks must be performed:

  1. An administrative user within the Guacamole database, such as the default “guacadmin” user, must be manually created within LDAP with the same username and with sufficient privileges to query all Guacamole users and groups defined within LDAP.

  2. An administrative user must be manually created within Guacamole having the same username as an LDAP user with sufficient privileges to query all Guacamole users and groups defined within LDAP.

Because a Guacamole user created as defined above would have access to LDAP users and groups, database users and groups, and database connections, all of this data will be unified within the same administrative interface within Guacamole. The user will be able to grant LDAP users and groups access to connections within the database to just as they would if only the database were in use.

System Requirements

Detailed list of system and operating system requirements for Keeper Connection Manger

Supported KCM Versions:

  • Glyptodon 1.x - Full support for 2 years after any major release

  • Glyptodon 2.x - Full support for 2 years after any major release

  • Keeper Connection Manager 2.x - Full support for 2 years after any major release

Minimum system specs for production deployment:

The generalized formula for sizing Keeper Connection Manager is 1 CPU core and 2 GB of memory for every 25 concurrent users anticipated.

Table with host recommendations:

# Concurrent connections
CPU
Memory

0-25

2

2gb

26-50

3

6gb

51-100

4

8gb

101-200

8

16gb

200+

Contact us

Contact us

For anything over 200 concurrent sessions, we have several options, and it may be best to talk through this with our sales engineering team to find the right solution based on your needs and connection types.

Disk space requirements

A single session recording can vary based on the content being shown. This is affected by the type of connection. GUIs typically have higher recording sizes versus CLI connections like SSH, which can be quite small.

There are far too many variables in play to accurately predict disk space needs for recordings. The best practices are to monitor the recordings folder and offload them to another location as needed.

Network throughput for concurrent connections

Network throughput also varies based on activity, type of session and connection settings. From actual examples, we've found that for a system running about 100 concurrent sessions, network traffic varies between 9Mbit/s and 15Mbit/s for all 100 connections. Each connection would be on average 1/100th of the 15Mbit value.

In the same above scenario with 100 connections, we would expect about 15gb total traffic per hour on the network adaptor. Comparing inbound and outbound traffic, just over 90% of the traffic is outbound from the server to the clients.

installation instructions
Keeper Connection Manager - System Diagram

Preparing for Installation

Get your environment, network, and system ready and prepared.

Preparing for Installation

Since you'll be accessing Keeper Connection Manager using a browser, we need to establish where to find it.

You'll need the following:

1. A designated machine (usually a Linux VM) 2. A fully-qualified domain name (FQDN) 3. Your DNS record set to point your FQDN to the IP of your designated machine 4. An SSL certificate (or generate one during installation) You can either bring your own SSL certificate, or you can generate one during the installation by choosing the option for Let's Encrypt. If planning to use Let's Encrypt, make sure that ports 80 and 443 are open to the internet during the installation.

To prepare for installation:

  1. Create/Identify and establish root access to the server that will run the Keeper Connection Manager gateway

  2. Decide if you want your KCM gateway to be public-facing (assign public IP), or internal-only (assign private IP)

  3. Add a DNS A Record (or AAAA record) to point your domain to your KCM server's IP address

Check your firewall to make sure that traffic can flow between your server and Docker. Some domains that it will need to reach include docker.com, docker.io and others.

Make sure that ports 80 and 443 are open to the public.

If bringing your own SSL certificate, make sure that the server is accessible on port 8080 internally.

Platform-specific Setup

Virtual Machines

To check your that your linux system's entropy level is at least 1000, use the command:

$ cat /proc/sys/kernel/random/entropy_avail

To increase the speed of entropy generation, you can install the haveged service to ensure that the environment can efficiently create secure random numbers.

On RHEL, the haveged package is not available from the Red Hat repositories and must instead be installed from the EPEL repository. EPEL provides instructions for configuring their repository here: https://docs.fedoraproject.org/en-US/epel/. After EPEL is installed, run the following commands:

sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable haveged
sudo apt-get install haveged
sudo yum install epel-release
sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable haveged

RHEL / Rocky Linux 8 (and derivatives)

If Podman is installed, you must run the following two commands before installation:

sudo yum remove containerd
sudo yum remove runc

Installation

Keeper Connection Manager installation instructions in the cloud or on-prem environments.

Keeper Connection Manager is installed as a gateway in your cloud, virtual or on-prem environment. There are several methods of deployment, and installation only takes a few minutes.

Install Methods

For Advanced Linux Install with package installations and custom configurations, we support Red Hat Enterprise Linux 7/8 and CentOS 7.

Configure DNS

In a production deployment, select a domain name to access the endpoint, e.g. kcm.company.com and create a new DNS record to map it to your server's public IP. You will be prompted to enter the domain name during the installation.

Ensure that the DNS record maps to your server's public IP address, or an IP that is internally available to your end-users over HTTPS port 443.

Decide on Let's Encrypt or Existing Cert

Keeper Connection Manager requires an SSL certificate for installation. Decide before starting installation if you want to use Let'sEncrypt, or if you have your own certificate file and private key.

LetsEncrypt is a certificate authority that is free, automated, open, and is also the world's largest CA. During installation using the Auto Docker Install method, Keeper Connection Manager will provide an option to utilize LetsEncrypt (option 1), which will generate a 3-month trusted certificate for your domain.

If you plan to use Let's Encrypt as your CA, you should open port 80 and 443. LetsEncrypt uses port 80 to perform automated SSL certificate generation.

Advanced Linux Install

--> Installation Instructions for Advanced Linux Install

Authentication Options

Configuration of Keeper Connection Manager Authentication methods

Keeper Connection Manager supports multiple authentication mechanisms which can be enabled through installing additional packages.

Advanced Linux Install Method

For Advanced Linux Install method, packages are available through the Keeper Connection Manager repository and automatically place the necessary Apache Guacamole extension within /etc/guacamole/extensions and any necessary dependencies (such as database drivers) within /etc/guacamole/lib.

The "Test Installation" using the user-mapping.xml file is meant as a quick means of verifying the functionality of Guacamole but is not supported for production deployments.

Ensure that a production-ready authentication mechanism is configured prior to deploying Keeper Connection Manager.

All authentication methods packaged listed below are production-ready:

  • Authenticating users with LDAP

  • Authenticating users with SAML 2.0

  • Authenticating users with OpenID Connect

  • Using Guacamole with a MySQL Database

  • Using Guacamole with a PostgreSQL Database

  • Using Guacamole with a SQL Server Database

Using a database like MySQL, PostgreSQL, or SQL Server enables additional features within Keeper Connection Manager, including connection sharing and a web-based administration interface. The LDAP authentication allows authentication to be provided through an LDAP directory such as OpenLDAP or Active Directory, and can be combined with a database, thus avoiding the need to store connections within the LDAP directory using schema modifications.

Multi-factor Authentication

If you wish to enable multi-factor authentication in front of Keeper Connection Manager, you may do so with Duo or TOTP. Multi-factor authentication is supported in front of any of the above production-ready authentication mechanisms, however keep in mind that a database is always required for TOTP:

  • Using Duo for Multi-factor Authentication

  • Using TOTP for Multi-factor Authentication

Important Note: MFA cannot be activated if the SAML authentication method is already active.

Upgrading

Updating Keeper Connection Manager when using the Advanced Linux Install method

Keeper produces new minor releases of Keeper Connection Manager (1.1, 1.2, 1.3, etc.) roughly every 3 months following the first general availability release. Minor releases are updates to an existing major release which add new features and fix bugs, and will always maintain strict API compatibility. The details of upcoming and past releases can be found in the

Major releases (the only releases which may break API compatibility) are intentionally isolated from each other such that each major release uses a different base URL within its .repo file. Updates to an existing install of Keeper Connection Manager are always minor releases and will not break compatibility.

Checking for updates

To check whether updates are available for Keeper Connection Manager packages without actually applying those updates, you can use the yum list updates command. Providing the "kcm-*" pattern to yum list updates restricts the packages checked to only those packages provided by Keeper Connection Manager:

If the above command lists one or more packages, then there are newer versions of Keeper Connection Manager packages available, and you should proceed with upgrading when a maintenance window permits.

Performing the upgrade

Updates to Keeper Connection Manager are brief and can be expected to take only a few minutes, however the update process should be planned for a time that the service can safely be taken down, ideally a scheduled maintenance window. This is because the upgrade procedure generally requires that both Tomcat and guacd are restarted.

Stop Guacamole and guacd services

Before upgrading the Keeper Connection Manager packages, both Guacamole and guacd should be taken offline:

If you do not have a standalone "guacamole" service

You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "keeper-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Keeper Connection Manager that was originally installed before (2021-09-16).

You will instead need to manually stop your install of Tomcat:

This is because:

  • If both the Guacamole web application and one of its extensions are being updated, the package manager may update the web application first. The running Tomcat service may then redeploy and restart the web application before the extension is updated, resulting in inconsistency.

  • If protocol support for guacd is being updated, older versions of that support may be cached by the system linker until the guacd service has been restarted.

  • If the guacd service is being updated, those updates cannot take effect until the guacd service is restarted. The running process will continue to use the older, cached binary.

The system should remain stable if the upgrade is performed without stopping Tomcat and guacd, however it is best practice to do so. An upgrade to the web application will always result in the web application being restarted, and any updates being applied will likely not take effect until after services are restarted. With updates to the web application inherently causing a service restart, and updates in general requiring a service restart in order to take effect, it's best to plan this restart as a controlled part of the process.

Apply updates using yum

Once Tomcat and guacd are stopped, the Keeper Connection Manager packages can be upgraded using the yum utility, just like the other packages in the system. The upgrade can be restricted to only Keeper Connection Manager packages by specifying the "kcm-*" pattern:

Start the Guacamole and guacd services

After yum upgrade completes, the system has been updated and it is safe to start Guacamole and guacd back up:

sudo yum list updates "kcm-*"
sudo systemctl stop guacamole guacd
$ sudo systemctl stop tomcat guacd
sudo yum upgrade "kcm-*"
sudo systemctl start guacamole guacd
changelog.
the 2.5 release

Add Duo for MFA

Integrating Duo with Keeper Connection Manager for 2FA/MFA

Keeper Connection Manager provides support for Duo as a second authentication factor, automatically verifying user identity with Duo after the user is initially authenticated. To make use of Duo support, some other authentication mechanism will need be configured, as well, such as MySQL, PostgreSQL, or LDAP. Only once authentication has succeeded through another installed method will Duo be used to verify the identity of the user.

Installing Duo support for Guacamole

Keeper Connection Manager packages Guacamole’s Duo support within the kcm-guacamole-auth-duo package:

$ sudo yum install kcm-guacamole-auth-duo

The Guacamole-side installation of Duo support within Keeper Connection Manager consists solely of the kcm-guacamole-auth-duo package. Nothing else needs to be installed except for Guacamole itself and some other means of authentication. If Guacamole has not yet been installed and confirmed to work with some other authentication method, that should be done first before attempting to set up Duo.

Registering Guacamole with Duo

For Duo to be integrated with any application, that specific instance of the application must first be registered with the Duo service. Duo does not provide a specific integration option for Guacamole, but Guacamole’s Duo support uses Duo’s generic authentication API which they refer to as the “Web SDK”. To use your Guacamole deployment with Duo, you will need to add it to your Duo account as a new “Web SDK” application from within the “Applications” tab of the admin panel.

Once this has been done, Duo will expose several properties specific to your Guacamole deployment: the integration key, secret key, and API hostname. These values can be found within the application’s “Details” section in your Duo account, and will need to be copied into /etc/guacamole/guacamole.properties:

$ sudo vi /etc/guacamole/guacamole.properties

The relevant properties can be found in the “DUO-1” section:

##
## [DUO-1] Duo application integration details
##
## The API hostname, integration key, and secret key provided for you by Duo
## when you registered Guacamole in Duo's "Admin" panel. Each of these values
## is required and is generated by Duo.
##

#duo-api-hostname:    XXXXXXXX.duosecurity.com
#duo-integration-key: 0123456789ABCDEF0123
#duo-secret-key:      0123456789ABCDEF0123

Generating the application key

The Duo “Web SDK” requires that an arbitrary and random key be generated for each application. This key resides strictly on the side of the application, and is not registered with Duo.

Any random value containing at least 40 characters will suffice. To quickly grab 40 random characters from /dev/random:

$ tr -dc 'a-zA-Z0-9' < /dev/random | head -c40; echo
xqZKJODwg7ouwxdqU9hvuaWhE6lQFspijY0ofg8I
$

This value must then be copied within the duo-application-key property, which can be found in the "DUO-2" section of guacamole.properties:

##
## [DUO-2] Duo application key
##
## An arbitrary and random key to use when communicating with the Duo service.
## This key MUST be manually generated, and MUST BE AT LEAST 40 CHARACTERS.
##

#duo-application-key: abcdefghijklmnopqrstuvwxyz0123456789ABCD

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

$ sudo systemctl restart guacamole

If you do not have a standalone "guacamole" service You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "kcm-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before the 2.5 release (2021-09-16).

You will instead need to manually restart your install of Tomcat:

$ sudo systemctl restart tomcat

OpenID Connect Auth

Instructions for authenticating users with OpenID Connect

This documentation assumes that you already have access to an OpenID Connect identity provider, such as Google, Okta, Azure, etc. If you do not already have Guacamole installed, please see the .

Installing OpenID Connect support for Guacamole

Keeper Connection Manager packages Guacamole’s OpenId Connect support within the kcm-guacamole-auth-sso-openid package:

Connecting Guacamole to OpenID Connect

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the OpenID Connect installation:

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “OPENID-1” and defines the IdP configuration. Uncomment the properties in this section and edit them according to your identity provider setup.

The second section contains the Keeper Connection Manager server information that is used by the IdP.

The 3rd section contains the OpenID Connect identity mappings.

The 4th section contains optional parameters that can be set.

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

Add TOTP for 2FA

Integrating TOTP based authentication for 2FA

Keeper Connection Manager provides support for TOTP as a second authentication factor, verifying the identities of enrolled users using authentication codes generated with the TOTP standard. To make use of TOTP support, a database authentication mechanism will need be configured, as well, such as or . Only once authentication has succeeded through another installed method will TOTP be used to verify the identity of the user, and a database is specifically required for storage of the key that Guacamole and the user's authentication device will use to generate authentication codes.

Installing TOTP support for Keeper Connection Manager and Guacamole

Keeper Connection Manager packages Guacamole’s TOTP support within the kcm-guacamole-auth-totp package:

The Guacamole-side installation of TOTP support within Keeper Connection Manager consists solely of the kcm-guacamole-auth-totp package. Nothing else needs to be installed except for Guacamole itself and some other means of authentication. If Guacamole has not yet been installed and confirmed to work with a database authentication method, that should be done first before attempting to set up TOTP.

Unlike most other extensions, no additional configuration information is typically needed for the TOTP support to work. All configurable values have defaults which are accepted by widely used TOTP implementations like Google Authenticator. You will only need to specify additional configuration information if your authentication devices differ from these defaults:

Issuer name
Apache Guacamole

If the above are acceptable, then no configuration changes need to be made and you should proceed to the section below. If any of the above need to be changed, you will need to edit /etc/guacamole/guacamole.properties to specify the appropriate values. These properties are documented separately in detail:

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

If you do not have a standalone "guacamole" service

You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "kcm-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before(2021-09-16).

You will instead need to manually restart your install of Tomcat:

After TOTP support has been installed and Guacamole has been restarted, only users that exist within the database will automatically be enrolled in TOTP. Valid users that exist only outside the database will be able to log in, but will not be automatically enrolled with TOTP.

If you are and want to require all users to use TOTP, you should be sure to set the corresponding property within /etc/guacamole/guacamole.properties to enforce existence of database accounts for all logins. Each supported database has its own variant of this property:

Database
Property name

This is particularly important if the database's concept of identity may differ from your LDAP server's concept of identity. For example, usernames within PostgreSQL are case-sensitive, but usernames within Active Directory typically are not.

$ sudo yum install kcm-guacamole-auth-sso-openid
$ sudo vi /etc/guacamole/guacamole.properties
##
## [OPENID-1] Identity provider details
##
## The details of the identity provider (IdP) that Guacamole should use for
## authentication. These properties dictate how Guacamole should communicate
## with the IdP, including the how users should be redirected for
## authentication by the IdP. THIS INFORMATION IS REQUIRED if the OpenID
## extension will be used.
##
## If your IdP implements "OpenID Connect Discovery", these values can be
## found within the JSON file hosted at:
##
##   https://identity-provider/.well-known/openid-configuration
##
## where "https://identity-provider" is the base URL of the IdP.
##

#openid-authorization-endpoint: https://myprovider.example.net/sso/openid/auth
#openid-jwks-endpoint: https://myprovider.example.net/sso/openid/certs
#openid-issuer: https://myprovider.example.net
##
## [OPENID-2] Guacamole server details
##
## The details of the Guacamole server that should be provided to the OpenID
## Connect IdP when authenticating the user. This information defines how the
## OpenID Connect IdP should send identity assertions back to the Guacamole
## server if their identity is confirmed. THESE PROPERTIES ARE REQUIRED if
## the OpenID extension will be used.
##

#openid-client-id: abcd1234-xyz.apps.myprovider.example.net
#openid-redirect-uri: https://myserver.example.net
##
## [OPENID-3] Identity mapping
##
## How identity assertions received form the OpenID Connect IdP should be
## mapped back to user and group identities. Mapping users and groups is
## flexible within OpenID, with the definition of user/group identity left
## to the application to determine from the various assertions ("claims")
## returned by the OpenID IdP in response to successful authentication.
##
## By default, Guacamole will use the "email" claim as the username and the
## content of the "groups" claim (if present) as the set of associated user
## groups. OpenID IdP implementations may support additional claims that may
## be more appropriate for your use case. If using different claims from the
## defaults, the "openid-scope" property must be adjusted so that Guacamole
## knows to request those claims from the IdP.
##

#openid-scope: openid email profile
#openid-username-claim-type: email
#openid-groups-claim-type: groups
##
## [OPENID-4] Clock skew and timeouts
##
## By default, clock skew between the Guacamole server and the OpenID IdP of up
## to 30 seconds is tolerated, tokens generated by the OpenID IdP are valid for
## no longer than 5 hours, and the "nonce" generated for each OpenID request by
## Guacamole will remain valid for no longer than 10 minutes.
##
## If necessary, these values can be overridden. Clock skew is specified in
## seconds, and token/nonce validity is specified in minutes.
##

#openid-allowed-clock-skew: 30
#openid-max-token-validity: 300
#openid-max-nonce-validity: 10
#saml-compress-response: true
$ sudo systemctl restart guacamole
installation instructions
$ sudo yum install kcm-guacamole-auth-totp

Code length

6 digits

Validity period

30 seconds

Hash algorithm

SHA-1

$ sudo systemctl restart guacamole
$ sudo systemctl restart tomcat

MySQL / MariaDB

mysql-user-required

PostgreSQL

postgresql-user-required

SQL Server

sqlserver-user-required

MySQL
PostgreSQL
"Completing installation"
TOTP Configuration Properties
the 2.5 release
using a database alongside LDAP or Active Directory

SSL Termination with Apache

How to manually configure Keeper Connection Manager SSL termination using Apache

This documentation assumes that you already have an instance of Apache properly configured for SSL/TLS, including the necessary private key and certificate, and that Guacamole has already been installed using Keeper Connection Manager. If you do not already have an instance of Apache ready, please set up an instance of Apache before proceeding. If you do not already have Guacamole installed, please see the installation instructions.

SSL termination is the recommended method of encrypting communication between users’ browsers and Guacamole, and involves configuring a reverse proxy like Nginx or Apache to handle strictly the SSL/TLS portion of the conversation with the Tomcat instance hosting Guacamole, handling encrypted HTTP externally while passing unencrypted HTTP to Tomcat internally.

Proxying Guacamole through Apache

If Apache has been configured for SSL/TLS, there should be a <VirtualHost> section within this configuration that defines the certificate and private key used by Apache, and which requires Apache to listen on the standard HTTPS port (443). To proxy Guacamole through Apache such that Guacamole communication is encrypted, two additional <Location> sections will need to be added within this <VirtualHost> section:

<Location />
    Order allow,deny
    Allow from all
    ProxyPass http://HOSTNAME:8080/ flushpackets=on
    ProxyPassReverse http://HOSTNAME:8080/
</Location>

<Location /websocket-tunnel>
    Order allow,deny
    Allow from all
    ProxyPass ws://HOSTNAME:8080/websocket-tunnel
    ProxyPassReverse ws://HOSTNAME:8080/websocket-tunnel
</Location>

where “HOSTNAME” is the hostname or IP address of the internal Guacamole server.

These <Location> sections configure proxying of the HTTP and WebSocket protocols respectively. Apache handles the HTTP and WebSocket protocols separately, and thus requires separate configuration for the portion of the web application which uses WebSocket. Both sections are required for Guacamole to work correctly behind Apache, and the mod_proxy_wstunnel module must be installed and enabled.

Of particular importance is the flushpackets=on option within the ProxyPass directive used for HTTP in front of Guacamole. This option disables buffering of packets sent to/from Guacamole. By default, Apache will buffer communication between itself and the browser, effectively disrupting the stream of events and updates required for remote desktop. Without disabling buffering, the Guacamole connection will at best be slow, and at worst not function at all.

Applying the updated Apache configuration

After the above changes have been made, Apache must be reloaded to force rereading of its configuration files:

$ sudo systemctl reload httpd

If you are using SELinux (the default on both CentOS and RHEL), you must also configure SELinux to allow HTTPD implementations like Apache to establish network connections:

$ sudo setsebool -P httpd_can_network_connect 1

If Guacamole is not accessible through Apache after the service has been reloaded, check the Apache logs and/or journalctl to verify that the syntax of your configuration changes is correct. Such errors will result in Apache refusing to reload its configuration, or refusing to start up entirely. If you do not see any errors from Apache, verify that you have configured SELinux to allow Apache to connect to the network and check the SELinux audit logs (/var/log/audit/audit.log) for AVC denials.

Configuring Tomcat to trust "X-Forwarded-For" from Apache (manual deployment only)

This section applies only if you have manually deployed Guacamole under your own version of Tomcat. This will usually only be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before the 2.5 release (2021-09-16).

If you deployed Guacamole automatically (the default and recommended method), this has already been configured for you within the bundled version of Tomcat.

For the client address sent by Apache via "X-Forwarded-For" to be correctly trusted as the true client address, you will need to add a "RemoteIpValve" entry within /etc/tomcat/server.xml. If this is not specified, the client address will be logged as the address of the internal proxy, which is not usually desirable.

The easiest way to add the required entry is to copy the example server.xml file provided with the kcm package, replacing the old /etc/tomcat/server.xml:

$ sudo cp /opt/keeper/share/guacamole/server.xml /etc/tomcat/

The example server.xml file defines:

  • A single HTTP connector listening on port 8080.

  • A RemoteIpValve with all settings at their default values.

By default, the RemoteIpValve will trust "X-Forwarded-For" from all private networks (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and both IPv4 and IPv6 localhost). If you need this range to be narrowed, or if you have already made manual edits to server.xml, you will need to make these changes manually.

If editing server.xml manually (rather than using the example server.xml), a <Valve> which trusts "X-Forwarded-For" from most common private addresses would be specified as:

<Valve className="org.apache.catalina.valves.RemoteIpValve"/>

This <Valve> must be added within the relevant <Host> section. In most cases, the easiest place to add this is simply toward the end of the server.xml file:

        ...

        <Valve className="org.apache.catalina.valves.RemoteIpValve"/>

      </Host>
    </Engine>
  </Service>
</Server>

If needed, this can be narrowed by providing your own value for the internalProxies attribute specifies a regular expression which matches the IP addresses of any proxies whose "X-Forwarded-For" headers should be trusted. For example, to trust only "X-Forwarded-For" received from localhost:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
       internalProxies="127\.\d{1,3}\.\d{1,3}\.\d{1,3}|0:0:0:0:0:0:0:1|::1"/>

Applying the updated Tomcat configuration

Once an appropriate RemoteIpValve has been specified, Tomcat must be restarted to force rereading of server.xml:

$ sudo systemctl restart tomcat

Home Screen

Keeper Connection Manager user guide - home screen

Overview

The Keeper Connection Manager home screen provides quick access to any connection that you have been granted access to.

If you have access to multiple connections, you will be taken to the dashboard where all available connections are listed. If you only have access to a single connection, you will be routed directly to that connection.

Home Screen

My Connections

The home screen contains a list of all connections to which you have access, along with thumbnails of any recently used or active connections. Thumbnail images update dynamically while a machine is being accessed. If you have access to a large number of connections and wish to quickly locate a specific connection, you can also enter search terms within the “Filter” field to filter the list of connections by name.

Clicking on any connection will open that connection within the current window or tab, but multiple connections can be used simultaneously.

Each connection you use will remain active until explicitly disconnected, or until you navigate away from Keeper Connection Manager entirely. Active connections can be seen as thumbnails updating in real-time on the home screen.

If a user only has access to a single remote connection, they will immediately connect upon login.

User Menu

With the exception of the client connection screen, all Keeper Connection Manager screens contain a menu in the upper-right corner called the “user menu”. This menu displays your username and contains several options which depend on your level of access.

User Menu

Home

Navigates back to the home screen, if you are not already there. If you only have access to one connection, this will be replaced with a link to that connection.

Settings

Navigates to the settings interface, which provides the core Administrative functions (if you have rights to access this area) and and user preferences such as display language.

Logout

Logs out of Keeper Connection Manager completely, closing all current connections and ending the Keeper Connection Manager session.

Changelog

Historical release changelog for Keeper Connection Manager

Release notes are published at Keeper's Release Notes portal.

-> Keeper Connection Manager Release Notes

Client Certificate Configuration

Optional NGINX Client Certificate configuration for advanced protection

Client Certificate Overview

To implement device-based access security with Keeper Connection Manager, this can be accomplished using NGINX client certificates. A client certificate is installed into the web browser of your user's approved devices, and the server will only accept communication from a device with the client certificate installed.

The steps to activate this advanced level of protection is described in the steps below.

(1) Create a Certificate Authority (CA) Key

Generate a CA Key with a strong auto-generated passphrase. Make sure to store the passphrase in your Keeper vault.

(2) Create a CA Certificate

A certificate is created with the CA Key. When answering the questions, you can leave the Common Name and Email empty. Save the information that you entered for Country, State, Locality, and Organization, because you may need these later when renewing the certificate.

Side Note: to analyze the certificate parameters, you can run the below command.

(3) Create a Client Key

For the end-user devices, a client key must be generated. You can decide if you would like to generate one key for all devices, or each user can generate their own key and request a certificate. The process is up to you. Generate a client key with a strong auto-generated passphrase. Make sure to store the passphrase in your Keeper vault.

(4) Create a CSR

For each Client Key, generate a CSR to create a signed certificate.

(5) Sign the CSR with the CA Key

You'll need to enter the CA passphrase from Step 1 to sign the request.

At this point, you now have a signed Client Certificate (client.crt).

(6) Convert the Client Certificate to PKCS#12

To import the certificate into a web browser, a pfx file in PKCS#12 is typically required. Generate the client.pfx file using the command below. A passphrase will be required. This passphrase will be provided to each of the users who need to install the certificate, so it should be used specifically for this purpose.

(7) Add to NGINX Config

Add the below line to your Keeper Connection Manager NGINX configuration file to block access without a certificate. Make sure to upload the CA certificate to the folder path designated.

In the Location block, add this section to send the user a 403 error if the client cert is not installed:

Make sure that the ca.crt file is located in a folder that NGINX can access.

After updating the configuration, restart NGINX.

(8) Test the configuration

Before installing the client certificate on the user's machine, load up the Keeper Connection Manager login screen to ensure that a 403 error is sent:

(9) Install the Client Certificate

For each end-user client device that will need access to Keeper Connection Manager, you will need to install the client certificate into the user's browser or machine. The installation of client certificates varies by platform.

On Windows

Double-click or right-click the client certificate (client.pfx) from Step 6 and enter the client certificate passphrase.

Restart the browser.

The next time Keeper Connection Manager is loaded, you can approve the certificate.

On Mac OS - Chrome

Import the client.pfx file by double-clicking or loading into the Keychain login Certificates section. In the "Trust" section of the certificate, mark as Always Trust.

Restart the browser and load the Keeper Connection Manager login screen to select the certificate.

On Mac OS - Firefox

Open Firefox > Preferences > search for Certificates and select Your Certificates tab. Click "Import" and select the client.pfx certificate file. Complete the import.

After successful import, the Keeper Connection Manager login screen will load.

Troubleshooting

After setting up the client certificate configuration, the following errors are common.

If NGINX fails to start, journalctl -xe might show something like "Permission denied:fopen('/path/to/ca.crt','r'). This might occur if the folder permissions and file permissions are not set properly.

If the folder and file permissions are set properly and you're still receiving this error, the restorecon command will repair the SELinux security context for the file:

SSL Termination with NGINX

How to manually configure Keeper Connection Manager SSL termination using NGINX

This documentation assumes that you already have an instance of NGINX properly configured for SSL/TLS, including the necessary private key and certificate, and that Guacamole has already been installed using Keeper Connection Manager. If you do not already have an instance of NGINX ready, please before proceeding. If you do not already have Guacamole installed, please see the

SSL termination is the recommended method of encrypting communication between users’ browsers and Guacamole, and involves configuring a reverse proxy like Nginx orto handle strictly the SSL/TLS portion of the conversation with the Tomcat instance hosting Guacamole, handling encrypted HTTP externally while passing unencrypted HTTP to Tomcat internally.

Proxying Guacamole through NGINX

If Nginx has been configured for SSL/TLS, there should be a server section within this configuration that defines the certificate and private key used by Nginx, and which requires Nginx to listen on the standard HTTPS port (443). To proxy Guacamole through Nginx such that Guacamole communication is encrypted, a new location section will need to be added within this server section:

where “HOSTNAME” is the hostname or IP address of the internal Guacamole server. This can also be replaced with "http://127.0.0.1:8080" in most cases.

While a typical proxy configuration for Nginx may only specify the proxy_pass and proxy_http_version directives, Guacamole requires additional configuration due to the nature of the application:

  • proxy_buffering off disables buffering of packets sent to/from Guacamole. By default, Nginx will buffer communication between itself and the browser, effectively disrupting the stream of events and updates required for remote desktop. Without disabling buffering, the Guacamole connection will at best be slow, and at worst not function at all.

  • The X-Forwarded-For header must be explicitly set to ensure that the IP addresses logged by Guacamole are correct. Without explicitly adding this header (and), all connections will appear to come from the NGINX server.

  • The Upgrade and Connection headers are required parts of the WebSocket protocol. If omitted, WebSocket will not function correctly, and Guacamole will fall back to HTTP streaming, which is less efficient.

Applying the updated NGINX configuration

After the above changes have been made, NGINX must be reloaded to force rereading of its configuration files:

If you are using SELinux (the default on both CentOS and RHEL), you must also configure SELinux to allow HTTPD implementations like Nginx to establish network connections:

If Guacamole is not accessible through NGINX after the service has been reloaded, check the NGINX logs and/or journalctl to verify that the syntax of your configuration changes is correct. Such errors will result in NGINX refusing to reload its configuration, or refusing to start up entirely. If you do not see any errors from NGINX, verify that you have configured SELinux to allow NGINX to connect to the network and check the SELinux audit logs (/var/log/audit/audit.log) for .

Configuring Tomcat to trust "X-Forwarded-For" from NGINX (manual deployment only)

This section applies only if you have manually deployed Guacamole under your own version of Tomcat. This will usually only be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before(2021-09-16).

If you deployed Guacamole automatically (the default and recommended method), this has already been configured for you within the bundled version of Tomcat.

For the client address sent by NGINX via "X-Forwarded-For" to be correctly trusted as the true client address, you will need to add a "" entry within /etc/tomcat/server.xml. If this is not specified, the client address will be logged as the address of the internal proxy, which is not usually desirable.

The easiest way to add the required entry is to copy the example server.xml file provided with the kcm package, replacing the old /etc/tomcat/server.xml:

The example server.xml file defines:

  • A single HTTP connector listening on port 8080.

  • A RemoteIpValve with all settings at their default values.

By default, the RemoteIpValve will trust "X-Forwarded-For" from all private networks (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and both IPv4 and IPv6 localhost). If you need this range to be narrowed, or if you have already made manual edits to server.xml, you will need to make these changes manually.

If editing server.xml manually (rather than using the example server.xml), a <Valve> which trusts "X-Forwarded-For" from most common private addresses would be specified as:

This <Valve> must be added within the relevant <Host> section. In most cases, the easiest place to add this is simply toward the end of the server.xml file:

If needed, this can be narrowed by providing your own value for the internalProxies attribute specifies a regular expression which matches the IP addresses of any proxies whose "X-Forwarded-For" headers should be trusted. For example, to trust only "X-Forwarded-For" received from localhost:

Applying the updated Tomcat configuration

Once an appropriate RemoteIpValve has been specified, Tomcat must be restarted to force rereading of server.xml:

Sharing Connections

Created shared remote connections in Keeper Connection Manager

Overview

Keeper Connection Manager allows users to share access to their connection session with a URL. This allows for easy sharing of a connection session among teams, or sharing of connections to people without Keeper Connection Manager accounts.

Create a Sharing Profile

The first step to connection sharing is to create a Sharing Profile. This needs to be made for each connection that will be shared.

To create a sharing profile, head to the "Connection" tab of the Settings menu and click the arrow next to the connection you would like to add a sharing profile to.

You will see a list of all the sharing profiles created for this connection, click "New Sharing Profile" to create a new profile, or click an existing sharing profile to edit it.

The Sharing Profile form will open. Fill in the name and options to configure the sharing profile.

Click "Save" to create the sharing profile.

When editing an existing profile, you also have the options to delete or clone the profile.

Sharing Connections

To initiate a connection share, from within a connection session first open the connection menu using Ctrl+Shift+Win (Ctrl+Shift+Cmd for Mac). When at least one sharing profile exists for the connection, the "Sharing" menu will appear next to the user's name.

Click "Sharing" to see a list of the sharing profiles for this connection.

Select which profile to use and click it to create a sharing URL which can be shared to give anyone access to this connection session.

When someone without an account in this Keeper Connection Manager system connections to the session, they will have full access to the connection (unless "Read Only" was selected in the sharing profile settings) however they will not have a user menu, or sharing menu.

Vault Integration

Integrate Keeper Connection Manager with the Keeper Vault for protecting and retrieving session credentials

Overview

Keeper Secrets Manager integrates with Keeper Connection Manager to provide dynamic retrieval of credentials that are stored in the Keeper Vault. This integration allows the Admin to provide privileged sessions with credentials that are stored and protected in the encrypted Keeper vault.

Using , Keeper Connection Manager can securely access RDP, SSH, MySQL, VNC and other credentials from the Keeper Vault. With this integration, connection credentials are protected in the encrypted Keeper vault and never stored in plain text. In the connection properties, you can simply reference the hostname or specified Vault record identifier and Keeper will pull the necessary credentials at runtime. Access credentials are never exposed to the user.

This documentation assumes that you already have a Keeper Enterprise subscription with Keeper Secrets Manager activated.

  • If you do not already have a Keeper subscription, please sign up for a 14-day free trial from this site:

  • If you already have a Keeper subscription but haven't activated Keeper Secrets Manager, .

Integration Features

  • Securely store connection secrets like SSH keys and Admin passwords in your Keeper Vault

  • Dynamically pull credentials from Keeper on-demand when establishing connections

  • Eliminate hard-coded credentials and secrets

  • Securely store guacamole properties in the Keeper Vault such as MySQL passwords

UDS Enterprise Configuration Properties

The properties listed here are only applicable if Keeper Connection Manager is being integrated with UDS Enterprise as a means of providing remote access. Support for UDS Enterprise is installed using the kcm-guacamole-auth-uds package. If using, support for UDS is instead configured using environment variables.

UDS Enterprise deployment details

When leveraging Keeper Connection Manager to fulfill a request to remotely access a virtual machine, UDS Enterprise will generate and send a temporary access token to Keeper Connection Manager. This temporary access token defines the connection details of the machine being accessed and needs to be validated against UDS Enterprise for that access to be granted. In order to reach out to UDS Enterprise to perform this validation, Keeper Connection Manager needs to know the base URL of the UDS Enterprise deployment.

The URL provided need only be a URL that your Keeper Connection Manager server can use to reach your UDS Enterprise server. If UDS Enterprise is installed on the same private network or on the same server as Keeper Connection Manager, this can be an internal URL that uses a private IP address or domain name, and does not necessarily need to be the public URL that would be used to access UDS Enterprise over the internet.

Property name
Description

Duo Two-Factor Authentication Configuration Properties

Advanced configuration properties for Duo 2FA

The properties listed here are only applicable if Duo two-factor authentication is being used. Support for Duo two-factor authentication is or enabled with the Docker installation. If using, support for Duo two-factor authentication is configured using environment variables.

Duo application integration details

The API hostname, integration key, and secret key are provided for you by Duo when you registered Guacamole within Duo's "Admin" panel. Each of these values is required and is generated by Duo.

Property name
Description

Duo application key

An arbitrary and random key must be provided for communicating with the Duo service. This key MUST be manually generated and MUST BE AT LEAST 40 CHARACTERS.

Property name
Description

Any random value containing at least 40 characters will suffice. To quickly grab 40 random characters from /dev/random:

Encrypted JSON Configuration Properties

Advanced configuration properties for Encrypted JSON Auth

The properties listed here are only applicable if encrypted JSON authentication is being used. Support for encrypted JSON authentication is. If using, support for encrypted JSON authentication is instead configured using environment variables.

Shared JSON secret key

A shared secret key is used by systems generating JSON data to encrypt and sign the JSON, and by the Guacamole server to verify and decrypt received data. This key must be 128 bits, specified with 32 hexadecimal digits.

Property name
Description

This key can be essentially anything as long as it is unpredictable. An easy way of generating such a key is to echo a passphrase through the "md5sum" utility. This is the technique OpenSSL itself uses to generate 128-bit keys from passphrases. For example:

Source network restrictions

By default, received encrypted JSON will be accepted as long as it is valid and properly signed with the secret key. This can be further restricted to accept encrypted JSON only from machines which match a comma-separated list of trusted IP addresses and/or CIDR subnets.

Property name
Description

Installing MariaDB for Guacamole Authentication

CentOS and RHEL both provide a package for the MariaDB database server called "mariadb-server". Installing this package will install a version of MariaDB that is. If you do not have an existing database instance or third-party database hosting provider that you would prefer to use, installing a fresh instance of MariaDB for use by Guacamole will work nicely:

As with other standard CentOS / RHEL packages providing a service, the MariaDB service will not be started by default after the "mariadb-server" package is installed. It must be started manually, and then configured to automatically start if the system is rebooted:

Dropping default anonymous users

If MariaDB is installed locally (on the same server as Apache Guacamole), its default configuration will prevent Guacamole from authenticating. This is due to the way that MariaDB handles authentication and anonymous database users: if an anonymous user is defined for the same hostname/address, MariaDB will use only the anonymous user, and authentication using a non-anonymous user and password from the same hostname/address will fail.

This can be checked by querying MariaDB's user table directly:

Any users with empty usernames in the results of the above query are anonymous users which may block authentication from succeeding:

Dropping those users should allow non-anonymous authentication from those same hosts to succeed:

Pointing Guacamole at the new MariaDB instance

Once MariaDB has been deployed, you should move forward with . This process is documented in its entirety, and the default /etc/guacamole/guacamole.properties file also contains placeholders and comments to help guide administrators to the correct configuration properties. Overall, the process will involve:

  • Installing the package providing MySQL / MariaDB support (kcm-guacamole-auth-jdbc-mysql).

  • Creating a new database within your MariaDB instance using the provided schema files.

  • Creating a database user that Guacamole can use to execute queries against your database.

  • Editing /etc/guacamole/guacamole.properties to point Guacamole at your database (and to specify the credentials of the database user it should use).

How to Use KCM

Features and functionality of the Keeper Connection Manager interface

Keeper Connection Manager provides access to the functionality of a desktop from within your web browser. The interface is designed to be as seamless and unobtrusive as possible.

Selecting connections and user settings.

Features and functionality of the connection session and the sidebar menu.

Manage the clipboard, view multiple connections at once, upload or download files, and change input settings within a connection session

How to create Keeper Connection Manager connections for each supported protocol type

Configure and use Keeper Connection Manager drag-and-drop file transfer

Share access to Keeper Connection Manager connections with anyone with an internet browser

How to configure screen and keystroke recording for all session types.

Importing and Exporting

Data can be imported to a MySQL connection from a file on your machine, or exported and downloaded to you machine.

Import

Import data from a file on your machine into the MySQL connection.

To import data from a csv file, is the LOAD DATA MySQL command:

In the example above, "<table>" should be replaced with the SQL table to import data into. The other parts of the command are required for CSV-formatted files. If your uploaded file uses different termination characters update the query accordingly.

After running the query, Keeper Connection Manager will prompt you to supply the data file. To upload the file, simply drag and drop it from your machine onto the browser window.

The file uploaded does not have to have the same name given in the query

Export

Data from the connected MySQL database can be exported to a file on your machine. To do this, use the following query:

The result of the given <query> will be put into a CSV file with the given name and downloaded from the browser to your machine.

Importing and Exporting

Data can be imported to a SQL Server connection from a file on your machine, or exported and downloaded to you machine.

Import

Import data from a file on your machine into the SQL Server connection.

To import data from a csv file, is the COPY command:

In the example above, "<table>" should be replaced with the SQL table to import data into. The other parts of the command are required for CSV-formatted files. If your uploaded file uses different termination characters update the query accordingly.

After running the query, Keeper Connection Manager will prompt you to supply the data file. To upload the file, simply drag and drop it from your machine onto the browser window.

The file uploaded does not have to have the same name given in the query

Export

Data from the connected PostgreSQL database can be exported to a file on your machine. To do this, use the following query:

The result of the given <query> will be put into a CSV file with the given name and downloaded from the browser to your machine.

Importing and Exporting

Data can be imported to a PostgreSQL connection from a file on your machine, or exported and downloaded to you machine.

Import

Import data from a file on your machine into the PostgreSQL connection.

To import data from a csv file, is the COPY command:

In the example above, "<table>" should be replaced with the SQL table to import data into. The other parts of the command are required for CSV-formatted files. If your uploaded file uses different termination characters update the query accordingly.

After running the query, Keeper Connection Manager will prompt you to supply the data file. To upload the file, simply drag and drop it from your machine onto the browser window.

The file uploaded does not have to have the same name given in the query

Export

Data from the connected PostgreSQL database can be exported to a file on your machine. To do this, use the following query:

The result of the given <query> will be put into a CSV file with the given name and downloaded from the browser to your machine.

LOAD DATA LOCAL INFILE "input.csv" INTO TABLE <table> FIELDS
  TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
 SELECT <query> INTO LOCAL OUTFILE "<name>.csv"
BULK INSERT <table> FROM LOCAL FILE
 SELECT <query> INTO LOCAL OUTFILE "<name>.csv"
 \COPY <table> FROM "input.csv" With CSV
 \COPY (<query>) TO "<name>.csv" With CSV HEADER
location / {
    proxy_pass http://HOSTNAME:8080;
    proxy_buffering off;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    access_log off;
    client_max_body_size 200m;
}
$ sudo systemctl reload nginx
$ sudo setsebool -P httpd_can_network_connect 1
$ sudo cp /opt/keeper/share/guacamole/server.xml /etc/tomcat/
<Valve className="org.apache.catalina.valves.RemoteIpValve"/>
        ...

        <Valve className="org.apache.catalina.valves.RemoteIpValve"/>

      </Host>
    </Engine>
  </Service>
</Server>
<Valve className="org.apache.catalina.valves.RemoteIpValve"
       internalProxies="127\.\d{1,3}\.\d{1,3}\.\d{1,3}|0:0:0:0:0:0:0:1|::1"/>
$ sudo systemctl restart tomcat
set up an instance of Nginx
installation instructions.
Apache
configuring Tomcat to trust this header
AVC denials
the 2.5 release
RemoteIpValve

uds-base-url

The base URL of the UDS Enterprise deployment that may leverage Keeper Connection Manager to provide remote access. Keeper Connection Manager will use this URL to contact UDS to authenticate and authorize connection requests.

the keeper/guacamole Docker image

duo-api-hostname

The hostname of the Duo API endpoint to be used to verify user identities, generated by Duo when you registered Guacamole within Duo's "Admin" panel. This value can be found within the application details in the "API hostname" field.

duo-integration-key

The integration key provided for Guacamole by Duo when you registered Guacamole within Duo's "Admin" panel. This value can be found within the application details in the "Integration key" field.

duo-secret-key

The secret key provided for Guacamole by Duo when you registered Guacamole within Duo's "Admin" panel. This value can be found within the application details in the "Secret key" field.

duo-application-key

The arbitrary, random key to use when communicating with the Duo service.

$ tr -dc 'a-zA-Z0-9' < /dev/random | head -c40; echo
xqZKJODwg7ouwxdqU9hvuaWhE6lQFspijY0ofg8I
$
installed using the kcm-guacamole-auth-duo package
the keeper/guacamole Docker image

json-secret-key

The 128-bit secret key that will be used to encrypt and sign JSON sent to Guacamole for authentication, formatted as 32 hexadecimal digits. Received JSON will not be accepted unless it has been encrypted and signed using this key.

$ echo -n "ThisIsATest" | md5sum
4c0b569e4c96df157eee1b65dd0e4d41 -
$

json-trusted-networks

A comma-separated list of IP addresses and/or CIDR subnets which should be allowed to authenticate using encrypted JSON. By default, encrypted JSON is accepted without restriction from any address or subnet.

installed using the kcm-guacamole-auth-json package
the keeper/guacamole Docker image
$ sudo yum install mariadb-server
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
SELECT Host, User FROM mysql.user;
+---------------------+----------------+
| Host                | User           |
+---------------------+----------------+
| %                   | guacamole_user |
| 127.0.0.1           | root           |
| ::1                 | root           |
| the.server.hostname |                |
| the.server.hostname | root           |
| localhost           |                |
| localhost           | root           |
+---------------------+----------------+
DROP USER ''@'localhost';
DROP USER ''@'the.server.hostname';
FLUSH PRIVILEGES;
explicitly supported by Keeper Connection Manager
configuring Guacamole to use your new MariaDB instance
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
openssl x509 -in ca.crt -noout -text
openssl genrsa -des3 -out client.key 4096
openssl req -new -key client.key -out client.csr
openssl x509 -req -days 365 -in client.csr \
 -CA ca.crt -CAkey ca.key \
 -set_serial 01 -out client.crt
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
ssl_client_certificate /etc/nginx/client_certs/ca.crt;
ssl_verify_client optional;
        if ($ssl_client_verify != SUCCESS) {
                return 403;
        }
sudo systemctl restart nginx
restorecon ca.crt
403 Error without Client Certificate
Install Windows Client Certificate
Select Client Certificate
Import Certificate
Mark as Trusted
Select Client Certificate
Import Certificate on Firefox
Create new sharing profiles from the connections settings
Sharing Profile
Sharing Menu in Connection
Select a sharing profile
The connection menu for someone without an account
Home Screen
Launching Connections
Connection Screen
Creating Connections
File Transfer
Sharing Connections
Session Recording

Storing connection data within LDAP

This documentation assumes that you have already configured Guacamole to use LDAP for authentication. If have not already done so, please configure Guacamole for LDAP authentication before proceeding.

Defining the guacConfigGroup object class

When connection data is stored within your LDAP directory, each connection is represented by a special type of LDAP group, and permissions related to Guacamole connections can be managed directly with LDAP based on user membership of these groups. Doing this requires schema modifications which add a new object class called guacConfigGroup.

An LDIF file defining the schema changes in a manner compatible with OpenLDAP is provided by the kcm-guacamole-auth-ldap package within /opt/keeper/share/guacamole-auth-ldap/schema/guacConfigGroup.ldif. This file can be applied to your OpenLDAP server using the “ldapadd” command:

$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /opt/keeper/share/guacamole-auth-ldap/schema/guacConfigGroup.ldif

Once this is done, connections can be defined by creating new guacConfigGroup objects within the LDAP directory. Each guacConfigGroup accepts a single guacConfigProtocol attribute, defining the protocol associated with the connection, and any number of guacConfigParameter attributes, each defining a connection parameter name/value pair. Users that should have access to the connection must be added as members of the guacConfigGroup using the member attribute.

For example, a connection accessible to two users which uses VNC to connect to localhost at port 5900 with the password “secret” could be defined with the following LDIF file:

dn: cn=Example Connection,ou=groups,dc=example,dc=net
objectClass: guacConfigGroup
objectClass: groupOfNames
cn: Example Connection
guacConfigProtocol: vnc
guacConfigParameter: hostname=localhost
guacConfigParameter: port=5900
guacConfigParameter: password=secret
member: cn=user1,ou=people,dc=example,dc=net
member: cn=user2,ou=people,dc=example,dc=net

Configuring Guacamole to read connections from LDAP

Auto Docker And Docker Compose Install Methods:

To read connection data from LDAP, Guacamole’s main configuration file, modify the /etc/kcm-setup/docker-compose.yml file.

The base DN of all connections defined within LDAP must be specified using the LDAP_CONFIG_BASE_DN property. This base DN should be the DN of the portion of the LDAP directory whose subtree contains all Guacamole connections accessible via LDAP. Only connections defined within the subtree of this base DN will be visible:

   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"
            ADDITIONAL_GUACAMOLE_PROPERTIES: "extension-priority: *, ldap"
            
            ## Optional Settings ##
            # Read Connections from LDAP
            LDAP_CONFIG_BASE_DN: "ou=connections,dc=example,dc=net"

Advanced Linux Install Method:

To read connection data from LDAP, Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to define the subtree containing these connections:

$ sudo vi /etc/guacamole/guacamole.properties

The base DN of all connections defined within LDAP must be specified using the ldap-config-base-dn property. This base DN should be the DN of the portion of the LDAP directory whose subtree contains all Guacamole connections accessible via LDAP. Only connections defined within the subtree of this base DN will be visible:

##
## [LDAP-4] LDAP base DN for Guacamole connections ("guacConfigGroup")
##
## The base DN for all Guacamole connections defined directly within the LDAP
## directory using "guacConfigGroup" objects. If connections will not be stored
## within the directory, this property is unnecessary.
##
## If the kcm-guacamole-auth-ldap package has been installed, the LDAP
## schema for "guacConfigGroup" objects can be found at:
##
##   /usr/share/guacamole-auth-ldap/schema/guacConfigGroup.ldif
##
## Alternatively, if your LDAP directory does not accept LDIF files, the schema
## source for "guacConfigGroup" can be found at:
##
##   /usr/share/guacamole-auth-ldap/schema/guacConfigGroup.schema
##

#ldap-config-base-dn: ou=connections,dc=example,dc=net

Controlling access using group membership

Auto Docker and Docker Compose Install Method

To control group membership using LDAP, modify the /etc/kcm-setup/docker-compose.yml file.

It is also possible grant entire groups access to connections using the seeAlso attribute. This attribute is a standard LDAP attribute, and will be taken into account by Guacamole if the LDAP_GROUP_BASE_DN property is defined. This property defines the root of the subtree containing all groups which may apply to Guacamole users authenticated using LDAP:

  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"
            ADDITIONAL_GUACAMOLE_PROPERTIES: "extension-priority: *, ldap"
            
            ## Optional Settings ##
            # Mapping Guacamole groups to LDAP DN's
            LDAP_GROUP_BASE_DN: "ou=groups,dc=example,dc=net"
            LDAP_GROUP_NAME_ATTRIBUTE: "cn"

Advanced Linux Install Method

It is also possible grant entire groups access to connections using the seeAlso attribute. This attribute is a standard LDAP attribute, and will be taken into account by Guacamole if the ldap-group-base-dn property is defined. This property defines the root of the subtree containing all groups which may apply to Guacamole users authenticated using LDAP:

##
## [LDAP-5] LDAP group / group DN description
##
## The base DN of all Guacamole groups within the LDAP directory, and the
## attribute which should be used by Guacamole to uniquely identify the
## group.
##
## If connections are being stored within LDAP using "guacConfigGroup" objects,
## and you wish to control access to these connections via LDAP groups, this is
## accomplished using the standard "seeAlso" attribute and the
## ldap-group-base-dn property is required.
##
## If connections are being stored outside of LDAP, such as within a database,
## and you wish to control access using LDAP groups, both ldap-group-base-dn
## and ldap-group-name-attribute will be required. The group membership of a
## user cannot be queried without a base DN, and the unique name to be used by
## other parts of Guacamole to represent the group cannot be determined without
## the name attribute.
##

#ldap-group-base-dn:        ou=groups,dc=example,dc=net
#ldap-group-name-attribute: cn

Completing installation

Changes to Guacamole’s LDAP configuration will generally only be reread from guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

Advanced Linux Install Method

$ sudo systemctl restart guacamole

If you do not have a standalone "guacamole" service

You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "kcm-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before the 2.5 release (2021-09-16).

You will instead need to manually restart your install of Tomcat:

$ sudo systemctl restart tomcat

Login Attempts Properties

As of KCM version 2.9.6, KCM can be configured to limit a user's ability to login after multiple consecutive failed login attempts. This blocks brute-force login attacks on KCM instances.

By default KCM will lock a user out of logging in for 5 minutes after 5 failed attempts

Use the following properties to change the login attempt settings

Property
Description

ban-max-invalid-attempts

The number of invalid attempts before a user is locked out

ban-address-duration

The amount of time in seconds a user is locked out for after hitting the invalid attempts limit

ban-max-addresses

The number of addresses that KCM will track to check for invalid attempts. Defaults to 10485760

https://www.keepersecurity.com/start-business-trial.html
follow this quick start guide
Manage integrations with multiple vaults or folders with connection groups
Configure Connections to use Keeper Secrets Manager

Google Workspace

Keeper Connection Manager SAML configuration with Google Workspace

Google Workspace Configuration

The first step regardless of installation method is to configure your SAML 2.0 identity provider using Google Workspace.

(1) Login to Google Workspace at https://admin.google.com****

Visit the Apps > Web and Mobile Apps screen.

(2) Select "Add App" and select "Add Custom SAML App".

Enter an application name and description. You can also upload a Keeper Connection Manager logo. The image logo is here:

3KB
kcm-logo-144-transparent.png
image
Open
KCM Logo

Click Continue.

(3) Download the metadata.xml file

...and then click Continue

Download Metadata

(4) Configure the SAML Settings

Update 3 fields: ACS URL, Entity ID and Name ID format.

  • The ACS URL needs to start with your Keeper Connection Manager domain followed by "/api/ext/saml/callback".

  • The Entity ID is just the Keeper Connection Manager domain.

  • The Name ID format must be EMAIL

Click Continue.

(5) Assign group membership (Optional)

You can now assign Group Membership to the Keeper Connection Manager application, which is optional. If you would like to assign a group, make sure that the "App Attribute" is groups (lowercase). Then click FINISH.

Group membership

Google Group to Keeper Connection Manager Group mapping is through the Group Name. If the Keeper Connection Manager contains a Group that has the name corresponding to the Google Group Name, the user will receive all Keeper connections assigned to that user group.

(6) Enable Access

After creating the SAML app, it is not yet active for all users. To enable access, click on View details and turn the application ON.

Enable User Access
Turn KCM On

The Google Workspace side of the setup is complete. Note if you change anything, you need to re-download a new metadata.xml file.

Next: KCM Configuration

Advanced Linux Install Method

If you have installed Keeper Connection Manager using the advanced linux install method, setting up SAML can be performed following the steps below.

Installing SAML support for Guacamole

Keeper Connection Manager packages Guacamole’s SAML support within the kcm-guacamole-auth-sso-saml package:

$ sudo yum install kcm-guacamole-auth-sso-saml

Connecting Guacamole to SAML

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the SAML installation:

$ sudo vi /etc/guacamole/guacamole.properties

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “SAML-1” and defines the IdP configuration. Uncomment the saml-idp-metadata-url and saml-entity-id property. You'll need to reference the IdP's metadata file and Entity ID.

##
## [SAML-1] Identity provider details
##
## The details of the identity provider (IdP) that Guacamole should use for
## authentication. These properties dictate how Guacamole should communicate
## with the IdP, including the how users should be redirected for
## authentication by the IdP.
##
## The SAML IdP will typically provide this information in advance in the form
## of an XML file. If no such XML file is provided, or if information is
## missing from that XML file, additional properties will need to be specified
## to provide that information.
##
## The key pieces of information required are:
##
##  * The URL of the SAML endpoint used by the IdP.
##  * The "entity ID" that should be used by Guacamole to identify itself with
##    the IdP.
##
## If the SAML IdP provides an XML metadata file, it is unusual for that file
## to not contain both of the above pieces of information.
##
## THIS INFORMATION IS REQUIRED if the SAML extension will be used.
##

saml-idp-metadata-url: file:///etc/guacamole/metadata.xml
saml-entity-id: https://demo3.lurey.com

The second section contains the callback URL that is used by the IdP. This is typically set to the user-facing URL of the Keeper Connection Manager service.

##
## [SAML-2] Guacamole server details
##
## The details of the Guacamole server that should be provided to the SAML IdP
## when authenticating the user. This information defines how the SAML IdP
## should send identity assertions back to the Guacamole server if their
## identity is confirmed.
##
## THIS PROPERTY IS REQUIRED if the SAML extension will be used. It is not
## otherwise possible for Guacamole to know its own public-facing URL,
## particularly in a production deployment that is expected to use SSL
## termination.
##

saml-callback-url: https://demo3.lurey.com

The 4th section contains optional parameters that can be set.

##
## [SAML-4] Request/response compression
##
## Whether compression should be used for requests sent to the SAML IdP, and
## whether compression should be requested for responses from the SAML IdP.
## By default, compression will be used for both requests and responses.
##

#saml-compress-request: true
#saml-compress-response: true

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

$ sudo systemctl restart guacamole

KCM Final Setup

Once you have activated the SAML module, there will be a new "Sign in with SAML" link on the login screen of the application as seen below:

Sign in with SAML Link

When setting up your user identities in the Settings area, if you would like a user to login with SAML / SSO, just leave the "password" field empty.

Creating New Users for SSO Login

If you would like to automatically mapping Group assignments in the identity provider to Keeper Connection Manager Groups, simply create a matching group name with the proper assignments. The name of the Group in Keeper Connection Manager needs to match this identifier exactly in order for the mapping to work.

Group Assignm

Login Screen

Keeper Connection Manager User Guide - Login Screen

About

The login screen is the first screen users see when they access Keeper Connection Manager. Users use a username and password, or SSO credentials to authenticate into the rest of the platform.

Logging In

Username

Users use their username to login to Keeper Connection Manager. This username is set when creating or importing users.

The KCM username is sometimes an email address, but it can be a non-email username as well.

Password

The user's password. Set when creating or importing the user. Passwords can also be reset by users if allowed.

TIP: The Keeper Browser Extension can be used to automatically fill in the Keeper Connection Manager username and password!

Other Login Methods

See the authentication documentation pages for more information about setting up additional login methods such as LDAP, SAML 2.0, and OpenID Connect as well as information on setting up 2FA

Authentication Options

Login Attempt Limits

As of KCM version 2.9.6, KCM can be configured to limit a user's ability to login after multiple consecutive failed login attempts. This blocks brute-force login attacks on KCM instances.

By default KCM will lock a user out of logging in for 5 minutes after 5 failed attempts

This setting can be removed, and the number of attempts before a user is locked out and how long they are locked for can be configured with the following guacamole properties or environment variables (depending on installation method):

Docker Compose Property
Environment Variable
Type
Descriptions

ban-max-invalid-attempts

BAN_MAX_INVALID_ATTEMPTS

number

The number of invalid attempts before a user is locked out

ban-address-duration

BAN_ADDRESS_DURATION

number

The amount of time in seconds a user is locked out for after hitting the invalid attempts limit

ban-max-addresses

BAN_MAX_ADDRESSES

number

The number of addresses that KCM will track to check for invalid attempts. Defaults to 10485760

Test Your Installation

Testing Basic Functionality with "user-mapping.xml"

Apache Guacamole comes with a built-in, simplified, XML-driven authentication mechanism for the sake of testing. Accounts and connections can be defined within /etc/guacamole/user-mapping.xml without having to install support for a database. The default file included with Keeper Connection Manager looks like this:

As noted at the top of the file, you can leverage this to verify that your Guacamole installation is functional, however the user-mapping.xml file should not be used for production deployments. Production deployments of Guacamole should instead use one of the authentication extensions, such as the database support or LDAP. Unlike the XML, all of these extensions are intended for production use.

Format of user-mapping.xml

The user-mapping.xml file consists of a main, root-level <user-mapping> element:

Defining user accounts

This <user-mapping> element may contain any number of <authorize> blocks, each describing a user and their corresponding password:

Granting access to connections

The <authorize> blocks in turn may contain any number of <connection> blocks, each describing a connection that should be accessible to the user:

This file is automatically reread when modified, so you should be able to immediately log in when you define a new user in this way, however changes to an active user’s connections will not be available to that user until they logout.

Defining connections (protocols and parameters)

Each <connection> contains exactly one <protocol> element (specifying the unique name of the protocol to use to connect to the remote desktop) and any number of <param> elements (specifying the name of a parameter and the value to use for that connection). These protocol and parameter names are standardized and case-sensitive. The names of each are defined by Guacamole, and the names of available parameters are defined by the part of Guacamole implementing that support:

Protocol
Unique name
Keeper Connection Manager package

The names of many parameters are predictable and common across the supported protocols, like "hostname" and "port", but please consult the for a full list of available parameters and their allowed values, as well as which parameters are absolutely required.

When ready to move to a production deployment leveraging a database, protocol and parameter names will be handled automatically by the web interface enabled by the database. The internal names of protocols and their parameters are mainly useful for authentication methods that require connections to be entered manually (user-mapping.xml, , or custom extensions leveraging the Guacamole API). They are not visible when using one of the database authentication backends except if manually manipulating data within the database using SQL.

Moving to production

When finished testing, you should prepare to move forward with adding the remaining layers normally required by a production deployment:

  1. A supported database: , , and are supported. If you do not already have a database deployed, or are unfamiliar with deploying databases, instructions are provided for.

  2. SSL termination: and are supported for this purpose. If you do not already have a reverse proxy in place, or are unfamiliar with installing and configuring a reverse proxy, instructions are provided for

Updating From 1.x

Upgrading from older versions

Keeper Connection Manager was previously Glyptodon Enterprise prior to version 2.8

Before proceeding with upgrading a Glyptodon 1.x installation to Glyptodon 2.x or Keeper Connection Manager (v2.8+), be sure to consider the following changes which may affect compatibility:

  • The default security mode for RDP connections is now "any" (negotiation). This should make configuring new connections more straightforward, but may cause problems for connections that expect legacy RDP encryption and a graphical login screen to be used by default.

  • Connections to the consoles of Hyper-V VMs through Hyper-V's built-in RDP server now need to specify the "vmconnect" security mode. RDP connections to the consoles of Hyper-V VMs will not work without this security mode specified.

  • The base API version of Keeper Connection Manager 2.x is 1.1.0. This version of the API is incompatible with the base API version of Keeper Connection Manager 1.x (0.9.12-incubating). If you have custom or third-party extensions which have been written for Keeper Connection Manager 1.x or Apache Guacamole 0.9.12-incubating, they will need to be updated to use the Apache Guacamole 1.1.0 API before they will work.

The update process should be also planned for a time that the service can safely be taken down, ideally a scheduled maintenance window. This is because upgrading between major releases always requires that both Tomcat and guacd are offline during the upgrade.

Process overview

Updating an installation of Glyptodon from the 1.x major release to the 2.x major release or to Keeper Connection Manager (releases of version 2.8 and greater) is slightly more complex than simply and will involve the following steps:

  1. (rather than 1.x)

  2. (it may not automatically recognize the new guacamole.war as new)

  3. If you are using a database:

  4. If using SSL termination:

Stop Tomcat and guacd

Before upgrading the Glyptodon Enterprise packages, both Tomcat and guacd must be taken offline. By definition, the components of different major releases are incompatible with each other, and these components will be replaced during the upgrade process. It is not safe to perform a major release upgrade while components of Guacamole are running.

Update the .repo file within /etc/yum.repos.d

Each major release of Keeper Connection Manager is located within its own, isolated repository. To upgrade to a major release after 1.X, remove the current .repo file and use the following command to automatically create an updated version:

Alternatively the .repo file can be updated manually. To do this, use a text editor to replace the contents of your old .repo file within /etc/yum.repos.d:

The only difference between the 1.x and 2.x files is in the baseurl, with the relevant part of the base URL changing from "release/1/" to "kcm/2/". Once updated, your .repo file should ultimately look like:

Apply updates using yum

Once the .repo file has been updated to point to the Glyptodon Enterprise 2.x repository, the software components can be upgraded to their 2.x versions by simply running yum upgrade:

As mentioned above, be sure that Tomcat and guacd are both stopped prior to running yum upgrade. If you encounter errors during the upgrade process, double-check that both Tomcat and guacd have indeed been stopped, and re-run the yum upgrade command.

Force Tomcat to redeploy Guacamole

Tomcat may not automatically recognize that the new guacamole.war is indeed new, and may continue to use its cached copy of the older version. To ensure that the new version of Guacamole is deployed, you should remove the directory created by Tomcat when it originally deployed guacamole.war, thus forcing Tomcat to redeploy the .war during startup:

Apply database schema changes

If using MySQL, MariaDB, or PostgreSQL for connection storage and/or authentication, the database schema of your existing database will be that of Apache Guacamole 0.9.12-incubating. It will need to be brought up-to-date with the base version of Apache Guacamole provided by Glyptodon Enterprise 2.x by running the appropriate SQL script against the database in question:

Database
Upgrade SQL script

If using PostgreSQL, you will additionally need to to ensure the Guacamole database user has sufficient permissions to execute queries against new tables and sequences, as PostgreSQL does not automatically extend the permissions already granted when new tables/sequences are created.

Where "guacamole_db" is the name of your Guacamole database:

If using MySQL or MariaDB, the permissions granted during original setup of the Guacamole database will automatically extend to new tables. You do not need to re-run the permission grants.

Where "guacamole_db" is the name of your Guacamole database:

If using PostgreSQL, the permissions granted during original setup of the Guacamole database will not automatically extend to new tables and sequences added through the upgrade script. You will need to to ensure the Guacamole database user has sufficient permissions to execute queries against the new tables:

Update server.xml to trust "X-Forwarded-For" from known proxies

From Apache Guacamole 1.0.0 onward, . This includes Glyptodon Enterprise 2.x, which is based off Apache Guacamole 1.1.0. If you are using a reverse proxy like or for SSL termination, you will need to add a "" entry to /etc/tomcat/server.xml.

The easiest way to add the required entry is to copy the example server.xml file provided with the kcm-guacamole package, replacing the old /etc/tomcat/server.xml:

The example server.xml file defines:

  • A single HTTP connector listening on port 8080.

  • A RemoteIpValve with all settings at their default values.

By default, the RemoteIpValve will trust "X-Forwarded-For" from all private networks (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and both IPv4 and IPv6 localhost). If you need this range to be narrowed, or if you have already made manual edits to server.xml, you will need to make these changes manually.

If editing server.xml manually (rather than using the example server.xml), a <Valve> which trusts "X-Forwarded-For" from most common private addresses would be specified as:

This <Valve> must be added within the relevant <Host> section. In most cases, the easiest place to add this is simply toward the end of the server.xml file:

If needed, this can be narrowed by providing your own value for the internalProxies attribute specifies a regular expression which matches the IP addresses of any proxies whose "X-Forwarded-For" headers should be trusted. For example, to trust only "X-Forwarded-For" received from localhost:

Start Tomcat and guacd

After yum upgrade completes, and any needed changes to the database and Tomcat's server.xml have been made, the system has been updated and it is safe to start Tomcat and guacd back up:

Your Keeper Connection Manager installation should now be working and up-to-date with the 2.x release.

Microsoft Azure

Keeper Connection Manager SAML configuration with Microsoft Azure

Azure Configuration

The first step regardless of installation method is to configure your SAML 2.0 identity provider using Microsoft Azure.

(1) In Azure, go to Enterprise Applications and Create a new application.

(2) Give the Enterprise Application a name, and then select "non-gallery" application.

(3) Set up Single Sign On with SAML.

(4) Configure for SAML

(5) Set up the SAML properties to point Azure to your Keeper Connection Manager installation URL:

(6) To support Azure Group to Keeper Connection Manager User Group mappings, you can add a Group claim by editing the Attributes & Claims then adding a Group Claim.

When prompted, you can decide whether the group claim is always sent, or only for specific groups or assigned users.

Azure Group to Keeper Connection Manager Group mapping is through the Group GUID. If the Keeper Connection Manager contains a Group that has the name corresponding to the Azure Group GUID, the user will receive all connections assigned to that user group.

(7) Assign users and/or groups to the Keeper Connection Manager application, as you would normally do with any SAML connected app.

(8) Download the Azure Metadata file and save to your local machine as metadata.xml

The Azure side of the setup is complete. Note if you change anything, you need to re-download a new metadata.xml file.

(9) Add the KCM Logo

From the "Properties" screen of the Enterprise Application, upload the KCM logo. The file can be downloaded below.

Here's how the logo will look:

Next: KCM Configuration

Advanced Linux Install Method

If you have installed Keeper Connection Manager using the advanced linux install method, setting up SAML can be performed following the steps below.

Installing SAML support for Guacamole

Keeper Connection Manager packages Guacamole’s SAML support within the kcm-guacamole-auth-sso-saml package:

Connecting Guacamole to SAML

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the SAML installation:

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “SAML-1” and defines the IdP configuration. Uncomment the saml-idp-metadata-url and saml-entity-id property. You'll need to reference the IdP's metadata file and Entity ID.

The second section contains the callback URL that is used by the IdP. This is typically set to the user-facing URL of the Keeper Connection Manager service.

The 3rd section contains the SAML group attribute that can be used for mapping IdP Groups to Keeper Connection Manager Groups. This is useful for assigning permissions to Connections based on a Group attribute from your identity provider. The below example is referencing a Microsoft Azure configuration.

The 4th section contains optional parameters that can be set.

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

KCM Final Setup

Once you have activated the SAML module, there will be a new "Sign in with SAML" link on the login screen of the application as seen below:

When setting up your user identities in the Settings area, if you would like a user to login with SAML / SSO, just leave the "password" field empty.

If you would like to automatically mapping Group assignments in the identity provider to Keeper Connection Manager Groups, ensure that the saml-group-attribute parameter is defined to match the Identity Provider Group Attribute. The name of the Group in Keeper Connection Manager needs to match this identifier exactly in order for the mapping to work.

If the group name attribute from the identity provider is not easy to read, this may end up requiring you to create Group Names that look like below:

Using Multiple LDAP Servers

If your Active Directory or LDAP deployment spans multiple servers, Guacamole can be configured to use each of your LDAP servers using ldap-servers.yml, a configuration file similar to guacamole.properties and located within /etc/guacamole. When a user authenticates with a Guacamole instance configured to use multiple LDAP servers, each configured LDAP server is tried, in order, until authentication succeeds. Authentication fails only if none of the defined LDAP servers accept the user's provided credentials.

When ldap-servers.yml is used, the values within guacamole.properties still have meaning, but instead serve as defaults for the LDAP servers defined in ldap-servers.yml.

Overview of ldap-servers.yml

The ldap-servers.yml file contains a single YAML list of LDAP servers, with each server definition consisting of a simple list of configuration properties and values. These configuration properties are identical to except that the "ldap-" prefix is omitted.

For example, a simple ldap-servers.yml that defines two LDAP servers that may be used to authenticate users would contain the following:

When a user attempts to log in, Guacamole will attempt to authenticate the user against the first defined LDAP server (server1.example.net). If that fails, Guacamole will proceed with the next (server2.example.net), and so on. Only if authentication fails against all defined LDAP servers will authentication against LDAP fail overall.

Abbreviating common LDAP parameters

Since the only property that varies between the two servers in the above example is the hostname, and since guacamole.properties serves as the source of default values when ldap-servers.yml is used, the configuration details common to all servers would be better specified within guacamole.properties:

The contents of ldap-servers.yml can then be reduced to only the hostnames:

Splitting users across multiple LDAP servers

LDAP servers listed within ldap-servers.yml may optionally be restricted to only certain users with the "match-usernames" option. This option accepts both a single string and an array of strings, where each string is a Perl-compatible regular expression. Additionally, if the regular expression includes a capturing group, the contents of the first capturing group will be used as .

For example, to define two LDAP servers covering distinct domains, splitting usage of those LDAP servers by whether the user enters their username as "DOMAIN1\username" or "DOMAIN2\username", you would edit your ldap-servers.yml to contain something like the following:

Each of the LDAP servers defined above will only be used if their corresponding regular expression matches the username specified by the user. Since each of the regular expressions in the above example define a capturing group around the username component of the "DOMAIN\username" format, that portion of the provided username will be used to determine the user's identity. If a user successfully authenticates as "DOMAIN1\myusername", then:

  • The captured portion ("myusername") will be used to.

  • The captured portion ("myusername") will be used when

If there are multiple username formats that need to be accepted by each LDAP server, multiple regular expressions may be specified. For example, to match both "MYDOMAIN\myusername" and the UPN-style "[email protected]" formats, you would specify:

Static Tokens

Using the integration between Connection Manager and Vault with static field lookups

Static Tokens

Connection Manager supports configuring custom static tokens which can correspond to a specific field of a specific Keeper Vault record contained within the Shared Folder. These static tokens must be specified in either the Docker compose or directly in the guacamole configuration file, depending on the installation method of the platform. In most cases, the Dynamic Tokens are a preferable method of integration.

Auto Docker Install Method

If you installed Keeper Connection Manager using the Auto Docker Install method, you will need to modify the auto-generated Docker Compose file to define your static tokens.

As root, edit the /etc/kcm-setup/docker-compose.yml file.

Edit the "environment" section underneath the "guacamole" docker image. Insert an environmental variable called KSM_TOKEN_MAPPING that includes a multi-line definition of your custom tokens. In the example below, there are 3 custom tokens for specific fields within the Keeper vault shared folder. The token syntax is using .

Once the file changes have been saved, update the containers:

Docker Compose Install Method

Edit your docker-compose.yml file. Look for the "guacamole" docker image and the "environment" section which defines environmental variables.

Insert an environmental variable called KSM_TOKEN_MAPPING that includes a multi-line definition of your custom tokens. In the example below, there are 3 custom tokens for specific fields within the Keeper vault shared folder. The token syntax is using .

Once the file changes have been saved, update the containers:

Advanced Linux Install Method

To configure custom tokens, add this YAML file to your guacamole configuration files: /etc/guacamole/ksm-token-mapping.yml

In this file, create the tokens that you would like to use and identify what secrets each token corresponds to using .

Example mapping file:

Then, restart the guacamole process as you typically would.

Custom Token Usage

When using custom tokens, the records can be setup in any way. Keeper notation in the mapping file can identify any specified field.

The tokens can then be used with the ${XXX} format within the Connection Manager parameters screen. A couple of examples are seen below:

The records must be in the shared folder that your Secrets Manager Application has access to.

TOTP Configuration Properties

Advanced configuration properties for TOTP 2FA

The properties listed here are only applicable if TOTP is being used as an additional authentication factor. Support for TOTP is. If using, support for TOTP is instead configured using environment variables.

TOTP issuer details

A human readable name must be associated with generated keys such that the user enrolling their authentication device will be able to easily distinguish the code they should use for this application vs. the other applications that same authentication device may be used for. This value does not affect the key generated nor handling of received codes; it only serves as a reference for the user.

Property name
Default value
Description

TOTP code generation

Most authentication devices supporting TOTP use 6-digit codes, a code period of 30 seconds, and the SHA-1 hash algorithm. These values are used as the defaults for code generation. If your requirements differ, these default values may be overridden.

Property name
Default value
Description

Installing PostgreSQL for Guacamole Authentication

Instructions for installing PostgreSQL in Guacamole for Authentication

CentOS and RHEL both provide a package for the PostgreSQL database server called "postgresql-server". Installing this package will install a version of PostgreSQL that is . If you do not have an existing database instance or third-party database hosting provider that you would prefer to use, installing a fresh instance of PostgreSQL for use by Guacamole will work nicely:

As with other standard CentOS / RHEL packages providing a service, the PostgreSQL service will not be started by default after the "postgresql-server" package is installed. However, if you attempt to start the PostgreSQL service now, the service will fail to start as PostgreSQL's database has not yet been created and initialized. This must be done manually with the "postgresql-setup" command:

Once the database has been initialized, the service can be safely started and configured to start automatically if the system is rebooted:

Configuring PostgreSQL to accept password authentication locally

If PostgreSQL is installed locally (on the same server as Apache Guacamole), its default configuration will prevent Guacamole from authenticating. This is because PostgreSQL can be configured to use different authentication mechanisms for connections coming from different networks or addresses, and the default configuration uses "ident" authentication for connections from the local machine. The "ident" method is incompatible with providing a database username and password via TCP, which will result in Guacamole being unable to connect to PostgreSQL.

Edit PostgreSQL's main configuration file, /var/lib/pgsql/data/pg_hba.conf, looking for the lines which associate IPv4 or IPv6 loopback addresses with "ident":

The keyword ident should be changed to md5 to allow username/password authentication for local connections:

PostgreSQL will then need to be restarted to apply these changes:

Pointing Guacamole at the new PostgreSQL instance

Once PostgreSQL has been deployed, you should move forward with This process is documented in its entirety, and the default /etc/guacamole/guacamole.properties file also contains placeholders and comments to help guide administrators to the correct configuration properties. Overall, the process will involve:

  • Installing the package providing PostgreSQL support (kcm-guacamole-auth-jdbc-postgresql).

  • Creating a new database within your PostgreSQL instance using the provided schema files.

  • Creating a database user that Guacamole can use to execute queries against your database.

  • Editing /etc/guacamole/guacamole.properties to point Guacamole at your database (and to specify the credentials of the database user it should use).

<?xml version="1.0" encoding="UTF-8"?>
<!--

  user-mapping.xml:

      Configuration file for Apache Guacamole's built-in, XML-based
      authentication scheme.

  WARNING: user-mapping.xml is meant to provide an easy means of verifying an
  Apache Guacamole install. Production deployments of Guacamole should switch
  to one of the database authentication methods or LDAP when possible.

  Keeper Connection Manager provides packages for these authentication methods,
  which are intended for production use:

      - kcm-guacamole-auth-jdbc-mysql
      - kcm-guacamole-auth-jdbc-postgresql
      - kcm-guacamole-auth-ldap

  Two-factor authentication using Duo is also supported, and can be layered on
  top of any of the above methods:

      - kcm-guacamole-auth-duo

-->
<user-mapping>
    ...
</user-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<user-mapping>
    ...
</user-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<user-mapping>

    <!-- First user -->
    <authorize username="user1" password="pass1">
    </authorize>

    <!-- Second user -->
    <authorize username="user2" password="pass2">
    </authorize>

</user-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<user-mapping>

    <!-- First user -->
    <authorize username="user1" password="pass1">

        <connection name="Example VNC connection">
            <protocol>vnc</protocol>
            <param name="hostname">localhost</param>
            <param name="port">5901</param>
            <param name="password">VNCPASS</param>
        </connection>

    </authorize>

    <!-- Second user -->
    <authorize username="user2" password="pass2">

        <connection name="Example VNC connection">
            <protocol>vnc</protocol>
            <param name="hostname">localhost</param>
            <param name="port">5901</param>
            <param name="password">VNCPASS</param>
        </connection>

        <connection name="Example RDP connection">
            <protocol>rdp</protocol>
            <param name="hostname">otherhost</param>
            <param name="username">RDPUSER</param>
            <param name="password">RDPPASS</param>
        </connection>

    </authorize>

</user-mapping>

VNC

vnc

kcm-libguac-client-vnc

RDP

rdp

kcm-libguac-client-rdp

SSH

ssh

kcm-libguac-client-ssh

Telnet

telnet

kcm-libguac-client-telnet

Kubernetes

kubernetes

kcm-libguac-client-kubernetes

MySQL

mysql

kcm-libguac-client-mysql

supported protocol
documentation for the relevant protocol
encrypted JSON
connections defined directly within an LDAP directory,
MySQL / MariaDB
PostgreSQL
SQL Server
installing a local instance of MariaDB
Apache HTTPD
Nginx
installing Nginx to provide SSL termination.
$ sudo systemctl stop tomcat guacd
sudo yum install "https://keepersecurity.com/kcm/2/`rpm -E%{suffix:%dist}`/kcm-release.rpm"
$ sudo vi /etc/yum.repos.d/kcm.repo
[kcm]
name=Keeper Connection Manager 2.x
baseurl=https://keepersecurity.com/kcm/2/el/$releasever/$basearch/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://keepersecurity.com/kcm/RPM-GPG-KEY-kcm-release
$ sudo yum upgrade "kcm-*"
$ sudo rm -r /var/lib/tomcat/webapps/guacamole/

MySQL / MariaDB

/opt/keeper/share/guacamole-auth-jdbc-mysql/schema/upgrade/upgrade-GLEN-1.x.sql

PostgreSQL

/opt/keeper/share/guacamole-auth-jdbc-postgresql/schema/upgrade/upgrade-GLEN-1.x.sql

$ mysql -u root -p guacamole_db < /opt/keeper/share/guacamole-auth-jdbc-mysql/schema/upgrade/upgrade-GLEN-1.x.sql
$ psql -d guacamole_db -f /opt/keeper/share/guacamole-auth-jdbc-postgresql/schema/upgrade/upgrade-GLEN-1.x.sql
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user;
GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user;
$ sudo cp /opt/keeper/share/guacamole/server.xml /etc/tomcat/
<Valve className="org.apache.catalina.valves.RemoteIpValve"/>
        ...

        <Valve className="org.apache.catalina.valves.RemoteIpValve"/>

      </Host>
    </Engine>
  </Service>
</Server>
<Valve className="org.apache.catalina.valves.RemoteIpValve"
       internalProxies="127\.\d{1,3}\.\d{1,3}\.\d{1,3}|0:0:0:0:0:0:0:1|::1"/>
$ sudo systemctl start tomcat guacd
updating between minor releases
Stop Tomcat and guacd services
Update your .repo file to point to the 2.x release
Update your installed packages using yum upgrade
Force Tomcat to redeploy Guacamole
Update your database schema
Update Tomcat's server.xml to trust "X-Forwarded-For" from your proxy
Start Tomcat and guacd services
re-run the permission grants
re-run the permission grants
logging of client IP addresses now relies on Tomcat configuration to determine whether the "X-Forwarded-For" header can be trusted
Nginx
Apache
RemoteIpValve
- hostname: server1.example.net
  user-base-dn: OU=Users,DC=example,DC=net
  username-attribute: sAMAccountName
  search-bind-dn: CN=Guacamole,OU=Services,DC=example,DC=net
  search-bind-password: SomePassword!

- hostname: server2.example.net
  user-base-dn: OU=Users,DC=example,DC=net
  username-attribute: sAMAccountName
  search-bind-dn: CN=Guacamole,OU=Services,DC=example,DC=net
  search-bind-password: SomePassword! 
ldap-user-base-dn: OU=Users,DC=example,DC=net
ldap-username-attribute: sAMAccountName
ldap-search-bind-dn: CN=Guacamole,OU=Services,DC=example,DC=net
ldap-search-bind-password: SomePassword!
- hostname: server1.example.net
- hostname: server2.example.net
- hostname: domain1.example.net
  user-base-dn: OU=Users,DC=domain1,DC=example,DC=net
  match-usernames: DOMAIN1\\(.*)

- hostname: domain2.example.net
  user-base-dn: OU=Users,DC=domain2,DC=example,DC=net
  match-usernames: DOMAIN2\\(.*)
- hostname: domain1.example.net
  user-base-dn: OU=Users,DC=domain1,DC=example,DC=net
  match-usernames:
    - DOMAIN1\\(.*)
    - (.*)@domain1\.example\.net

- hostname: domain2.example.net
  user-base-dn: OU=Users,DC=domain2,DC=example,DC=net
  match-usernames:
    - DOMAIN2\\(.*)
    - (.*)@domain2\.example\.net
the LDAP properties available within guacamole.properties
the username representing the user's Guacamole identity
identify the user's corresponding account in Guacamole's database
mapping the user to their fully-qualified LDAP DN.

totp-issuer

Apache Guacamole

The human-readable name of the entity issuing user accounts.

totp-digits

6

The number of digits which should be included in each generated code. TOTP allows for 6-, 7-, or 8-digit codes. Longer or shorter codes than this are not possible as they violate the TOTP standard.

totp-period

30

The duration that each generated code should remain valid, in seconds. The code generation period is given in positive integer seconds and may be any value, however the value should be long enough to allow the user a reasonable amount of time to enter their code. Their authentication device will generate a new code after this period elapses.

totp-mode

sha1

The hash algorithm that should be used to generate codes. Valid TOTP modes (hashes) are:

  • sha1

  • sha256

  • sha512

Before selecting a value which differs from the default (sha1), be sure to verify that your authentication devices support that hash.

installed using thekcm-guacamole-auth-totp package
the keeper/guacamole Docker image
$ sudo yum install postgresql-server
$ sudo postgresql-setup initdb
$ sudo systemctl start postgresql
$ sudo systemctl enable postgresql
host    all     all     127.0.0.1/32    ident
host    all     all     ::1/128         ident
host    all     all     127.0.0.1/32    md5
host    all     all     ::1/128         md5
$ sudo systemctl restart postgresql
explicitly supported by Keeper Connection Manager
configuring Guacamole to use your new PostgreSQL instance.
$ sudo yum install kcm-guacamole-auth-sso-saml
$ sudo vi /etc/guacamole/guacamole.properties
##
## [SAML-1] Identity provider details
##
## The details of the identity provider (IdP) that Guacamole should use for
## authentication. These properties dictate how Guacamole should communicate
## with the IdP, including the how users should be redirected for
## authentication by the IdP.
##
## The SAML IdP will typically provide this information in advance in the form
## of an XML file. If no such XML file is provided, or if information is
## missing from that XML file, additional properties will need to be specified
## to provide that information.
##
## The key pieces of information required are:
##
##  * The URL of the SAML endpoint used by the IdP.
##  * The "entity ID" that should be used by Guacamole to identify itself with
##    the IdP.
##
## If the SAML IdP provides an XML metadata file, it is unusual for that file
## to not contain both of the above pieces of information.
##
## THIS INFORMATION IS REQUIRED if the SAML extension will be used.
##

saml-idp-metadata-url: file:///etc/guacamole/metadata.xml
saml-entity-id: https://glyptodon.mycompany.com
##
## [SAML-2] Guacamole server details
##
## The details of the Guacamole server that should be provided to the SAML IdP
## when authenticating the user. This information defines how the SAML IdP
## should send identity assertions back to the Guacamole server if their
## identity is confirmed.
##
## THIS PROPERTY IS REQUIRED if the SAML extension will be used. It is not
## otherwise possible for Guacamole to know its own public-facing URL,
## particularly in a production deployment that is expected to use SSL
## termination.
##

saml-callback-url: https://glyptodon.mycompany.com
##
## [SAML-3] Identity mapping
##
## How identity assertions received form the SAML IdP should be mapped back to
## user and group identities. The mapping for user identities is already known
## by the SAML standard, but the mapping for user groups can vary. If your SAML
## IdP provides user group information in addition to user identities, the
## attribute used by your SAML IdP to define those groups within assertions
## should be provided here.
##

saml-group-attribute: http://schemas.microsoft.com/ws/2008/06/identity/claims/groups
##
## [SAML-4] Request/response compression
##
## Whether compression should be used for requests sent to the SAML IdP, and
## whether compression should be requested for responses from the SAML IdP.
## By default, compression will be used for both requests and responses.
##

#saml-compress-request: true
#saml-compress-response: true
$ sudo systemctl restart guacamole
3KB
kcm-logo-100x100.png
image
Open
KCM Logo 100x100
Add a Group Claim
Claims
Assign Users and Groups
Sign in with SAML Link
Creating New Users for SSO Login
Group Names from the IdP Group Attributes
    guacamole:
        image: xxx
        restart: unless-stopped
        volumes:
            - common-storage:/var/lib/guacamole
        environment:
            ACCEPT_EULA: "Y"
            GUACD_HOSTNAME: "guacd"
            MYSQL_HOSTNAME: "db"
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            MYSQL_PASSWORD: "xxxxxxx"
            KSM_CONFIG: "xxxxxxx"
            KSM_TOKEN_MAPPING: |
                MY_CUSTOM_SECRET: keeper://cps2OgKHpFQ8Ye30L9587w/field/password
                MY_OTHER_CUSTOM_SECRET: keeper://sS6jDVv0HoM0yGMU4OaOAw/file/linuxssoconnect.pem
                RDP_INITIAL_PROGRAM: keeper://cps2OgKHpFQ8Ye30L9587w/custom_field/program
$ sudo ./kcm.run upgrade
    guacamole:
        image: xxx
        environment:
            ACCEPT_EULA: "Y"
            GUACD_HOSTNAME: "guacd"
            MYSQL_HOSTNAME: "db"
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            MYSQL_PASSWORD: "xxxxxxx"
            KSM_CONFIG: "xxx"
            KSM_TOKEN_MAPPING: |
                MY_CUSTOM_SECRET: keeper://cps2OgKHpFQ8Ye30L9587w/field/password
                MY_OTHER_CUSTOM_SECRET: keeper://sS6jDVv0HoM0yGMU4OaOAw/file/linuxssoconnect.pem
                RDP_INITIAL_PROGRAM: keeper://cps2OgKHpFQ8Ye30L9587w/custom_field/program
sudo su
docker-compose up -d
ksm-token-mapping.yml
MY_CUSTOM_SECRET: keeper://cps2OgKHpFQ8Ye30L9587w/field/password
MY_OTHER_CUSTOM_SECRET: keeper://sS6jDVv0HoM0yGMU4OaOAw/file/linuxssoconnect.pem
RDP_INITIAL_PROGRAM: keeper://cps2OgKHpFQ8Ye30L9587w/custom_field/program
$ sudo systemctl restart guacamole
Keeper Notation
Keeper Notation
Keeper Notation
Example of Custom Tokens
Example of Custom Tokens

LDAP Auth Config

Instructions for authenticating users with LDAP

This documentation assumes that you already have access to an LDAP directory, such as OpenLDAP or Active Directory, and that Guacamole has already been installed using Keeper Connection Manager. If you do not already an LDAP directory ready, please set up LDAP before proceeding. If you do not already have Guacamole installed, please see the installation instructions.

This section covers configuring Guacamole to authenticate against a _single_** LDAP server using guacamole.properties.** If planning to use multiple LDAP servers, we highly recommend configuring Guacamole to authenticate against a single LDAP server first, and then migrating to a multi-server configuration once your first LDAP server has been confirmed to be configured correctly. This avoids introducing unnecessary variables too early in the deployment process.

If you will be configuring multiple LDAP servers, please see the instructions covering the ldap-servers.yml configuration file. The configuration options available within ldap-servers.yml are very similar to those documented below except that the YAML format is flexible enough to allow multiple servers to be defined.

Advanced Linux Install Method

Installing LDAP support for Guacamole

Keeper Connection Manager packages Guacamole’s LDAP support within the kcm-guacamole-auth-ldap package:

$ sudo yum install kcm-guacamole-auth-ldap

Unlike the MySQL, PostgreSQL, SQL Server and authentication backends, Guacamole’s LDAP support does not require a schema to be applied unless you intend to store connection data within your LDAP directory. If LDAP will be used only to authenticate Guacamole users, no schema modifications need be made, and a database should be used to store connection data.

If you do intend to store connection data within your LDAP directory, you will need to apply the provided schema modifications which create the guacConfigGroup object class. Be sure to first finish configuring Guacamole for LDAP authentication, and verify that Guacamole can successfully authenticate users against your LDAP directory.

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the LDAP directory:

$ sudo vi /etc/guacamole/guacamole.properties

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “LDAP-1” and defines the TCP connection information for the LDAP directory. Uncomment the ldap-hostname property, modifying its value to point to your LDAP server:

##
## [LDAP-1] LDAP TCP connection information
##
## The TCP connection details of the LDAP server, as well as whether encryption
## should be used.
##
## Legal encryption methods are "none", for unencrypted connections, "ssl" 
## for LDAP over SSL/TLS (also known as LDAPS), or "starttls" for STARTTLS.
##

#ldap-hostname:          localhost
#ldap-port:              389
#ldap-encryption-method: none

By default, Guacamole will connect to your LDAP server without encryption. If your LDAP server uses encryption, you will need to uncomment and set the ldap-encryption-method property to “ssl” for LDAPS (LDAP over SSL/TLS) or “starttls” for STARTTLS.

The default port varies by encryption method, and will be 389 for unencrypted LDAP and STARTTLS, or 636 for LDAPS. If your LDAP server listens on a non-standard port, you will also need to uncomment and modify the ldap-port property.

Mapping Guacamole usernames to LDAP DN’s

To authenticate users using LDAP, Guacamole must translate usernames into their corresponding LDAP DN’s. Depending on the complexity of your LDAP directory, this can be as simple as adding a single attribute to a common base DN, or can involve an LDAP query.

The “LDAP-2” section defines the basic parameters required for either case:

##
## [LDAP-2] LDAP user / user DN description
##
## The base DN of all Guacamole users within the LDAP directory, and the
## attribute which contains each user's username. If the username attribute
## is not part of the DN, a seach DN will need to be provided, as well.
##

#ldap-user-base-dn:       ou=people,dc=example,dc=net
#ldap-username-attribute: uid

The base DN defined by the ldap-user-base-dn property should be the common base shared by all Guacamole users within your LDAP directory, while the attribute which contains the user’s username is defined by ldap-username-attribute. The base DN is always required if LDAP is being used.

Direct username mapping

By default, Guacamole will attempt to derive the user’s DN directly by prepending the username attribute to the base DN. For example, assume a user is attempting to login with the username “someUser”. If the base DN is “ou=people,dc=example,dc=net” and the username attribute is “uid” (the default), then Guacamole will perform the following steps to authenticate the user:

  1. Prepend the username to the base DN using the “uid” attribute, producing the DN: “uid=someUser,ou=people,dc=example,dc=net”.

  2. Attempt to bind using the DN “uid=someUser,ou=people,dc=example,dc=net” and the password provided by the user.

  3. If the bind attempt succeeds, authentication is successful.

Indirect username mapping

For more complex cases, where the user DN is cannot be directly derived by prepending the username attribute, Guacamole can instead issue an LDAP query to determine the user DN. This requires a search DN and password, defined with the ldap-search-bind-dn and ldap-search-bind-password properties respectively, which Guacamole will bind as when performing the query:

##
## [LDAP-3] LDAP user search DN
##
## The DN and password of the user to bind as when searching for the DN of each
## user attempting to log in. If omitted, the DN of each user will be derived
## directly using the user base DN and username attribute.
##

#ldap-search-bind-dn:       cn=someUser,ou=people,dc=example,dc=net
#ldap-search-bind-password: some_password

With the search DN and password configured, Guacamole will perform the following steps to authenticate a user:

  1. Bind to the LDAP directory using the search DN and password.

  2. Issue an LDAP query for objects within the subtree of the base DN that contain the user’s username within the defined username attribute.

  3. If exactly one such object is found, attempt to bind using the DN of that object and the password provided by the user.

  4. If the bind attempt succeeds, authentication is successful.

Mapping Guacamole groups to LDAP DN’s

Access to connections within Guacamole may be dictated through LDAP user groups via either of two mechanisms:

  1. Defining connections directly within LDAP using schema modifications and dictating group access using the "seeAlso" attribute.

  2. Mapping LDAP groups to Guacamole groups and leveraging a database to dictate access.

As it is usually preferable to avoid modifying the LDAP schema, mapping LDAP groups to Guacamole groups is recommended. Doing this will require defining the base DN under which all relevant LDAP groups may be found and defining the LDAP attribute that should be used by Guacamole to determine the unique name of the group:

##
## [LDAP-5] LDAP group / group DN description
##
## The base DN of all Guacamole groups within the LDAP directory, and the
## attribute which should be used by Guacamole to uniquely identify the
## group.
##
## If connections are being stored within LDAP using "guacConfigGroup" objects,
## and you wish to control access to these connections via LDAP groups, this is
## accomplished using the standard "seeAlso" attribute and the
## ldap-group-base-dn property is required.
##
## If connections are being stored outside of LDAP, such as within a database,
## and you wish to control access using LDAP groups, both ldap-group-base-dn
## and ldap-group-name-attribute will be required. The group membership of a
## user cannot be queried without a base DN, and the unique name to be used by
## other parts of Guacamole to represent the group cannot be determined without
## the name attribute.
##

#ldap-group-base-dn:        ou=groups,dc=example,dc=net
#ldap-group-name-attribute: cn

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

$ sudo systemctl restart guacamole

Custom Root Certificate

If you require the use of a custom Root Certificate for your LDAP server, you can volume mount the file /etc/pki/ca-trust/extracted/java/cacerts in your Docker Compose to override this certificate in the guacamole docker container.

  • Import the certificate into a Java truststore using "keytool".

  • Volume mount the cacerts file to your target guacamole docker container

For Advanced Linux Install method leveraging the RPMs, this would be accomplished through Red Hat's automated certificate import tooling following this guide.

guacd.conf

Advanced configuration for the Guacd service

/etc/guacamole/guacd.conf is the configuration file for Apache Guacamole's proxy daemon, guacd. Editing this file is not normally required unless the circumstances of your deployment require internal communications to be encrypted (not just public-facing communication), the guacd service needs to listen on an external interface or non-standard port, or you need to increase logging verbosity to assist with debugging unexpected behavior.

The guacd.conf file is read only during service startup, and changes to guacd.conf will take effect only after restarting the guacd service.

Organization and general syntax

The guacd.conf file is organized within three distinct sections, each section having special meaning to guacd and containing only parameters specific to that section:

  • "server" - Parameters for configuring the hostname/address and port used by guacd.

  • "daemon" - Parameters for configuring the behavior of the guacd daemon, in particular logging level.

  • "ssl" - Parameters for configuring SSL/TLS encryption of the internal communication between the web application and guacd.

The beginning of each section is denoted with a section name in brackets, and each section ends implicitly with the beginning of a new section, or at the end of the file.

Parameters names and values

Parameters within sections are written as a parameter name, followed by an equals sign, followed by the parameter value, all on one line.

name = value

If special characters need to be placed within a parameter value, such as whitespace, #, ", or \, the entire value must be enclosed in double quotes, and each occurrence of " or \ within the value must be escaped with backslashes:

name = "quoted # value \\ with \" special characters"

Comments

Comments may be placed anywhere, including at the end of a parameter, and consist of arbitrary text following a # symbol until end-of-line:

# Arbitrary comment
name = value # Another arbitrary comment

Server parameters

The parameters within the "server" section define the hostname/address and port that the guacd service should listen on. By default, the guacd service will listen at port 4822 on localhost, and thus will accept connections from a local instance of Guacamole only. If these values are changed, the Guacamole web application will need to be reconfigured to match by editing /etc/guacamole/guacamole.properties.

Parameter name
Default value
Description

bind_host

localhost

The hostname or IP address that the guacd service should listen on.

bind_port

4822

The TCP port that the guacd service should listen on.

Daemon parameters

The parameters within the "daemon" section control how guacd operates as a daemon, in particular the level at which messages should be logged. Greater logging verbosity may be desired if unexpected behavior is encountered.

Parameter name
Default value
Description

log_level

info

The log level that guacd should use when logging messages. In order of increasing verbosity, possible values are:

  • error

  • warning

  • info

  • debug

SSL/TLS parameters

guacd can be configured to communicate with the web application using SSL/TLS. If a certificate and key are specified, guacd will require SSL/TLS for all connections from the web application, and the web application will need to be reconfigured to match by editing /etc/guacamole/guacamole.properties. If the certificate cannot be verified by Java against well-known CA certificates, the certificate will also need to be added to Java's truststore.

By default, internal communication between guacd and the web application is not encrypted.

This DOES NOT affect whether communication between a user's browser and the web application is encrypted. This affects only the internal network communication between the web application and guacd. You DO NOT need to set these values to enable SSL/TLS on the public-facing side of Apache Guacamole.

To encrypt all communication between your users and your Apache Guacamole deployment, look instead at configuring SSL termination.

Parameter name
Default value
Description

server_certificate

N/A

The full, absolute path to the PEM certificate that guacd should use to communicate with the web application.

server_key

N/A

The full, absolute path to the PEM private key that guacd should use to communicate with the web application.

SAML 2.0 Authentication Configuration Properties

Advanced configuration properties for SAML 2.0 SSO

The properties listed here are only applicable if SAML 2.0 authentication is being used. Support for SAML 2.0 authentication is installed using the kcm-guacamole-auth-saml package or enabled with the Docker installation. If using the keeper/guacamole Docker image, support for SAML 2.0 authentication is configured using environment variables.

SAML 2.0 Configuration Properties

Property name
Description

saml-idp-metadata-url

The URI of the XML metadata file that from the SAML Identity Provider that contains all of the information the SAML extension needs in order to know how to authenticate with the IdP. This URI can either be a remote server (e.g. https://) or a local file on the filesystem (e.g. file://). Often the metadata file contains most of the required properties for SAML authentication and the other parameters are not required.

saml-idp-url

The base URL of the SAML IdP. This is the URL that the SAML authentication extension will use to redirect when requesting SAML authentication. If the saml-idp-metadata-url property is provided, this parameter will be ignored. If the metadata file is not provided this property is required.

saml-entity-id

The entity ID of the Keeper Connection Manager SAML client, which is generally the URL of the Keeper Connection Manager server, but is not required to be so. This property is required if either the saml-idp-metadata-url property is not specified, or if the provided metadata file does not contain the SAML SP Entity ID for the Keeper Connection Manager Client.

saml-callback-url

The URL that the IdP will use once authentication has succeeded to return to the Keeper Connection Manager web application and provide the authentication details to the SAML extension. The SAML extension currently only supports callback as a POST operation to this callback URL. This property is required.

saml-strict

Require strict security checks during SAML logins. This will insure that valid certificates are present for all interactions with SAML servers and fail SAML authentication if security restrictions are violated. This property is optional, and will default to true, requiring strict security checks. This property should only be set to false in non-production environments during testing of SAML authentication.

saml-debug

Enable additional logging within the supporting SAML library that can assist in tracking down issues during SAML logins. This property is optional, and will default to false (no debugging).

saml-compress-request

Enable compression of the HTTP requests sent to the SAML IdP. This property is optional and will default to true (compression enabled).

saml-compress-response

Request that the SAML response returned by the IdP be compressed. This property is optional and will default to "true" (compression will be requested).

saml-group-attribute

The name of the attribute provided by the SAML IdP that contains group membership of the user. These groups will be parsed and used to map group membership of the user logging in, which can be used for permissions management within the Keeper Connection Manager Client, particularly when layered with other authentication modules. This property is optional, and defaults to “groups”.

saml-private-key-path

Path to a private key for use with connecting to an ID Provider which is configured to expect signed requests

saml-x509-cert-path

Path to a certificate used to authenticate to an ID Provider which is configured to expect signed requests

Controlling Login Behavior

Keeper Connection Manager loads authentication extensions in order of priority, and evaluates authentication attempts in this same order. This has implications for how the login process behaves when an SSO extension is present:

If the SSO extension has priority:

Users that are not yet authenticated will be immediately redirected to the configured identity provider. They will not see a Keeper Connection Manager login screen.

If a non-SSO extension has priority:

Users that are not yet authenticated will be presented with a Keeper Connection Manager login screen. Additionally, links to the configured identity provider(s) will be available for users that wish to log in using SSO.

The default priority of extensions is dictated by their filenames, with extensions that sort earlier alphabetically having higher priority than others. This can be overridden by setting the extension-priority property within guacamole.properties.

Automatically redirecting all unauthenticated users

To ensure users are redirected to the SAML identity provider immediately (without a Keeper Connection Manager login screen), ensure the SAML extension has priority over all others:

extension-priority: saml

Presenting unauthenticated users with a login screen

To ensure users are given a normal Keeper Connection Manager login screen and have the option to log in with traditional credentials or with SAML, ensure the SAML extension does not have priority:

extension-priority: *, saml

Credential Pass-Through

Dynamic pass-through tokens

The values of connection parameters can contain "tokens" which will be dynamically replaced by Keeper Connection Manager when used. These tokens allow the values of connection parameters to vary dynamically by the user using the connection, and provide a simple means of forwarding authentication information without storing that information in the connection configuration itself, so long as the remote desktop connection uses the same credentials as Keeper Connection Manager.

Common uses for these tokens include:

  • Automatically authenticating users with their remote desktops by passing through the credentials provided during login. This is typically useful when both Keeper Connection Manager and the remote desktops authenticate against the same, central authority, such as Active Directory or LDAP.

  • Providing remote desktops with the user's IP address or hostname, as may be required for licensing, auditing, or logging.

  • Automatically organizing session recordings using the current date and time.

Each token is of the form ${TOKEN_NAME}, where TOKEN_NAME is some descriptive name for the value the token represents. Tokens with no corresponding value will never be replaced, but should you need such text within your connection parameters, and wish to guarantee that this text will not be replaced with a token value, you can escape the token by adding an additional leading "$", as in "$${TOKEN_NAME}".

These tokens are replaced dynamically each time a connection is used. If two different users access the same connection at the same time, both users will be connected independently of each other using different sets of connection parameters.

Username/password pass-through

When a user authenticates with Keeper Connection Manager, the credentials that they used may be automatically passed through to their connections using the "${GUAC_USERNAME}" and "${GUAC_PASSWORD}" tokens. These may be specified within any connection parameters, including the parameters which specify the username and password to be used to connect to the remote desktop, thus allowing the administrator to explicitly define how and whether user credentials are passed through. Unless these tokens are specified by the administrator, no such pass-through will take place.

Parameter token
Description

${GUAC_USERNAME}

The username provided by the current user when they successfully authenticated for their current Guacamole session.

${GUAC_PASSWORD}

The password provided by the current user when they successfully authenticated for their current Keeper session.

Client hostname/address information

The hostname (if known) or IP address of the machine that the current Keeper user is connecting from may be included within connection parameters using the "${GUAC_CLIENT_HOSTNAME}" and "${GUAC_CLIENT_ADDRESS}" tokens respectively. Note that the client address may not be the true address of the user if they are connecting through one or more proxies, or if they are connecting through a VPN, and there may be no associated hostname for that address.

Parameter token
Description

${GUAC_CLIENT_ADDRESS}

The IPv4 or IPv6 address of the current Guacamole user. This will be the address of the client side of the HTTP connection to the Guacamole server at the time the current user logged in.

${GUAC_CLIENT_HOSTNAME}

The hostname of the current logged-in user. This will be the hostname of the client side of the HTTP connection to the Guacamole server at the time the current user logged in. If no such hostname can be determined, the IPv4 or IPv6 address will be used instead, and this token will be equivalent to ${GUAC_CLIENT_ADDRESS}.

Current date and time

Timestamps representing when the user started the connection may be included within connection parameters using the "${GUAC_DATE}" and "${GUAC_TIME}" tokens. Each of these tokens are replaced by values that consist only of digits. It is common to use these tokens within the parameter specifying the name of the session recording to be created, perhaps together with the "${GUAC_USERNAME}" token, to allow recordings to be given reasonably unique names and to be organized automatically.

For example, if connection were configured to record sessions to files names "${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}.guac", and a user named "someuser" connected to that connection on January 1st, 2020, at exactly midnight, the session recording created would be named "someuser-20200101-000000.guac".

Parameter token
Description

${GUAC_DATE}

The current date in the local time zone of the Guacamole server. This will be written in "YYYYMMDD" format, where "YYYY" is the year, "MM" is the month number, and "DD" is the day of the month, all zero-padded. When a user accesses a connection, this token will be dynamically replaced with the date that the connection began.

${GUAC_TIME}

The current time in the local time zone of the Guacamole server. This will be written in "HHMMSS" format, where "HH" is hours in 24-hour time, "MM" is minutes, and "SS" is seconds, all zero-padded. When a user accesses a connection, this token will be dynamically replaced with the time that the connection began.

Okta

Keeper Connection Manager SAML configuration with Okta

Okta Configuration

The first step regardless of installation method is to configure your SAML 2.0 identity provider using Okta.

(1) In Okta, go to Admin > Applications > Create App Integration and select SAML 2.0. Click Next.

Create a new app integration

(2) Give the Enterprise Application a name and upload the logo file linked below then click Next.

The image logo is here:

7KB
kcm-logo-420x120.png
image
Open

(3) Configure the SAML Settings

The SAML configuration should match the format as seen below:

  • Replace demo3.lurey.com with the URL of your Keeper Connection Manager domain.

  • Ensure the full path appears, e.g. https://DOMAIN/api/ext/saml/callback

  • For the Audience URI, use the path to the Login screen (remove the trailing slash). For example, https://demo3.lurey.com

SAML Settings

Scroll down to the Group Attribute Statements. To send the group attribute, set the name to "groups", and the name format to "Basic". If you would like ALL groups assigned to the user to be sent to Keeper Connection Manager, select the "Matches regex" with a value of ".*"

Click Next.

(4) In the Feedback section, make the selections as appears below.

Okta Group to Keeper Connection Manager Group mapping is through the Group Name. If the Keeper Connection Manager contains a Group that has the name corresponding to the Okta Group Name, the user will receive all Keeper connections assigned to that user group.

(5) Assign users and/or groups to the Keeper Connection Manager application, as you would normally do with any SAML connected app.

Assign Permissions to Keeper Connection Manager

(6) Download the Okta Metadata file and save to your local machine as metadata.xml

The location of the metadata file depends on your version of the Okta interface. In this example there is a link called "Identity Provider metadata" on the application page. There may also be a text box that contains the metadata which you can copy and paste into a local file on your computer.

The metadata XML file could also be linked in the Sign On tab > SAML Signing Certificate section under "Actions".

Save the resulting metadata.xml file by selecting "Save page as..." in your browser.

Save metadata.xml

The Okta side of the setup is complete. Note if you change anything, you need to re-download a new metadata.xml file.

Next: KCM Configuration

Advanced Linux Install Method

If you have installed Keeper Connection Manager using the advanced linux install method, setting up SAML can be performed following the steps below.

Installing SAML support for Guacamole

Keeper Connection Manager packages Guacamole’s SAML support within the kcm-guacamole-auth-sso-saml package:

$ sudo yum install kcm-guacamole-auth-sso-saml

Connecting Guacamole to SAML

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the SAML installation:

$ sudo vi /etc/guacamole/guacamole.properties

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “SAML-1” and defines the IdP configuration. Uncomment the saml-idp-metadata-url and saml-entity-id property. You'll need to reference the IdP's metadata file and Entity ID.

##
## [SAML-1] Identity provider details
##
## The details of the identity provider (IdP) that Guacamole should use for
## authentication. These properties dictate how Guacamole should communicate
## with the IdP, including the how users should be redirected for
## authentication by the IdP.
##
## The SAML IdP will typically provide this information in advance in the form
## of an XML file. If no such XML file is provided, or if information is
## missing from that XML file, additional properties will need to be specified
## to provide that information.
##
## The key pieces of information required are:
##
##  * The URL of the SAML endpoint used by the IdP.
##  * The "entity ID" that should be used by Guacamole to identify itself with
##    the IdP.
##
## If the SAML IdP provides an XML metadata file, it is unusual for that file
## to not contain both of the above pieces of information.
##
## THIS INFORMATION IS REQUIRED if the SAML extension will be used.
##

saml-idp-metadata-url: file:///etc/guacamole/metadata.xml
saml-entity-id: https://demo3.lurey.com

The second section contains the callback URL that is used by the IdP. This is typically set to the user-facing URL of the Keeper Connection Manager service.

##
## [SAML-2] Guacamole server details
##
## The details of the Guacamole server that should be provided to the SAML IdP
## when authenticating the user. This information defines how the SAML IdP
## should send identity assertions back to the Guacamole server if their
## identity is confirmed.
##
## THIS PROPERTY IS REQUIRED if the SAML extension will be used. It is not
## otherwise possible for Guacamole to know its own public-facing URL,
## particularly in a production deployment that is expected to use SSL
## termination.
##

saml-callback-url: https://demo3.lurey.com

The 4th section contains optional parameters that can be set.

##
## [SAML-4] Request/response compression
##
## Whether compression should be used for requests sent to the SAML IdP, and
## whether compression should be requested for responses from the SAML IdP.
## By default, compression will be used for both requests and responses.
##

#saml-compress-request: true
#saml-compress-response: true

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

$ sudo systemctl restart guacamole

KCM Final Setup

Once you have activated the SAML module, there will be a new "Sign in with SAML" link on the login screen of the application as seen below:

Sign in with SAML Link

When setting up your user identities in the Settings area, if you would like a user to login with SAML / SSO, just leave the "password" field empty.

Creating New Users for SSO Login

If you would like to automatically mapping Group assignments in the identity provider to Keeper Connection Manager Groups, simply create a matching group name with the proper assignments. The name of the Group in Keeper Connection Manager needs to match this identifier exactly in order for the mapping to work.

Group Assignment

Advanced

Advanced features of the Keeper Vault integration

Config Parameter Protection

The Keeper Vault can be utilized to protect and store configuration secrets that would normally be hard-coded into the guacamole.properties or Docker Compose file.

Auto Docker Install Method

If you installed Keeper Connection Manager using the Auto Docker Install method, configuration secrets are protected in the auto-generated Docker Compose file.

As root, edit the /etc/kcm-setup/docker-compose.yml file.

For each configuration secret that you want to protect, you can replace the entry with a direct lookup in the Keeper vault. A good example of this is replacing the hard-coded MySQL database password with a vault record.

BEFORE:

MYSQL_HOSTNAME: "db"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USERNAME: "guacamole_user"
MYSQL_PASSWORD: "your_mysql_database_password"

AFTER:

MYSQL_HOSTNAME: "db"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USERNAME: "guacamole_user"
MYSQL_PASSWORD_KSM_SECRET: keeper://2ZlOFQAYi4DubJWBtSbRxw/field/password

The token syntax is using Keeper Notation. The name of the parameter must follow the format of *_KSM_SECRET. In this example, the MySQL database password is pulled directly from a Keeper record in the Shared Folder.

Configuration Storage in the Keeper Vault

The value of each *_KSM_SECRET variable should be the Keeper notation of the secret that should be used to pull the necessary configuration value. For example, if SOME_VARIABLE_KSM_SECRET were set to valid Keeper notation, then the value of the Guacamole property normally associated with SOME_VARIABLE will be pulled from that secret in KSM.

Once the file changes have been saved, update the containers:

$ sudo ./kcm-setup.run upgrade

Docker Compose Install Method

Edit your docker-compose.yml file.

For each configuration secret that you want to protect, you can replace the entry with a direct lookup in the Keeper vault. A good example of this is replacing the hard-coded MySQL database password with a vault record:

MYSQL_HOSTNAME: "db"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USERNAME: "guacamole_user"
MYSQL_PASSWORD_KSM_SECRET: keeper://2ZlOFQAYi4DubJWBtSbRxw/field/password

The token syntax is using Keeper Notation. In this example, the MySQL database password is pulled directly from a Keeper record in the Shared Folder as seen below:

Configuration Storage in the Keeper Vault

The value of each *_KSM_SECRET variable should be the Keeper notation of the secret that should be used to pull the necessary configuration value. For example, if SOME_VARIABLE_KSM_SECRET were set to valid Keeper notation, then the value of the Guacamole property normally associated with SOME_VARIABLE will be pulled from that secret in KSM.

Once the file changes have been saved, update the containers:

sudo su
docker-compose up -d

Advanced Linux Install Method

To utilize Keeper Vault storage of Guacamole properties, create a file guacamole.properties.ksm in the same location as your guacamole.properties file (/etc/guacamole/ by default).

In the new file, add any properties that you would like to store in the Keeper vault, and set the value to a Keeper Notation query of the record field to use for that property. Note that the guacamole.properties file must still contain the ksm-config property to identify the Keeper Secrets Manager configuration.

Example Setup

guacamole.properties:

ksm-config: eyJob3N0bm[...]1IzRTN2UVNTNkhsb0NZQW9nUmlPVlY5cjhvUT0ifQ==

guacamole.properties.ksm:

mysql-hostname: keeper://tqd1F9zHRKokN44Xso8PkQ/field/host[hostname]
mysql-port: keeper://tqd1F9zHRKokN44Xso8PkQ/field/host[port]
mysql-password: keeper://tqd1F9zHRKokN44Xso8PkQ/field/password

The token syntax is using Keeper Notation. In this example, the MySQL database password is pulled directly from a Keeper record with the specified UID tqd1F9zHRKokN44Xso8PkQ.

Then, restart the guacamole process as you typically would.

$ sudo systemctl restart guacamole

The records referenced by token replacement must be in a shared folder that your Secrets Manager Application has access to.

Other configuration options

In docker installations, the parameter ADDITIONAL_GUACAMOLE_PROPERTIES_KSM can be used to move parameters from the guacamole.properties file into guacamole.properties.ksm.

CVE-2021-43999: Improper validation of SAML responses

Severity:

High

CVSS v3.1 base score:

8.7

CVSS v3.1 vector:

Software affected

  • Glyptodon Enterprise 2.6 and older

Description

Apache Guacamole 1.2.0 and 1.3.0 do not properly validate responses received from a SAML identity provider. If SAML support is enabled, this may allow a malicious user to assume the identity of another Guacamole user.

Preconditions for exploitation

  • SAML support for Apache Guacamole is enabled.

Results of a successful attack

  • A malicious user may assume the identity of another existing Guacamole user.

Mitigation

Glyptodon Enterprise 2.x has been patched with respect to this vulnerability. Users should evaluate their exposure/risk based on this advisory and plan to upgrade when possible.

Glyptodon Enterprise 1.x does not have support for SAML available and is not affected.

Analysis and CVSS score breakdown

Metric
Value
Comments

Attack Vector

Network

Exploiting this vulnerability relies only on communicating with the web application through standard mechanisms, as already exposed by Guacamole's web interface.

Attack Complexity

Low

Exploiting this vulnerability requires limited technical ability.

Privileges Required

None

No privileges are required to attempt to exploit this vulnerability.

User Interaction

None

An attacker would require no additional user interaction beyond their own.

Scope

Unchanged

The scope of information obtained does not extend beyond what Guacamole is explicitly designed to provide.

Confidentiality Impact

High

Any information accessible to the user impersonated by the attacker would be accessible.

Integrity

High

Any information writable/modifiable to the user impersonated by the attacker would be accessible.

Availability

None

The availability of Guacamole and all related services are unaffected.

Remediation Level

Official fix available

The upstream Apache Guacamole project has released a fix via their 1.4.0 release, and this fix has been backported to all affected versions of Glyptodon Enterprise.

Report Confidence

Confirmed

Existence of the vulnerability in Apache Guacamole 1.2.0 and 1.3.0 has been acknowledged by the upstream Apache Guacamole project.

Security Advisories

Keeper Connection Manager Security Advisories

Vulnerability Disclosure Program

Keeper has partnered with Bugcrowd to manage our vulnerability disclosure program. Please submit reports through https://bugcrowd.com/keepersecurity or send an email to [email protected].

Severity (CVSS v3.1 score)
CVE ID
Description
Fixed in Keeper Connection Manager (or legacy Glyptodon) Release

Low (1.8)

1.13, 2.1

Medium (5.9)

1.13, 2.1

Medium (4.1)

1.14, 2.2

Medium (4.4)

1.16, 2.6

High (8.7)

2.7

Severity rating scale

Keeper Connection Manager evaluates the factual details of each known vulnerability affecting Keeper Connection Manager and assigns severity ratings using the CVSS v3.1 scoring system, a standard owned by FIRST.Org, Inc. which FIRST has made freely available for public use. This scoring system produces a numeric rating between 0.0 and 10.0, which we then classify according to the "Qualitative Severity Rating Scale" published with the CVSS standard. The specific analysis that went into each assigned score can also be found within the document specific to the vulnerability, linked within the main table above.

Severity
CVSS score range

None

0.0

Low

0.1 - 3.9

Medium

4.0 - 6.9

High

7.0 - 8.9

Critical

9.0 - 10.0

CVE-2021-41767: Private tunnel identifier may be included in the non-private details of active conne

Severity:

Medium

CVSS v3.1 base score:

4.4

CVSS v3.1 vector:

Software affected

  • Glyptodon Enterprise 1.15 and older

  • Glyptodon Enterprise 2.5 and older

Description

Apache Guacamole 1.3.0 and older may incorrectly include a private tunnel identifier in the non-private details of some REST responses. This may allow an authenticated user who already has permission to access a particular connection to read from or interact with another user's active use of that same connection.

Preconditions for exploitation

  • Multiple users that share access to the same connections, which are (1) already in use and (2) originally established using the HTTP tunnel instead of WebSocket.

Results of a successful attack

  • A user with access to a connection that is already in use by another user via the HTTP tunnel is able to read instantaneous blocks of transmitted connection data, as well as transmit data over that connection.

Mitigation

Both Glyptodon Enterprise 1.x and 2.x have been patched with respect to this vulnerability. Users should evaluate their exposure/risk based on this advisory and plan to upgrade when possible.

Analysis and CVSS score breakdown

Metric
Value
Comments

Attack Vector

Network

Exploiting this vulnerability relies only on communicating with the web application through standard mechanisms, as already exposed by Guacamole's web interface.

Attack Complexity

Low

Exploiting this vulnerability requires limited technical ability, as the information in question is retrieved through standard mechanisms already exposed by Guacamole's web interface.

Privileges Required

Low

Obtaining the information in question requires a user account with access to one or more connections. Information on active connection usage can be retrieved only for connections accessible by the user.

User Interaction

Required

Another user must establish a connection before an attacker may attempt to exploit the issue.

Scope

Unchanged

The scope of information obtained does not extend beyond what Guacamole is explicitly designed to provide.

Confidentiality Impact

Low

Retrievable information is limited to instantaneous data transmitted over an active connection that the current user may also access.

Integrity

Low

Writable/modifiable information is limited to interactive data transmitted over an active connection that the current user may also access.

Availability

None

The availability of Guacamole and all related services are unaffected.

Remediation Level

Official fix available

The upstream Apache Guacamole project has released a fix via their 1.4.0 release, and this fix has been backported to all affected versions of Glyptodon Enterprise.

Report Confidence

Confirmed

Existence of the vulnerability in Apache Guacamole 1.3.0 and older has been acknowledged by the upstream Apache Guacamole project.

Multiple Vaults Integration

Integrate with multiple Keeper Vaults or multiple Shared Folders using Keeper Secrets Manager

Overview

Keeper Connection Manager can pull secrets from different vaults or different shared folders of the Keeper Vault, via the Keeper Secrets Manager integration. There are two main ways which KCM can connect to multiple Keeper Vaults for retreiving secrets:

  1. Connection Groups can be assigned to different secrets manager configurations. Any connection defined within a Connection Group will retrieve secrets from the group assignment.

  2. Users can be assigned Secrets Manager configurations, and connections can retrieve secrets from configurations defined by each individual user profiles. This allows different users to connect to the same set of connections with their own set of secrets.

Connection Groups

Each Keeper Connection Manager "Connection Group" can use a Keeper Secrets Manager configuration for the connections in the group. When this is activated, each connection group will look for records in the corresponding Secrets Manager configuration to retrieve secrets and replace tokens in the connection settings.

In order to use a Keeper Secrets Manager with a Connection Group, enter a Keeper Secrets Manager One-Time Access Token, or Configuration into the "KSM Service Configuration" field of the connection group form.

Connection Group settings

All connections created within this Connection Group will then use the Secrets Manager configuration defined to retrieve secrets when establishing connections, instead of using the root level Secrets Manager configuration.

The Secrets Manager configuration can come from the same vault, or any other vault.

See the Dynamic Tokens documentation for more information on the available tokens and how to use them.

Note: A Secrets Manager configuration must be established in the baseline configuration as a default to use connection group Secrets Manager configurations. See the documentation for information on setting up a Secrets Manager configuration.

User-Specified Configuration

Each Keeper Connection Manager User profile can be assigned to a Keeper Secrets Manager configuration for any connection. When the connection is updated to allow user-specific vaults, Keeper Connection Manager will pull the secret from the user's corresponding configuration.

In order to use user-specific secrets manager connections, the Keeper Connection Manager installation needs to have the feature enabled. It is disabled by default.

Docker Install Method

An additional environmental variable must be added to the keeper/guacamole Docker image in your docker-compose.yml file.

KSM_ALLOW_USER_CONFIG

For example:

docker-compose.yml
            ....
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            KSM_CONFIG: "XXX"
            ....
            ....
            KSM_ALLOW_USER_CONFIG: "true"
            ....

Advanced Linux Install Method

You must set the setting in the guacamole.properties file, or set the associate environment variable for the keeper/guacamole docker image.

guacamole.properties

Property Name
Default Value

ksm-allow-user-config

false

In the Edit User screen, fill in the KSM Service Configuration that has been set up for that user. This is also available to each user to set up the KSM Service Configuration for themselves.

User-specific KSM Configuration

When creating or editing a connection, there is a field which appears called "Allow user-provided KSM configuration".

User-provided KSM configuration

When this option is selected, Keeper Connection Manager will look for corresponding secrets in the user's vault corresponding to the Keeper Secrets Manager configuration.

Order of Precedence

Keeper Connection Manager will always use the base (or Connection Group) secrets if any are applicable. It will only use user-provided secrets if there isn't an admin-provided secret for the same, to ensure that users cannot override the intent of the admin.

Connection Protocols

Remote connection protocols supported by Keeper Connection Manager

Keeper Connection Manager and Apache Guacamole support multiple protocols through a common, centralized gateway. The "guacd" service sits between the Guacamole web application and the remote desktops and dynamically translates between low-level remote desktop protocols and the Guacamole protocol, applying additional optimization and compression in the process.

Installing support for a protocol

Within Keeper Connection Manager, support for each protocol is provided via separate packages. Only the packages for protocols that you will be using need be installed:

Protocol
Keeper Connection Manager package

When using any particular connection, the package providing support for that connection's underlying protocol must already be installed on the server running the guacd service. If support for the underlying protocol has not been installed, users attempting to use the connection will see an error message, and system administrators will see a message like the following within the systemd journal:

If a needed package was not installed and a message like that above is logged, installing the needed package will solve the problem. If using , all protocol support is already installed. If using the @kcm-guacamole package group, as described within , protocol support for VNC, RDP, and SSH is installed.

Configuring the protocol of a connection

When using one of the supported databases, administrators can define new connections using Guacamole's web interface, selecting the protocol to be used for that connection from a dropdown menu labeled "Protocol":

If defining a connection through a mechanism which does not leverage one of the supported databases, such as via /etc/guacamole/user-mapping.xml,, or, the protocol will must be specified using the unique, internal name for that protocol:

Protocol
Internal name

Using KCM with a PostgreSQL Database

Instructions for integrating Keeper Connection Manager and Guacamole with PostgreSQL

This documentation assumes that you already have access to a PostgreSQL server or hosted PostgreSQL database, and that Guacamole has already been installed using Keeper Connection Manager. If you do not already a PostgreSQL server ready, please before proceeding. If you do not already have Guacamole installed, please see the .

Creating and initializing the Guacamole database

If you haven’t already done so, a database specific to Guacamole needs to be created within PostgreSQL. The database can be called anything you like; all that matters is that the database be dedicated to Guacamole, and not shared by different applications:

Guacamole will not automatically initialize the database with the required schema. You will need to do this yourself using the SQL scripts provided with the kcm-guacamole-auth-jdbc-postgresql package, which are located within the /opt/keeper/share/guacamole-auth-jdbc-postgresql/schema directory:

Filename
Description

The above scripts must be run in sequence, as it is the first script which actually creates the database schema. The second script, which defines a default administrative user, can only successfully run if the tables created by the first script exist. The simplest way to run both scripts in sequence is to concatenate them:

Alternatively, the scripts can be run individually, as long as the order is correct:

Connecting Guacamole to PostgreSQL

To execute queries against the database, Guacamole will need its own database user with sufficient privileges. Because Guacamole does not automatically apply or update its own schema, the required privileges are minimal, dealing only with creation and maintenance of data within already-defined tables and indexes:

Advanced Linux Install Method

Keeper Connection Manager packages Guacamole’s PostgreSQL support within the kcm-guacamole-auth-jdbc-postgresql package. This package must be installed before creating Guacamole’s database within PostgreSQL, as it includes the SQL scripts necessary for doing so:

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must now be modified to specify the credentials of the PostgreSQL user and to point the PostgreSQL database:

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “JDBC-1” and defines the TCP connection information for the database in use. Uncomment the postgresql-hostname and postgresql-port properties, modifying their values to point to your PostgreSQL server:

The “JDBC-2” section, which defines the database name and associated credentials, must also be modified to specify the correct database name, username, and password. These values are given with the postgresql-database, postgresql-username, and postgresql-password properties respectively:

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process.

Advanced Linux Install Method

If you do not have a standalone "guacamole" service ...

You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "kcm-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before (2021-09-16).

You will instead need to manually restart your install of Tomcat:

If you are using SELinux (the default on both CentOS and RHEL), you must also configure SELinux to allow Tomcat to connect to the database over the network:

If Guacamole is not accessible after the Tomcat service has been restarted, verify that you have indeed configured SELinux to allow Tomcat to connect to the database and check the SELinux audit logs (/var/log/audit/audit.log) for .

Updating SELinux is not necessary if using the version of Tomcat bundled with the kcm-guacamole-standalone package.

To make sure everything is working as expected, you should also visit your Guacamole instance with a web browser (most likely at http://HOSTNAME:8080/guacamole/, where “HOSTNAME” is the hostname or IP address of your server). If all is working correctly, you should see a login screen with a username/password prompt, and you will be able to log in using the default account created with the 002-create-admin-user.sql script:

Username:
guacadmin

Once you have verified that you can log in successfully, you should immediately change the password. While logged into Keeper Connection Manager, you can access the built-in password changing interface by clicking on your username in the upper-right corner of the screen and selecting “Settings”.

OpenID Connect Configuration Properties

Advanced configuration properties for OpenID Connect Auth

The properties listed here are only applicable if OpenID authentication is being used. Support for OpenID authentication is installed using the package or enabled with the Docker installation. If using the Docker image, support for OpenID authentication is configured using environment variables.

OpenID Connect Configuration Properties

Property name
Description

Additional optional properties are available to control how claims within received ID tokens are used to derive the user’s Keeper Connection Manager username, any associated groups, the OpenID scopes requested when user identities are confirmed, and to control the maximum amount of time allowed for various aspects of the conversation with the identity provider:

Property name
Description

Controlling Login Behavior

Keeper Connection Manager loads authentication extensions in order of priority, and evaluates authentication attempts in this same order. This has implications for how the login process behaves when an SSO extension is present:

If the SSO extension has priority:

Users that are not yet authenticated will be immediately redirected to the configured identity provider. They will not see a Keeper Connection Manager login screen.

If a non-SSO extension has priority:

Users that are not yet authenticated will be presented with a Keeper Connection Manager login screen. Additionally, links to the configured identity provider(s) will be available for users that wish to log in using SSO.

The default priority of extensions is dictated by their filenames, with extensions that sort earlier alphabetically having higher priority than others. This can be overridden by setting the extension-priority property within guacamole.properties.

Automatically redirecting all unauthenticated users

To ensure users are redirected to the OpenID identity provider immediately (without a Keeper Connection Manager login screen), ensure the OpenID extension has priority over all others:

Presenting unauthenticated users with a login screen

To ensure users are given a normal Keeper Connection Manager login screen and have the option to log in with traditional credentials or with OpenID, ensure the OpenID extension does not have priority:

CVE-2020-9498: Dangling pointer in RDP static virtual channel handling

Software affected

  • Glyptodon Enterprise 1.12 and older

  • Glyptodon Enterprise 2.0

Description

Apache Guacamole 1.1.0 and older may mishandle pointers involved in processing data received via RDP static virtual channels. If a user connects to a malicious or compromised RDP server, a series of specially-crafted PDUs could result in memory corruption, possibly allowing arbitrary code to be executed with the privileges of the running guacd process.

Preconditions for exploitation

  • Sufficient privileges to compromise an RDP server, replacing its standard RDP service with a malicious service.

  • A Guacamole user account that has been granted access to that RDP server by the Guacamole administrator.

Results of a successful attack

  • Resource access equivalent to that of the Guacamole administrator (the ability to control guacd).

Mitigation

Both Glyptodon Enterprise 1.x and 2.x have been patched with respect to this vulnerability. Users should evaluate their exposure/risk based on this advisory and plan to upgrade when possible.

Analysis and CVSS score breakdown

Metric
Value
Comments

Severity:

Medium

CVSS v3.1 base score:

5.9

CVSS v3.1 vector:

AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H/E:F/RL:O/RC:C

Attack Vector

Local

Exploiting this vulnerability relies on two factors: (1) a compromised or malicious RDP server and (2) a deployment of Apache Guacamole which has been configured by an administrator to connect to that RDP server. Exploiting this vulnerability thus requires a local user account on the RDP server in question.

Attack Complexity

High

Exploiting this vulnerability requires the attacker to first compromise an RDP server to which Apache Guacamole has been configured to connect by an administrator.

Privileges Required

High

Exploiting this vulnerability relies on two factors: (1) a compromised or malicious RDP server and (2) a deployment of Apache Guacamole which has been configured by an administrator to connect to that RDP server. Exploiting this vulnerability thus requires a local user account on the RDP server in question with sufficient privileges to replace the standard RDP service with a malicious or compromised service.

User Interaction

None

An attacker would require no additional user interaction beyond their own.

Scope

Unchanged

The scope of any attack remains bounded by the privileges granted to the guacd process.

Confidentiality Impact

High

Arbitrary code executed through this vulnerability runs with the privileges of the guacd process. The executed code would be able to specifically access any information available to the guacd process, whether in memory or on disk.

Integrity

High

Arbitrary code executed through this vulnerability runs with the privileges of the guacd process. The executed code would be able to specifically access or modify any data that the guacd process itself can modify.

Availability

High

Arbitrary code executed through this vulnerability runs with the privileges of the guacd process, and thus would be able to affect the availability of other connections or the guacd process itself.

Exploitability

Functional exploit exists

The original reporter of the vulnerability has published examples describing how a vulnerable deployment can be exploited.

Remediation Level

Official fix available

The upstream Apache Guacamole project has released a fix via their 1.2.0 release, and this fix has been backported to all affected versions of Glyptodon Enterprise.

Report Confidence

Confirmed

Existence of the vulnerability in Apache Guacamole 1.1.0 and older has been acknowledged by the upstream Apache Guacamole project.

AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:X/RL:O/RC:C
CVE-2020-9497
Improper input validation of RDP static virtual channels
CVE-2020-9498
Dangling pointer in RDP static virtual channel handling
CVE-2020-11997
Inconsistent restriction of connection history visibility
CVE-2021-41767
Private tunnel identifier may be included in the non-private details of active connections
CVE-2021-43999
Improper validation of SAML responses
AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N/E:X/RL:O/RC:C
CREATE DATABASE guacamole_db;

001-create-schema.sql

Creates all tables and indexes which are required for the PostgreSQL authentication extension to function.

002-create-admin-user.sql

Creates a default administrative user, “guacadmin”, with password “guacadmin”. These credentials will need to be changed once PostgreSQL authentication is confirmed to be working.

$ cat /opt/keeper/share/guacamole-auth-jdbc-postgresql/schema/*.sql | psql -d guacamole_db -f -
$ psql -d guacamole_db -f /opt/keeper/share/guacamole-auth-jdbc-postgresql/schema/001-create-schema.sql
$ psql -d guacamole_db -f /opt/keeper/share/guacamole-auth-jdbc-postgresql/schema/002-create-admin-user.sql
CREATE USER guacamole_user WITH PASSWORD 'some_password';
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user;
GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user;
$ sudo yum install kcm-guacamole-auth-jdbc-postgresql
$ sudo vi /etc/guacamole/guacamole.properties
##
## [JDBC-1] Database TCP connection information
##
## The TCP connection details for the PostgreSQL, MySQL / MariaDB, or SQL
## Server database.
##

#mysql-hostname: localhost
#mysql-port:     3306

postgresql-hostname: localhost
postgresql-port:     5432
##
## [JDBC-2] Database name and credentials
##
## The name of the database to use, as well as the credentials to use when
## connecting to the database. THESE PROPERTIES ARE REQUIRED if one of the
## database authentication extensions will be used.
##

#mysql-database: guacamole_db
#mysql-username: guacamole_user
#mysql-password: some_password

postgresql-database: guacamole_db
postgresql-username: guacamole_user
postgresql-password: some_password
$ sudo systemctl restart guacamole
$ sudo systemctl restart tomcat
$ sudo setsebool -P tomcat_can_network_connect_db 1

Password:

guacadmin

set up a PostgreSQL instance
installation instructions
the 2.5 release
AVC denials

openid-authorization-endpoint

The authorization endpoint (URI) of the OpenID service.

This value should be provided to you by the identity provider. For identity providers that implement OpenID Connect Discovery, this value can be retrieved from the authorization_endpoint property of the JSON file hosted at https://identity-provider/.well-known/openid-configuration, where https://identity-provider is the base URL of the identity provider.

openid-jwks-endpoint

The endpoint (URI) of the JWKS service which defines how received ID tokens (JSON Web Tokens or JWTs) shall be validated.

This value should be provided to you by the identity provider. For identity providers that implement OpenID Connect Discovery, this value can be retrieved from the jwks_uri property of the JSON file hosted at https://identity-provider/.well-known/openid-configuration, where https://identity-provider is the base URL of the identity provider.

openid-issuer

The issuer to expect for all received ID tokens.

This value should be provided to you by the identity provider. For identity providers that implement OpenID Connect Discovery, this value can be retrieved from the issuer property of the JSON file hosted at https://identity-provider/.well-known/openid-configuration, where https://identity-provider is the base URL of the identity provider.

openid-client-id

The OpenID client ID which should be submitted to the OpenID service when necessary. This value is typically provided to you by the OpenID service when OpenID credentials are generated for your application.

openid-redirect-uri

The URI that should be submitted to the OpenID service such that they can redirect the authenticated user back to Keeper Connection Manager after the authentication process is complete. This must be the full URL that a user would enter into their browser to access Guacamole.

openid-username-claim-type

The claim type within any valid JWT that contains the authenticated user’s username. By default, the “email” claim type is used.

openid-groups-claim-type

The claim type within any valid JWT that contains the list of groups of which the authenticated user is a member. By default, the “groups” claim type is used.

openid-scope

The space-separated list of OpenID scopes to request. OpenID scopes determine the information returned within the OpenID token, and thus affect what values can be used as an authenticated user’s username. To be compliant with OpenID, at least “openid profile” must be requested. By default, “openid email profile” is used.

openid-allowed-clock-skew

The amount of clock skew tolerated for timestamp comparisons between the Keeper Connection Manger server and OpenID service clocks, in seconds. By default, clock skew of up to 30 seconds is tolerated.

openid-max-token-validity

The maximum amount of time that an OpenID token should remain valid, in minutes. By default, each OpenID token remains valid for 300 minutes (5 hours).

openid-max-nonce-validity

The maximum amount of time that a nonce generated by the Keeper Connection Manager server should remain valid, in minutes. As each OpenID request has a unique nonce value, this imposes an upper limit on the amount of time any particular OpenID request can result in successful authentication within Keeper Connection Manager. By default, each generated nonce expires after 10 minutes.

extension-priority: openid
extension-priority: *, openid
kcm-guacamole-auth-openid
keeper/guacamole

VNC

kcm-libguac-client-vnc

RDP

kcm-libguac-client-rdp

SSH

kcm-libguac-client-ssh

Telnet

kcm-libguac-client-telnet

Kubernetes

kcm-libguac-client-kubernetes

MySQL

kcm-libguac-client-mysql

PostgreSQL

kcm-libguac-client-postgres

Microsoft SQL Server

kcm-libguac-client-sql-server

guacd[8]: WARNING: Support for protocol "rdp" is not installed

VNC

vnc

RDP

rdp

SSH

ssh

Telnet

telnet

Kubernetes

kubernetes

MySQL

mysql

PostgreSQL

postgresql

Microsoft SQL Server

sqlserver

the keeper/guacd Docker image
the installation instructions
LDAP schema modifications
encrypted JSON
Protocol Selection
Glyptodon Demo
Keeper Secrets Manager

Installing and Configuring Nginx for SSL Termination

Detailed configuration instructions for SSL Termination with Nginx

Nginx is not directly available within the CentOS or RHEL repositories, but is available within the EPEL repository. The EPEL repository must be enabled first before Nginx can be installed:

$ sudo yum install epel-release

Once EPEL has been enabled, Nginx can be installed by installing the "nginx" package. Installing this package will install a version of Nginx that is newer than version 1.3 and thus is explicitly supported by Keeper Connection Manager:

$ sudo yum install nginx

As with other standard CentOS / RHEL packages providing a service, the Nginx service will not be started by default after the "nginx" package is installed. It must be started manually, and then configured to automatically start if the system is rebooted:

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

By default, Nginx will listen on port 80 and handle only unencrypted HTTP connections, serving the static contents of /usr/share/nginx/html. The rest of this document will cover reconfiguring Nginx such that it serves only HTTPS (using HTTP only to redirect browsers back to HTTPS), with a placeholder for the minimal additional configuration needed to provide SSL termination. The resulting configuration will be used instead of Nginx' default configuration, and will be split up across two modular files:

Filename
Description

/etc/nginx/conf.d/redirect-http.conf

Configures Nginx to respond to all HTTP requests with an HTTP 301 ("Moved Permanently") redirect to the same resource under HTTPS.

/etc/nginx/conf.d/guacamole.conf

Configures Nginx to accept HTTPS connections using a specified certificate and private key. Once SSL configuration is complete, this file will also such that HTTP is used only internally (SSL termination).

Configure Nginx to redirect all HTTP traffic to HTTPS

The main configuration file for Nginx, /etc/nginx/nginx.conf, contains a server block which serves the contents of /usr/share/nginx/html over HTTP:

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

The contents of this server block will conflict with the HTTP redirect that will need to be created, and should be commented-out or removed. Comment out every line with a # at the beginning:

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

With the conflicting server block removed, create a new file, /etc/nginx/conf.d/redirect-http.conf, to contain the new server block and redirect. The server block required is fairly straightforward. Rather than serve static content, it instructs Nginx to issue an HTTP 301 redirect ("Moved Permanently") for all requests, informing the browser that whatever they are requesting can instead be found at the same location using HTTPS:

server {

    listen 80;

    # Redirect all other traffic to HTTPS
    location / {
        return 301 https://$host$request_uri;
    }

}

To apply the new configuration, simply reload Nginx:

$ sudo systemctl reload nginx

Configure Nginx to accept HTTPS connections

To configure Nginx to accept HTTPS connections, you must obtain an SSL certificate for the domain associated with your server. There are two primary ways of doing this:

  1. Let's Encrypt: A non-profit certificate authority that provides automated certificate issuance and renewal. Let's Encrypt certificates are free.

  2. Obtaining a certificate from a certificate authority: Several commercial certificate authorities exist, many of which are also domain registrars. Unlike Let's Encrypt, obtaining a certificate from a commercial certificate authority will usually cost money.

The Let's Encrypt service uses a utility called "certbot" to automatically retrieve a certificate after the Let's Encrypt service has remotely verified that you control your domain. This utility is provided within the CentOS / RHEL repositories and must first be installed:

$ sudo yum install certbot

The Let's Encrypt service will verify that you control your domain be reaching back over the internet, attempting to establish an HTTP connection with your server at the domain provided and reading the contents of the .well-known/ directory within the web root. This directory will be created and populated automatically by certbot when it runs, but the /etc/nginx/conf.d/redirect-http.conf file created earlier will not allow this directory to be read due to the nature of the HTTPS redirect. The server block within redirect-http.conf must first be edited to add a location which functions as an exception to this redirect, allowing Let's Encrypt to remotely access .well-known/:

server {

    listen 80;

    # Let's Encrypt requires access to /.well-known/ for its webroot plugin
    location /.well-known/ {
        root /usr/share/nginx/html;
        break;
    }

    # Redirect all other traffic to HTTPS
    location / {
        return 301 https://$host$request_uri;
    }

}

To apply the new configuration, reload Nginx:

$ sudo systemctl reload nginx

The certbot tool can then be used to automatically retrieve a certificate for your domain. For example, if your Guacamole server is running at "remote.example.com", you can obtain a certificate from Let's Encrypt by running:

$ sudo certbot certonly -d remote.example.com --webroot --webroot-path /usr/share/nginx/html

The resulting certificate and private key will then be stored within a subdirectory of /etc/letsencrypt/live/ with the same name as your domain. To apply the certificate and additionally host content via HTTPS, a new configuration file needs to be created: /etc/nginx/conf.d/guacamole.conf. Similar to the HTTP redirect, this file will contain a server block that defines how Nginx should serve HTTPS connections:

server {

    listen 443 ssl;

    # Location block pointing to Tomcat will go here

    ssl_certificate /etc/letsencrypt/live/remote.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/remote.example.com/privkey.pem;

}

Configuring automatic renewal

Let's Encrypt certificates are intentionally short-lived, expiring after 90 days. To ensure that a new certificate is retrieved, it is recommended that certbot run daily. This can be achieved by creating a script within /etc/cron.daily called /etc/cron.daily/certbot containing the following:

#!/bin/bash

# Attempt to renew certificates daily, reloading Nginx if an updated
# certificate is issued
certbot renew --quiet && systemctl reload nginx

Be sure to grant execute permission on the script so that the cron service will be able to execute it:

$ sudo chmod +x /etc/cron.daily/certbot

The certbot tool will then be automatically invoked at least once per day, renewing the certificate and reloading Nginx as needed.

If you have already obtained a certificate and corresponding private key from a certificate authority, there is very little extra configuration needed for Nginx to start using that certificate. To apply the certificate and additionally host content via HTTPS, a new configuration file needs to be created: /etc/nginx/conf.d/guacamole.conf. Similar to the HTTP redirect, this file will contain a server block that defines how Nginx should serve HTTPS connections:

server {

    listen 443 ssl;

    # Location block pointing to Tomcat will go here

    ssl_certificate /etc/pki/tls/certs/remote-example-com-cert.pem;
    ssl_certificate_key /etc/pki/tls/private/remote-example-com-key.pem;

}

where /etc/pki/tls/certs/remote-example-com-cert.pem is your certificate and /etc/pki/tls/private/remote-example-com-key.pem is your private key. Your certificate authority may have additional instructions regarding how their certificates should be used with Nginx, but the above configuration should work well for most cases. Be sure to check the documentation provided by your certificate authority to see whether they have specific recommendations.

The /etc/pki/tls/ directory structure is standard to CentOS and RHEL. It is best practice to leverage this directory structure as intended, with the certs/ directory containing the non-sensitive certificate and the private/ directory containing the sensitive private key. The permissions of your private key should also be set such that non-root users of your system will not be able to read the key.

Finalizing the configuration (pointing Nginx at Guacamole)

With Nginx now deployed with a proper SSL certificate, the final step in providing SSL termination for Guacamole is to configure Nginx as a reverse proxy for Guacamole. This process involves adding a location block within the Nginx server block for HTTPS, in this case the /etc/nginx/conf.d/guacamole.conf configuration file that was just created. Documentation is provided for the full content and meaning of the required location block, which should be added in the space noted by the "Location block pointing to Tomcat will go here" placeholder comments above.

guacamole.properties

Advanced configuration properties within guacamole.properties

The guacamole.properties file, located within /etc/guacamole, is Guacamole’s main configuration file. Keeper Connection Manager provides a thoroughly-commented version of this configuration file, including example properties organized into logical sections with accompanying documentation.

TCP connection information for guacd

The hostname and port of the machine hosting the guacd service, as well as whether that guacd service has been configured for SSL/TLS. By default, Guacamole will connect to guacd at port 4822 on localhost, and will not use SSL/TLS to do so.

Property name
Default value
Description

guacd-hostname

localhost

The hostname of the machine hosting the guacd service.

guacd-port

4822

The port used by the guacd service.

guacd-ssl

false

Whether the guacd service has been configured for SSL/TLS.

Guacamole user session timeout

The amount of time, in minutes, a Guacamole session may remain valid despite being inactive. By default, Guacamole sessions remain valid for 60 minutes.

Property name
Default value
Description

api-session-timeout

60

The amount of time, in minutes, a Guacamole session may remain valid despite being inactive.

This setting affects Guacamole sessions only, not remote desktop sessions. To enforce limits on the duration of remote desktop sessions, you must change the relevant setting within your remote desktop server, such as the session time limit GPOs provided by the Windows RDP server. Guacamole considers a connected remote desktop session to be user activity, and does not attempt to define what constitutes an idle but connected remote desktop session.

HTTP request size limits

It is unusual to need to change this setting:

  • File transfers within a remote desktop session are not affected by this limit.

  • Requests unrelated to file transfer should normally be well beneath the default limit (2 MB).

If you find yourself considering changing this property value, first investigate whether there may be any external factors causing the problem you're seeing, such as a reverse proxy, firewall, or browser extension. It is more common that the settings of the reverse proxy providing SSL termination need to be adjusted, and that no change needs to be made to Guacamole's request size limits whatsoever.

The maximum number of bytes to accept within the entity body of any particular HTTP request to Guacamole's internal REST API, including authentication requests. By default, HTTP requests made against the Guacamole web application are limited to 2 MB, excluding requests related to file transfer for a remote desktop session.

Property name
Default value
Description

api-max-request-size

2097152

The maximum number of bytes to accept within the entity body of any particular HTTP request to the REST API, including authentication requests. This limit does not apply to files transferred within a remote desktop session. Specifying 0 disables request size limitations.

If setting this property intending to remove or lessen limitations on request sizes, be sure to check the settings of any reverse proxy providing SSL termination. Your reverse proxy may impose its own default limitations that will need to be overridden. For example, .

Restricting available languages

If you have developed your own branding extension that overrides Guacamole's translation strings only for a subset of Guacamole's supported languages, you can force Guacamole to reduce the set of supported languages to only those languages you have modified. This is only necessary if you have developed your own branding. Branding extensions provided by Keeper Connection Manager as part of a Keeper Connection Manager subscription will update all supported languages.

Property name
Description

allowed-languages

A comma-separated list of language keys for Guacamole's display language. If specified, only the listed languages will be made available to the user, and only the listed languages will be selected from automatically based on the user's browser's preferred language. By default, all defined languages will be available.

For example, to restrict Guacamole to only English and German, specify:

As English is the fallback language, used whenever a translation key is missing from the chosen language, English should only be omitted from this list if you are absolutely positive that no strings are missing from your custom translations.

Extension-specific properties

In addition to the standard properties accepted by the web application, extensions may read additional properties which are specific to their own configuration needs. The guacamole.properties file included with Keeper Connection Manager contains comments which cleanly group configuration into distinct sections for each supported extension, along with example properties and documentation.

  • Duo Two-Factor Authentication Configuration Properties

  • SAML 2.0 Authentication Configuration Properties

  • OpenID Connect Configuration Properties

  • Encrypted JSON Configuration Properties

  • LDAP Configuration Properties

  • MySQL / MariaDB Configuration Properties

  • PostgreSQL Configuration Properties

  • SQL Server Configuration Properties

  • TOTP Configuration Properties

  • UDS Enterprise Configuration Properties

Custom Branding

Customization of the Keeper Connection Manager user interface

Keeper Connection Manager supports customization of the front-end user interface CSS and injection of custom Javascript. In this guide, we will demonstrate how to modify the web application to display customized branding and execute custom Javascript code.

Overview

Keeper Connection Manager provides the ability to develop "Extensions" which can add custom enhancements to the overall platform. This page covers a basic example which can be easily modified for branding and UI changes.

Extensions to Keeper Connection Manager can:

  1. Provide alternative authentication methods and sources of connection/user data.

  2. Provide event listeners that will be notified as Guacamole performs tasks such as authentication and tunnel connection.

  3. Theme or brand the user interface through additional CSS files and static resources.

  4. Extend KCM's JavaScript code by providing JavaScript that will be loaded automatically.

  5. Add additional display languages, or alter the translation strings of existing languages.

Extension format

KCM extensions are standard Java .jar files (this is essentially a .zip file) which contain all classes and resources required by the extension, as well as the KCM extension manifest. There is no set structure to an extension except that the manifest must be in the root of the archive. Java classes and packages, if any, will be read from the .jar relative to the root, as well.

Example Branding Extension

Modifying your existing KCM installation with custom branding is easy, please follow the below steps as an example.

(1) On the instance running Keeper Connection Manager or your workstation, retrieve the example repository or download as a zip file. Example:

git clone https://github.com/Keeper-Security/kcm-branding.git
cd kcm-branding

(2) Zip up the contents of the branding folder into a file called kcm-branding.jar. The name of the file is arbitrary, as long as it is a unique name. KCM will load any extension that is placed into the target folder.

zip -r kcm-branding.jar guac-manifest.json css/ html/ js/ resources/ translations/

(3) Copy the file into the /etc/kcm-setup folder or any path on the server.

sudo cp kcm-branding.jar /etc/kcm-setup/

(4) In your docker-compose.yml file (e.g. /etc/kcm-setup/docker-compose.yml) there are 2 changes needed:

  • In the "guacamole" section add a reference to the Jar file which volume mounts the file directly from the host into the guacamole instance. The name of the file does not matter, as KCM will pull all jar files and process them.

  • Add the environment variable USE_DEFAULT_BRANDING with a value of "N".

Here's an example section:

    guacamole:
        image: keeper/guacamole:2
        restart: unless-stopped
        environment:
            ...
            USE_DEFAULT_BRANDING: "N"
        volumes:
            ...
            - "/etc/kcm-setup/kcm-branding.jar:/etc/guacamole/extensions/kcm-branding.jar:ro"

(5) Restart the container

sudo ./kcm-setup.run stop
sudo ./kcm-setup.run upgrade

That's it. After the service starts up, the branding on your KCM page will be all new, and there will be a popup alert when you load the page.

Example Javascript
Example HTML/CSS modification

For iterating on more changes, simply edit the resources, zip up the file, copy the zip file to the target folder and restart your KCM container.

Technical Details

CSS

The CSS files referenced in guac-manifest.json are appended to the application CSS when loaded, therefore they will override the CSS properties.

Javascript

The Javascript files referenced in guac-manifest.json are appended to the application Javascript when loaded.

HTML modification

The existing HTML structure of KCM's interface can be modified through special "patch" HTML files declared by the html property in guac-manifest.json. These files are HTML fragments and are identical to any other HTML file except that they contain KCM-specific meta tags that instruct KCM to modify its own HTML in a particular way. Each meta tag takes the following form:

<meta name="NAME" content="SELECTOR">

where SELECTOR is a CSS selector that matches the elements within the KCM interface that serve as a basis for the modification, and NAME is any one of the following defined modifications:

before

Inserts the specified HTML immediately before any element matching the CSS selector.

after

Inserts the specified HTML immediately after any element matching the CSS selector.

replace

Replaces any element matching the CSS selector with the specified HTML.

before-children

Inserts the specified HTML immediately before the first child (if any) of any element matching the CSS selector. If a matching element has no children, the HTML simply becomes the entire contents of the matching element.

after-children

Inserts the specified HTML immediately after the last child (if any) of any element matching the CSS selector. If a matching element has no children, the HTML simply becomes the entire contents of the matching element.

replace-children

Replaces the entire contents of any element matching the CSS selector with the specified HTML.

For example, to add a welcome message and link to some corporate privacy policy (a fairly common need), you would add an HTML file like the following:

<meta name="after" content=".login-ui .login-dialog">

<div class="welcome">
    <h2>Welcome to our Keeper Connection Manager Demo</h2>
    <p>
        Please be sure to read our <a href="#">privacy
        policy</a> before continuing.
    </p>
</div>

After the extension is installed and KCM is restarted, the "welcome" div and its contents will automatically be inserted directly below the login dialog (the only element that would match .login-ui .login-dialog) as if they were part of KCM's HTML in the first place.

Troubleshooting

If the page loads blank after applying the extension, check the logs. For example:

sudo ./kcm-setup.run logs -f guacamole

If you see a null pointer exception, it's probably because one of the resources referenced in guac-manifest.json cannot be found in the .jar archive. Ensure that all files and folders are zipped up properly.

EC2 Cloud Connector

Retrieve Cloud Connector Secrets from KSM

About

You can store SSH Keys and Windows passwords in your Keeper vault for connecting to EC2 instances alongside the KCM Cloud Connector.

See the AWS EC2 Discovery documentation for more details on connecting KCM with AWS EC2 instances.

Setup

Enable

The feature must first be enabled using either the Docker environment variable or the guacamole properties.

Docker Environment Variable

For Auto Docker Install and Docker Compose Install methods, in the keeper/guacamole-db-mysql image, a new environmental variable must be defined:

AWS_DISCOVERY_KSM_CONFIG

This must contain a Keeper Secrets Manager configuration. It can be the same config used with the KSM_CONFIG variable.

For example:

    guacamole:
        image: keeper/guacamole:2
        restart: unless-stopped
        ......
        AWS_DISCOVERY_KSM_CONFIG: "eyJob3N0bmFtZSI6ICJrZWVwZX.....=="

For Advanced Linux Install method, update the guacamole.properties file.

Property Name
Default Value
Description

aws-discovery-ksm-config

false

Enable the use of Cloud Connect credentials from KSM connected vaults

Remove volume mount for PEM key files

If you are using Keeper to store the PEM key files, you can remove the volume mount in the Docker Compose file that references the location /var/lib/guac_keys/ as this will not be used.

Configure a Record for use with Cloud Connect

The EC2 cloud connector recognizes Keeper records with specific fields automatically.

To create a record for use with the EC2 Cloud connector, you can either create a record that contains a pem file attachment containing your key, or a record that contains the key as text.

PEM File Record

Create a new record which will contain the pem file. The File Attachment record type is a good match, but any type other than General will work.

The record can have any title, In this example we're using "AWS key: my-machine"

Create a new record to attach your pem file to

With the record created, attach the pem file.

Attach your pem file to the new record

Optionally, if you include a Hostname/IP and Port field in your record, KCM will automatically associate the pem file with EC2 connections having a matching Hostname/IP.

Lastly, ensure that the new record is in a shared folder that is accessible to KCM via the Secrets Manager vault connection.

Move the new record to a shared folder attached to Secrets Manager

Private Key Record

Create a new record which will contain your machine's private key. The record is required to have a "private key" field. The SSH standard record type can be used for this.

The record can have any title.

Create a new record with a private key field (standard SSH type works)

The new record will need a custom text field named "Instance ID". Add a "Text" type custom field from the Custom Field menu, click "Edit Label" and enter "Instance ID".

The Instance ID field can also be titled anything which begins with "AWS" or "EC2"

Add a custom text field labeled "ID Instance"

With the record ready, enter your machine's private key into the Private Key field, and your AWS instance ID in the new custom field.

Lastly, make sure that the record is in a shared folder that is accessible to KCM via Secrets Manager integration.

Fill in the record details and place the record in a Secrets Manager accessible shared folder

Optionally, if you include a Hostname and Port field in your record, KCM will automatically associate the private key with EC2 connections with a matching IP address

The record is now complete, and will be picked up automatically by KCM if the feature is enabled.

CVE-2020-9497: Improper input validation of RDP static virtual channels

Severity:

Low

CVSS v3.1 base score:

1.8

CVSS v3.1 vector:

Software affected

  • Glyptodon Enterprise 1.12 and older

  • Glyptodon Enterprise 2.0

Description

Apache Guacamole 1.1.0 and older do not properly validate data received from RDP servers via static virtual channels. If a user connects to a malicious or compromised RDP server, specially-crafted PDUs could result in disclosure of information within the memory of the guacd process handling the connection.

Preconditions for exploitation

  • Sufficient privileges to compromise an RDP server, replacing its standard RDP service with a malicious service.

  • A Guacamole user account that has been granted access to that RDP server by the Guacamole administrator.

Results of a successful attack

  • Non-directable access to information otherwise only available to the Guacamole administrator (information within the memory of guacd).

Mitigation

Both Glyptodon Enterprise 1.x and 2.x have been patched with respect to this vulnerability. Users should evaluate their exposure/risk based on this advisory and plan to upgrade when possible.

Analysis and CVSS score breakdown

Metric
Value
Comments

Attack Vector

Local

Exploiting this vulnerability relies on two factors: (1) a compromised or malicious RDP server and (2) a deployment of Apache Guacamole which has been configured by an administrator to connect to that RDP server. Exploiting this vulnerability thus requires a local user account on the RDP server in question.

Attack Complexity

High

Exploiting this vulnerability requires the attacker to first compromise an RDP server to which Apache Guacamole has been configured to connect by an administrator.

Privileges Required

High

Exploiting this vulnerability relies on two factors: (1) a compromised or malicious RDP server and (2) a deployment of Apache Guacamole which has been configured by an administrator to connect to that RDP server. Exploiting this vulnerability thus requires a local user account on the RDP server in question with sufficient privileges to replace the standard RDP service with a malicious or compromised service.

User Interaction

None

An attacker would require no additional user interaction beyond their own.

Scope

Unchanged

The information disclosed via a successful attack is limited to the information already accessible to the guacd process.

Confidentiality Impact

Low

The information disclosed via a successful attack is limited to the information within the memory of the guacd process and cannot be specifically targeted. The attacker does not have control over what information is obtained.

Integrity

None

No modification of data is possible through exploiting this vulnerability.

Availability

None

Each new connection runs within its own, dedicated child process of guacd. It is possible for an attempt to exploit this vulnerability to cause a crash of that child process (to cause the connection to the compromised/malicious RDP server to disconnect), however the impact is limited to the individual connection being serviced by that process.

Exploitability

Functional exploit exists

One of the original reporters of the vulnerability has published examples describing how a vulnerable deployment can be exploited.

Remediation Level

Official fix available

The upstream Apache Guacamole project has released a fix via their 1.2.0 release, and this fix has been backported to all affected versions of Glyptodon Enterprise.

Report Confidence

Confirmed

Existence of the vulnerability in Apache Guacamole 1.1.0 and older has been acknowledged by the upstream Apache Guacamole project.

CVE-2020-11997: Inconsistent restriction of connection history visibility

Severity:

Medium

CVSS v3.1 base score:

4.1

CVSS v3.1 vector:

Software affected

  • Glyptodon Enterprise 1.13 and older

  • Glyptodon Enterprise 2.1 and older

Description

Apache Guacamole 1.2.0 and older do not consistently restrict access to connection history based on user visibility. If multiple users share access to the same connection, those users may be able to see which other users have accessed that connection, as well as the IP addresses from which that connection was accessed, even if those users do not otherwise have permission to see other users.

Preconditions for exploitation

  • Multiple users that share access to the same connections.

Results of a successful attack

  • A user with access to a connection is able to see whether other users have accessed that connection, as well as the IP addresses used to access the connection.

Mitigation

Both Glyptodon Enterprise 1.x and 2.x have been patched with respect to this vulnerability. Users should evaluate their exposure/risk based on this advisory and plan to upgrade when possible.

Analysis and CVSS score breakdown

Metric
Value
Comments

Attack Vector

Network

Exploiting this vulnerability relies only on communicating with the web application through standard mechanisms, as already exposed by Guacamole's web interface.

Attack Complexity

Low

Exploiting this vulnerability requires limited technical ability, as the information in question is retrieved through standard mechanisms already exposed by Guacamole's web interface.

Privileges Required

Low

Obtaining the information in question requires a user account with access to one or more connections. Information on connection usage can be retrieved only for connections accessible by the user.

User Interaction

None

An attacker would require no additional user interaction beyond their own.

Scope

Unchanged

The scope of information obtained does not extend beyond what Guacamole is explicitly designed to provide.

Confidentiality Impact

Low

Retrievable information is limited to the usernames of users that have accessed connections that the current user may also access, as well as the IP addresses used for those past accesses.

Integrity

None

Data integrity is in no way affected. The relevant information may be read, not modified.

Availability

None

The availability of Guacamole and all related services are unaffected.

Exploitability

High

Exploiting this vulnerability requires limited technical ability, as the information in question is retrieved through standard mechanisms already exposed by Guacamole's web interface.

Remediation Level

Official fix available

The upstream Apache Guacamole project has released a fix via their 1.3.0 release, and this fix has been backported to all affected versions of Glyptodon Enterprise.

Report Confidence

Confirmed

Existence of the vulnerability in Apache Guacamole 1.2.0 and older has been acknowledged by the upstream Apache Guacamole project.

Keeper Connection Manager | Release Notes | Keeper Documentationdocs.keeper.io

Using KCM with a MySQL Database

Instructions for integrating Keeper Connection Manager and Guacamole with MySQL

This documentation assumes that you already have access to a MySQL server or hosted MySQL database, and that Guacamole has already been installed using Keeper Connection Manager. If you do not already a MySQL server ready, please before proceeding. If you do not already have Guacamole installed, please see the .

Creating and initializing the Guacamole database

If you haven’t already done so, a database specific to Guacamole needs to be created within MySQL. The database can be called anything you like; all that matters is that the database be dedicated to Guacamole, and not shared by different applications. Get to the MySQL prompt with the command:

Next, create the database:

Then exit MySQL with the "exit" command.

Guacamole will not automatically initialize the database with the required schema. You will need to do this yourself using the SQL scripts provided with the kcm-guacamole-auth-jdbc-mysql package, which are located within the /opt/keeper/share/guacamole-auth-jdbc-mysql/schema directory:

Filename
Description

The above scripts must be run in sequence, as it is the first script which actually creates the database schema. The second script, which defines a default administrative user, can only successfully run if the tables created by the first script exist. The simplest way to run both scripts in sequence is to concatenate them:

Alternatively, the scripts can be run individually, as long as the order is correct:

Connecting Guacamole to MySQL

To execute queries against the database, Guacamole will need its own database user with sufficient privileges. Because Guacamole does not automatically apply or update its own schema, the required privileges are minimal, dealing only with creation and maintenance of data within already-defined tables and indexes:

Advanced Linux Install Method

Keeper Connection Manager packages Guacamole’s MySQL support within the kcm-guacamole-auth-jdbc-mysql package. This package must be installed before creating Guacamole’s database within MySQL, as it includes the SQL scripts necessary for doing so:

Guacamole's main configuration file, /etc/guacamole/guacamole.properties, must now be modified to specify the credntials of the MySQL user and to point the MySQL database:

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked "JDBC-1" and defines the TCP connection information for the database in use. Uncomment the mysql-hostname and mysql-port properties, modifying their values to point to your MySQL server:

The "JDBC-2" section, which defines the database name and associated credentials, must also be modified to specify the correct database name, username, and password. These values are given with the mysql-database, mysql-username, and mysql-password properties respectively:

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

If you do not have a standalone "guacamole" service

You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "kcm-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before (2021-09-16).

You will instead need to manually restart your install of Tomcat:

If you are using SELinux (the default on both CentOS and RHEL), you must also configure SELinux to allow Tomcat to connect to the database over the network:

If Guacamole is not accessible after the Tomcat service has been restarted, verify that you have indeed configured SELinux to allow Tomcat to connect to the database and check the SELinux audit logs (/var/log/audit/audit.log) for .

Updating SELinux is not necessary if using the version of Tomcat bundled with the kcm-guacamole-standalone package.

To make sure everything is working as expected, you should also visit your Guacamole instance with a web browser (most likely at , where “HOSTNAME” is the hostname or IP address of your server). If all is working correctly, you should see a login screen with a username/password prompt, and you will be able to log in using the default account created with the 002-create-admin-user.sql script:

Username:
guacadmin

Once you have verified that you can log in successfully, you should immediately change the password. While logged into Keeper Connection Manager, you can access the built-in password changing interface by clicking on your username in the upper-right corner of the screen and selecting “Settings”.

Session Recording and Playback

Configure and view connection session recordings

Overview

Keeper Connection Manager supports automatic screen recording of each connection session. Recordings can be graphical video recordings of the connection, or (for certain connection protocols) typescript recordings which record only the text sent to the the client machine.

Read below about how to setup, configure, and view each session recording type.

Graphical Session Recording

Sessions of all supported protocols can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory.

In-Browser Session Recording and Playback

The simplest way to record user connection sessions and view them in the browser.

To configure connections for in-browser recording playback, enter the following special values in the "Screen Recording" section of the connection settings.

Recording Path

${HISTORY_PATH}/${HISTORY_UUID}

[x] Automatically Create Typescript Path

Typescript Path

${HISTORY_PATH}/${HISTORY_UUID}

[x] Automatically Create Recording Path

These values tell the system to store recordings in a location and format that the in-browser viewer can consume. A screenshot example is below:

Custom Session Recording Location and Local Playback

If desired, graphical session recordings can be named with custom values, or saved to any desired location. This will require recording playback using the Glyptodon Session Recording Player.

Configuring Graphical Session Recording

Recording Path

The directory in which screen recording files should be created.

This parameter is required for graphical session recording to function.

Recording Name

The filename to use for any created recordings. This parameter is optional. If omitted, the value “recording” will be used instead.

This parameter only has an effect if graphical recording is enabled. If the "Recording Path" is not specified, graphical session recording will be disabled, and this parameter will be ignored.

It is recommended to utilize to add the date, time, and other unique information to the recording name.

For example:

RDP Recording ${GUAC_USERNAME} - ${GUAC_DATE} : ${GUAC_TIME}

Will create recording files with the user's username, the session date and time in the name.

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like “.1”, “.2”, “.3”, etc. will be appended to to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will simply not be recorded.

Session Recording Playback

Keeper Connection Manager session recordings can be viewed from within the user interface in the History tab of the settings screen. To view a recording, click the play icon on the far right. Any session of a connection that was setup with the settings above will have the icon. When the icon is clicked, the recorded session will load in the browser, and you can start playback by clicking anywhere on the screen.

Exclude Graphics/Streams

If checked, graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events.

This parameter is optional. If omitted, graphical output will be included in the recording.

Exclude Mouse

If checked, user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor.

This parameter is optional. If omitted, mouse events will be included in the recording.

Include Key Events

If checked, user key events will be included in the recording.

This parameter is optional. If omitted, key events will be not included in the recording.

Automatically Create Recording Path

If checked the directory specified by "Recording Path" will automatically be created if it does not yet exist. Only the final directory in the path will be created - if other directories earlier in the path do not exist, automatic creation will fail, and an error will be logged.

This parameter is optional. By default, the directory specified by the recording path parameter will not automatically be created, and attempts to create recordings within a non-existent directory will be logged as errors.

Replaying Custom Location Graphical Session Recordings

Keeper Connection Manager graphical session recordings that were saved to a custom location can be viewed using the Keeper Connection Manager Session Recording Player at

To view session recordings, click "Browse..." and select the recording in your file system. The recording will play in the browser.

The Keeper Connection Manager graphical session recording player does not send recordings over the internet. Recording files are translated to video locally on the browser.

Text session recording (typescripts)

The full, raw text content of terminal sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a “typescript”, will be written to two files within the directory specified by the entered Typescript Path: NAME, which contains the raw text data, and NAME.timing, which contains timing information, where NAME is the value provided for Typescript Name.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using compatible tools.

Configuring Graphical Session Recording

Typescript session recording can be configured for each connection in the

Typescript Path

The directory in which typescript files should be created.

This parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript Name

The base filename to use when determining the names for the data and timing files of the typescript.

This parameter is optional. If omitted, the value “typescript” will be used instead.

Each typescript consists of two files which are created within the directory specified by the Typescript Name: NAME, which contains the raw text data, and NAME.timing, which contains timing information, where NAME is the value provided for the Typescript Name parameter.

It is recommended to utilize to add the date, time, and other unique information to the recording name.

For example:

SSH Typescript ${GUAC_USERNAME} - ${GUAC_DATE} : ${GUAC_TIME}

Will create recording files with the user's username, the session date and time in the name.

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like “.1”, “.2”, “.3”, etc. will be appended to NAME to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will simply not be recorded.

Automatically Create Typescript Path

If checked, the directory specified by "Typescript Path" will automatically be created if it does not yet exist. Only the final directory in the path will be created - if other directories earlier in the path do not exist, automatic creation will fail, and an error will be logged.

This parameter is optional. By default, the directory specified by "Typescript Path" will not automatically be created, and attempts to record typescripts in a non-existent directory will be logged as errors.

Replaying Text Session Replays

MacOs

Recordings can be replayed using script. For example, to replay a typescript called “NAME”, you would run:

Linux

Recordings can be replayed using scriptreplay. For example, to replay a typescript called “NAME”, you would run:

File Transfer Config

Transferring files between local and remote connection

Keeper Connection Manager support file transfers in both directions, with unique features available for the different connection types.

RDP

Files can be transferred between the local system and the remote connection through simple drag-and-drop.

SSH

Files can be transferred to the remote system through drag-and-drop. File transfer from remote system to local browser accomplished through helper script.

VNC

Files can be transferred via sftp to the remote system through drag-and-drop. The sftp endpoint is configured in the Connection Edit screen.

MySQL

The new MySQL connection type supports transfer of CSV data into and out of the remote database through the browser interface using special "select" and "load" commands that have been built as extensions to the MySQL syntax.

RDP / Windows

The connection parameters used for File Transfer on Windows connections is displayed below. RDP connection types support two different methods of file transfer. The "Enable Drive" method uses the RDP protocol and maps file transfers to a mapped drive on the remote system.

Depending on the installation method, the "Drive Path" can be configured a few different ways.

On Docker Installation methods, there is a default volume mount to /var/lib/guacamole/

The Drive Path must include a base path of /var/lib/guacamole/drives which has the necessary permissions to write files. If the same Drive Path is specified on multiple connections, the files will be shared among those connections. If the Drive Path contains a token after /drives/ such as ${GUAC_USERNAME}, each user will see their own shared drive.

For example:

In this example, the following parameters are set:

  • Enable Drive: Check this to activate the file transfer capability

  • Drive Path: Set this path according to the environment. The folder must be writable by the guacd user.

  • Automatically Create Drive: If the permissions allow, the subfolders will be created on demand.

The mapped drive will show up on the remote system as seen below:

Windows connections can optionally use SFTP for file transfer. This can be activated in the SFTP section of the connection.

To transfer a file from the local system to the remote connection, simply drag-and-drop the file into the window. A progress indicator will show up on the lower right.

After the file transfer is complete, it will appear in the Drive folder.

To transfer a file from the remote system to the local computer, simply drag and drop a file on the remote system into the mapped Drive and then drag into the "Download" folder of the mapped drive. The file will instantly download to the local system.

SSH / Linux

SSH Connection types provide SFTP file transfer, which conveniently allows you to drag and drop a file into the SSH connection screen. Files are transferred to the designated folder as specified in the SSH connection settings.

Simply drag and drop a file into the SSH connection to transfer a file to the remote system. By default, the files will transfer to the home folder unless a different root directory path is specified.

To transfer files from the SSH remote connection to the local filesystem, you can download a tool called guacctl into the remote system and use it for performing outbound transfers.

Instructions for using guacctl are below:

MySQL

Importing

Importing Data is accomplished through the web browser interface by using the standard "LOAD DATA LOCAL INFILE" SQL command. Keeper Connection Manager intercepts the response data and redirects it through the native file download facility of the web browser.

For example:

This SQL query will trigger a browser file upload and then import the provided data.

Details about the syntax can be found at the .

Exporting

Exporting CSV data from SQL query using a new SELECT... INTO LOCAL OUTFILE command.

For example:

File Transfer Upload Limit

The file upload limit is controlled through the client_max_body_size setting in the NGINX configuration file.

On Docker installations of Keeper Connection Manager, the default value of this setting is "0" which allows for an unlimited upload file size.

On Advanced Linux Installation method, the default file transfer limit might be set to 1MB and most likely, you will want to raise this limit. If you followed the typical installation instructions with NGINX, you should modify the configuration file, e.g. /etc/nginx/conf.d/guacamole.conf

Ensure the following parameter (client_max_body_size) is set with the preferred maximum file size limit. For example the below is set for 200MB size limit:

client_max_body_size 200m;

After updating this value, make sure to restart NGINX

systemctl restart nginx

Custom Network Drive

If you have an environment where you would like the file location path associated with an existing network drive, follow the steps below:

  • Mount your network drive to the Keeper Connection Manager host filesystem

  • Volume mount the network drive path in the Docker Compose for the guacd container

  • Ensure that the guacd user can write the files in the docker container

The most important thing to keep in mind when doing this is that it's the "guacd" service that needs to be able to write files in the drive path. The guacd service operates as a reduced-privilege "guacd" user within the "guacd" container, and so you will need to set file permissions accordingly. This can be done either by modifying the files on the filesystem to have appropriate ownerships using the numerical UID/GID used by the container, or by using the GUACD_UID and GUACD_GID environment variables to configure the container to use the UID/GID already used by the files on the guacd container filesystem.

Custom Extensions

Integrating Keeper Connection Manager with 3rd party software and applications

Extension API Overview

Keeper Connection Manager is designed to be integrated with third-party systems and applications using the Extension API, which allows arbitrary systems to serve as methods of authentication and as data sources.

The Extension API was used to implement the authentication mechanisms supported by Keeper Connection Manager and Apache Guacamole out-of-the-box. For Keeper Connection Manager 2.x, regardless of any updates, the extension API is compatible with upstream Apache Guacamole 1.0.0 through 1.3.0.

Documentation

  • (referenced by parts of the extension API)

If you are not sure where to begin with integrating Keeper Connection Manager, or are having difficulties with your existing integration,

configure Nginx to proxy HTTPS connections to Guacamole
allowed-languages: en, de
Nginx imposes a default limit of 1 MB per request
AV:L/AC:H/PR:H/UI:N/S:U/C:L/I:N/A:N/E:F/RL:O/RC:C
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N/E:H/RL:O/RC:C
Logo
sudo mysql -u root
CREATE DATABASE guacamole_db;

001-create-schema.sql

Creates all tables and indexes which are required for the MySQL authentication extension to function.

002-create-admin-user.sql

Creates a default administrative user, “guacadmin”, with password “guacadmin”. These credentials will need to be changed once MySQL authentication is confirmed to be working.

cat /opt/keeper/share/guacamole-auth-jdbc-mysql/schema/*.sql | mysql -u root -p guacamole_db
mysql -u root guacamole_db < /opt/keeper/share/guacamole-auth-jdbc-mysql/schema/001-create-schema.sqlmysql -u root guacamole_db < /opt/keeper/share/guacamole-auth-jdbc-mysql/schema/002-create-admin-user.sql
CREATE USER 'guacamole_user' IDENTIFIED BY 'some_password';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user';
FLUSH PRIVILEGES;
sudo yum install kcm-guacamole-auth-jdbc-mysql
sudo vi /etc/guacamole/guacamole.properties
##
## [JDBC-1] Database TCP connection information
##
## The TCP connection details for the PostgreSQL, MySQL / MariaDB, or SQL
## Server database.
##

mysql-hostname: localhost
mysql-port:     3306
##
## [JDBC-2] Database name and credentials
##
## The name of the database to use, as well as the credentials to use when
## connecting to the database. THESE PROPERTIES ARE REQUIRED if one of the
## database authentication extensions will be used.
##

mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: some_password
$ sudo systemctl restart guacamole
$ sudo systemctl restart tomcat
$ sudo setsebool -P tomcat_can_network_connect_db 1

Password:

guacadmin

set up a MySQL or MariaDB instance
installation instructions
the 2.5 release
AVC denials
http://HOSTNAME:8080/guacamole/
$ script -p NAME
$ scriptreplay NAME.timing NAME
Keeper Connection Manager's dynamic credential pass-through
https://player.glyptodon.com
Keeper Connection Manager connection settings
Keeper Connection Manager's dynamic credential pass-through
Configuration for Screen and Typescript Recording
Graphical screen recording options
The History tab
The Keeper Connection Manager graphics session recording player
Typescript recording options
wget https://raw.githubusercontent.com/apache/guacamole-server/master/bin/guacctl
chmod +x guacctl
./guacctl -d <filename>
LOAD DATA LOCAL INFILE "input.csv" 
INTO TABLE products
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
IGNORE 1 LINES
 SELECT * FROM products INTO LOCAL OUTFILE "products.csv";
MySQL website
RDP Connection Setting for File Transfer
Remove Drive
SFTP File Transfer
File Transfer on Windows
File Transfer Complete
Drive Folder
Copy file to Mapped Drive
Copy File to Download Folder
Local Saved File
SFTP Connection Settings
SSH File Transfer
File Transferred to Home Folder
Transfer a File using guacctl
Data Export from MySQL into Keeper Connection Manager
General upstream documentation on Guacamole extensions and their format
JavaDoc for the Apache Guacamole 1.3.0 Extension API
JavaDoc for the Apache Guacamole 1.3.0 core API
consulting on integration is included with premium subscriptions.

Using KCM with a SQL Server Database

This documentation assumes that you already have access to a SQL Server database, either on a server of your own or hosted elsewhere, and that Guacamole has already been installed using Keeper Connection Manager. If you do not already a SQL Server database ready, please set up SQL Server before proceeding. If you do not already have Guacamole installed, please see the installation instructions.

Creating and initializing the Guacamole database

If you haven’t already done so, a database specific to Guacamole needs to be created within SQL Server. The database can be called anything you like and there are no specific requirements for the size of the database, collation, etc.; all that matters is that the database be dedicated to Guacamole, and not shared by different applications:

CREATE DATABASE guacamole_db;
GO

Guacamole will not automatically initialize the database with the required schema. You will need to do this yourself using the SQL scripts provided with the kcm-guacamole-auth-jdbc-sqlserver package, which are located within the /opt/keeper/share/guacamole-auth-jdbc-sqlserver/schema directory:

Filename
Description

001-create-schema.sql

Creates all tables and indexes which are required for the SQL Server authentication extension to function.

002-create-admin-user.sql

Creates a default administrative user, “guacadmin”, with password “guacadmin”. These credentials will need to be changed once SQL Server authentication is confirmed to be working.

The above scripts must be run in sequence. The first script, 001-create-schema.sql, creates the database schema:

$ sqlcmd -S sqlserver_database_hostname -U sa -d guacamole_db -i /opt/keeper/share/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql

Creating a Database User for Guacamole

To execute queries against the database, Guacamole will need its own database user with sufficient privileges. Because Guacamole does not automatically apply or update its own schema, the required privileges are minimal, dealing only with creation and maintenance of data within already-defined tables and indexes. Permission to SELECT, INSERT, UPDATE, and DELETE from all tables in the database is sufficient and exactly covered by SQL Server's db_datareader and db_datawriter roles.

The login to be used by Guacamole must use SQL Server authentication, with a password which will eventually be stored within /etc/guacamole/guacamole.properties:

CREATE LOGIN guacamole_user WITH PASSWORD = 'some_password';
GO

The login must then be associated with a user specific to the Guacamole database:

CREATE USER guacamole_user;
GO

To grant the necessary SELECT, INSERT, UPDATE, and DELETE permissions for all tables in the Guacamole database, the user must be added to the database's db_datareader and db_datawriter roles:

ALTER ROLE db_datawriter ADD MEMBER guacamole_user;
ALTER ROLE db_datareader ADD MEMBER guacamole_user;
GO

Connecting Guacamole to SQL Server

Advanced Linux Install Method

Keeper Connection Manager packages Guacamole’s SQL Server support within the kcm-guacamole-auth-jdbc-sqlserver package. This package must be installed before creating Guacamole’s database within SQL Server, as it includes the SQL scripts necessary for doing so:

$ sudo yum install kcm-guacamole-auth-jdbc-sqlserver

Once the database and database user have been prepared, Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to specify the credentials of that user and to point the SQL Server instance and database:

$ sudo vi /etc/guacamole/guacamole.properties

The guacamole.properties file provided with Keeper Connection Manager is organized into sections documented with blocks of comments and example properties. The first section which must be modified is marked “JDBC-1” and defines the TCP connection information for the database in use. Uncomment the sqlserver-hostname and sqlserver-port properties, modifying their values to point to your instance of SQL Server:

##
## [JDBC-1] Database TCP connection information
##
## The TCP connection details for the PostgreSQL, MySQL / MariaDB, or SQL
## Server database.
##

#mysql-hostname: localhost
#mysql-port:     3306

#postgresql-hostname: localhost
#postgresql-port:     5432

sqlserver-hostname: localhost
sqlserver-port:     1433

The “JDBC-2” section, which defines the database name and associated credentials, must also be modified to specify the correct database name, username, and password. These values are given with the sqlserver-database, sqlserver-username, and sqlserver-password properties respectively:

##
## [JDBC-2] Database name and credentials
##
## The name of the database to use, as well as the credentials to use when
## connecting to the database. THESE PROPERTIES ARE REQUIRED if one of the
## database authentication extensions will be used.
##

#mysql-database: guacamole_db
#mysql-username: guacamole_user
#mysql-password: some_password

#postgresql-database: guacamole_db
#postgresql-username: guacamole_user
#postgresql-password: some_password

sqlserver-database: guacamole_db
sqlserver-username: guacamole_user
sqlserver-password: some_password

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

$ sudo systemctl restart guacamole

If you do not have a standalone "guacamole" service

You will not have a standalone "guacamole" service if you have not deployed Guacamole automatically with the "kcm-guacamole-standalone" package. This will be the case if:

  • You have chosen to manually deploy Guacamole under your own install of Apache Tomcat or JBoss, rather than use the provided version of Tomcat.

  • You are maintaining a deployment of Glyptodon Enterprise that was originally installed before the 2.5 release (2021-09-16).

You will instead need to manually restart your install of Tomcat:

$ sudo systemctl restart tomcat

If you are using SELinux (the default on both CentOS and RHEL), you must also configure SELinux to allow Tomcat to connect to the database over the network:

$ sudo setsebool -P tomcat_can_network_connect_db 1

If Guacamole is not accessible after the Tomcat service has been restarted, verify that you have indeed configured SELinux to allow Tomcat to connect to the database and check the SELinux audit logs (/var/log/audit/audit.log) for AVC denials.

Updating SELinux is not necessary if using the version of Tomcat bundled with the kcm-guacamole-standalone package.

To make sure everything is working as expected, you should also visit your Keeper Connection Manager instance with a web browser (most likely at http://HOSTNAME:8080/guacamole/, where “HOSTNAME” is the hostname or IP address of your server). If all is working correctly, you should see a login screen with a username/password prompt, and you will be able to log in using the default account created with the 002-create-admin-user.sql script:

Username:
guacadmin

Password:

guacadmin

Once you have verified that you can log in successfully, you should immediately change the password. While logged into Keeper Connection Manager, you can access the built-in password changing interface by clicking on your username in the upper-right corner of the screen and selecting “Settings”.

SQL Server Configuration Properties

Advanced configuration properties for SQL Server

The properties listed here are only applicable if SQL Server authentication is being used. Support for SQL Server authentication is . If using , support for SQL Server authentication is instead configured using environment variables.

    • Minimum password length and complexity

    • Minimum/maximum password age

    • Password reuse prevention

    • General connection concurrency limits

    • Per-user concurrency limits

    • Absolute concurrency limits

TCP connection information

The TCP connection details for the SQL Server database.

Property name
Default value
Description

Database name and credentials

The name of the database to use, as well as the credentials to use when connecting to the database. These properties are required if one of the database authentication extensions will be used.

Property name
Description

Database password policies

Restrictions that should be applied to all database users with respect to password complexity, length, change frequency, and reuse.

These properties do not affect users defined outside the database.

Minimum password length and complexity

Property name
Default value
Description

Minimum/maximum password age

Property name
Description

Password reuse prevention

Property name
Description

Database concurrent connection limits

Concurrent usage restrictions that should be enforced by default across all connections. With the exception the absolute concurrency limit, each of these restrictions may be overridden by the administrator on a per-connection basis by editing the connection.

General connection concurrency limits

Property name
Default value
Description

Per-user concurrency limits

Property name
Default value
Description

Absolute concurrency limits

Property name
Default value
Description

Database user account requirements

Whether authentication via other extensions is allowed for users that do not exist within the SQL Server database. If set to "true", authentication attempts will be denied unless the authenticated user has been defined within the database.

Property name
Default value
Description

Dynamic Tokens

Using the integration between Connection Manager and Vault with dynamic field lookups

Dynamic Tokens

When using the vault integration, specific tokens are replaced by the corresponding value from a Keeper record.

There are dynamic and static tokens. Dynamic tokens will search the Keeper vault for a matching hostname to extract the necessary fields. Static tokens can be created that explicitly reference a particular Keeper record and field.

Hostname Matching

Keeper Records can be assigned to connections by the "Hostname" field in the connection and the "Hostname or IP Address" field in the vault record.

If these two values match, Connection Manager will fetch and replace tokens in other connection fields with values from the record, such as Username, Password, Domain, etc...

User Matching

Keeper Records can be assigned to connections by the "Username" field in the connection and the "Login" field in the vault record.

If these two values match, Connection Manager will fetch and replace tokens in other connection fields with values from the record.

As one example, this is useful for mapping a single SSH key to multiple servers. This way, you don't need to store one record per host in the vault. A single Keeper vault record can be used to authenticate any number of connections. Below is a Connection that is set up to match on Username.

The corresponding vault record is seen below. No hostname is specified in the vault record, so the match will occur based on the login field.

For user-based matching, ensure that the Keeper record does not have a Hostname/Port. It should simply contain the username and password (or private key).

Available Tokens

The built-in tokens each correspond to a record field. The table below lists each token and its corresponding record field. These tokens are applicable to all connection types.

Standard Tokens

Domain and Username Splitting

Some username fields are of the format: Domain\Username or Username@Domain but the connection details need only the domain or username. Use these tokens to automatically split these fields and use the corresponding field:

Parameter Token
Description

Alternatively you can set KSM_STRIP_WINDOWS_DOMAINS to true in guacamole.properties to automatically strip all login fields into separate 'USERNAME' and 'DOMAIN' fields accessible by tokens

Gateway Tokens

The tokens below are applicable only to connection types that have gateway support (RDP).

Windows Username/Domain Parsing

KCM will identify the Domain, Username and Password fields from the Keeper Vault record, as long as there is a field with the corresponding name. For example:

Automatic Parsing of Domain from Login Field

The Windows "Domain" and "Username" field can be parsed if the Login value in the Keeper Vault is supplied in the format of DOMAIN\Username or Domain@Username.

To activate automatic parsing, the environmental variable KSM_STRIP_WINDOWS_DOMAINS must be added to the Docker Config file.

For example:

In the record, the Login field can then contain

MySQL / MariaDB Configuration Properties

Advanced configuration properties for MySQL

The properties listed here are only applicable if MySQL authentication is being used. Support for MySQL authentication is. If using, support for MySQL authentication is instead configured using environment variables.

    • Minimum password length and complexity

    • Minimum/maximum password age

    • Password reuse prevention

    • General connection concurrency limits

    • Per-user concurrency limits

    • Absolute concurrency limits

TCP connection information

The TCP connection details for the MySQL / MariaDB database.

Property name
Default value
Description

Database name and credentials

The name of the database to use, as well as the credentials to use when connecting to the database. These properties are required if one of the database authentication extensions will be used.

Property name
Description

Database password policies

Restrictions that should be applied to all database users with respect to password complexity, length, change frequency, and reuse.

These properties do not affect users defined outside the database.

Minimum password length and complexity

Property name
Default value
Description

Minimum/maximum password age

Property name
Description

Password reuse prevention

Property name
Description

Database concurrent connection limits

Concurrent usage restrictions that should be enforced by default across all connections. With the exception the absolute concurrency limit, each of these restrictions may be overridden by the administrator on a per-connection basis by editing the connection.

General connection concurrency limits

Property name
Default value
Description

Per-user concurrency limits

Property name
Default value
Description

Absolute concurrency limits

Property name
Default value
Description

Database user account requirements

Whether authentication via other extensions is allowed for users that do not exist within the MySQL / MariaDB database. If set to "true", authentication attempts will be denied unless the authenticated user has been defined within the database.

Property name
Default value
Description

Connecting KCM to your Vault

Using the Keeper Vault to create privileged sessions

To connect KCM to your vault, we utilize Keeper Secrets Manager (KSM). KSM must first be enabled in the role policy enforcement settings of the role you are a member of (from the Admin Console). Then, you will see the tab "Secrets Manager" in your vault on the left side.

Summary

With your server credentials in a shared folder in your vault, we will map the shared folder to a KSM application, and then put a Base64 token that we will generate into your docker-compose.yml file on your KCM instance to allow access.

Configuration Steps

Below are the steps to establishing the integration between Keeper Connection Manager and Keeper Secrets Manager.

(1) Set up your Keeper Vault

In your Keeper Vault, create a Shared Folder that is populated with credentials that will be used for making connections. In the example below you can see a shared folder called "Connection Manager Secrets" that includes a Windows 2022 Server password, SSH Key, MySQL Database, etc...

(2) Install Keeper Commander CLI

Our CLI tool will allow you to quickly set up the configuration.

There's a few ways to install Commander. We provide binary installers, pip3 packages or Python source code. The top level installation page is here:

(3) Login to Commander

After installation of Commander, login to the CLI:

In the example screenshot below, I'm logging in with a Keeper admin account using a FIDO2 key and Master Password. Depending on your security settings, you may have to pass device verification, MFA and password entry.

(3) Get the Shared Folder UID

The command lsf will list the Shared Folders and display the UID.

In this example, the Shared Folder UID we're using is zyMiCn8596yvMln4YwdEdA

(4) Create an Application

A Secrets Manager application is created in the vault, which is assigned to the Shared Folder. An application is made up of one or more devices. Here we will create a Secrets Manager application and then retrieve the Application UID.

The resulting Secrets Manager App UID in this example is YGHY7nWrvkzEzF0I2AuFfg

(5) Assign the Shared Folder to the Application

In this step, we will assign our Shared Folder to the application.

If successful, you will get the response "Successfully added secrets to app".

(6) Generate a Client Configuration

In this step, we will create a client device configuration. This client device configuration will be directly provided to the Connection Manager.

The "Initialized Config" section in green must now be added to the Keeper Connection Manager configuration file. The location of the configuration will depend on which method of installation, as described in the next section.

Copy the token for the next section where it will be initialized

Advanced Linux Install Method

If you installed Keeper Connection Manager using the Advanced Linux Install method, you can install the Keeper Secrets Manager package as you would other Keeper Connection Manager plugins. The vault integration package is named "kcm-guacamole-vault-ksm"

To ensure that the linux machine is capable of generating enough entropy for random number generation, we recommend installing the haveged package.

These packages can be installed using the commands below:

To complete setup, simply add the base64 format configuration (from Step 6 above) to your /etc/guacamole/guacamole.properties file with the ksm-config value.

Then, restart the guacamole process as you typically would.

Test Login and Initialize Token

Now that the KSM integration is completed, please ensure that you're able to login normally to Keeper Connection Manager and open connections. If errors occur, please check the log files.

If you are unable to login or launch connections, see the section to learn how to check the log files.

Configuration Steps

1) In your vault, create a shared folder and put your credential(s) records into this shared folder. We need the shared folder now, but we can add credentials to it later.

2) From the secrets manager tab, create a secrets manager application and choose the shared folder. Then go to Devices > Edit > Add Device > Method: Configuration File > Base64 and copy and/or download the base64 token.

3) On your KCM server itself, we will edit the file /etc/kcm-setup/docker-compose.yml and add the Base64 token into the guacamole section, under the environment section.

4) Save the file and run the upgrade command to bring in the changes.

5) From the KCM web interface, create a new connection (or clone an existing one). Now, we can use dynamic tokens to pull in the credentials by matching the hostname/IP in KCM with the hostname/IP in your record in the shared folder that is tied to this KSM application. There are many options including ${KEEPER_SERVER_USERNAME} and ${KEEPER_SERVER_PASSWORD}.

You can continue to explore the capabilities on the dynamic tokens page

Advanced Configuration

Advanced configuration and custom integration options

Apache Guacamole is configured using files within the /etc/guacamole directory, commonly referred to as GUACAMOLE_HOME. The two primary components of the Apache Guacamole stack, guacd and the Guacamole web application, both have their own dedicated configuration files within /etc/guacamole. Keeper Connection Manager includes default, skeleton versions of these files.

Filename
Description

Installing and configuring included extensions

Supported extensions, such as those provided by the Keeper Connection Manager packages, are installed through installing their corresponding packages. If you are using extensions are automatically installed using the above packages depending on the environment variables provided when the container is first started.

Extension
Package name
Docker image environment variables

The Keeper Connection Manager packages for supported extensions will automatically create symbolic links to install themselves and any needed libraries/drivers. You do not need to manually create links, copy files, etc. for the extensions which are provided within the Keeper Connection Manager repository.

Installing custom / third-party extensions

Custom extensions, such as, are installed by placing their corresponding .jar files within /etc/guacamole/extensions. If those extensions require additional libraries, such as JDBC drivers, the .jar files for those libraries are placed within /etc/guacamole/lib.

Filename
Description

Note that support is not provided for custom extensions with the following exceptions:

Applying custom branding

Custom branding is applied through branding extensions, such as. If you have a custom branding extension and wish to apply that branding to your deployment of Keeper Connection Manager, you must:

  1. Remove the symbolic link to the default Keeper Connection Manager branding, located at /etc/guacamole/extensions/_kcm-branding.jar. The kcm-guacamole package considers the existence/absence of this link to be an aspect of configuration and is designed to allow this symbolic link to be removed. If using the Docker image, this can also be accomplished by setting the USE_DEFAULT_BRANDING environment variable to "N".

  2. Copy the extension's .jar file to /etc/guacamole/extensions/.

  3. Restart Tomcat

You may need to clear cache within browsers that have already visited your deployment.

AWS EC2 Discovery

Discover and connect to EC2 instances

Overview

Keeper Connection Manager integrates with Amazon AWS to perform automatic discovery and connection to EC2 instances. This makes it fast and easy to connect to any EC2 instance in your cloud environment without having to manually configure anything. Like other connections, the EC2 instance connections are privileged, which means that the end-user does not have access to the underlying credentials.

Once activated, the EC2 instances will appear on the home screen of Keeper Connection Manager as seen below.

Features of the Integration

  • Instant discovery of EC2 instances in your AWS environment

  • Restrict permissions to a defined User Group

  • PEM files can be managed either on the filesystem or Keeper Vault

AWS Setup

In order to integrate Keeper Connection Manager with Amazon AWS, you'll need to create a user and assign a role policy that has permission to read instance information. A sample policy with minimal permissions is below:

Assign the permission to a user and then create access keys.

Installation

Create Group

Before configuring the environment, ensure that you have a Group called "AWS EC2 Administrators" that are assigned to the users who will have access to discovered instances. The group name can also be customized through the AWS_DISCOVERY_ADMIN_GROUP environmental variable.

Advanced Linux Method

If you have installed Keeper Connection Manager using the Advanced Linux Install method, follow the steps below to activate the AWS EC2 discovery feature.

(1) Install the KCM Cloud Connector package

If you are using the Advanced Linux Install method, you can use yum install to install the KCM Cloud Connector package:

(2) Edit the Guacamole Properties File

Edit /etc/guacamole/guacamole.properties to include the mandatory and optional properties for the AWS Cloud Connector feature.

Available Properties

aws-discovery-access-key-id

The access key ID for the AWS account that should be used to authenticate with AWS (Required).

aws-discovery-secret-key

The secret key associated with the access key (Required).

aws-discovery-regions

Comma-separated list of regions to query for EC2 instances, such as us-west-1,us-east-1 (Required).

aws-discovery-instance-base-path

The name of the organizational connection group that should be used to house the EC2 instances for convenience. By default, this will be “Amazon EC2“ (Optional).

aws-discovery-admin-group

The name of the User Group in Keeper Connection Manager to require for any user to see the discovered EC2 instances. By default, this will be a group called “AWS EC2 Administrators". This can also be assigned to a Group that has been provisioned from Azure AD or other directory integrations (Optional).

aws-discovery-record-connections-by-default

If this property is set to "true", screen recording will be enabled by default on all connections (Optional).

Connection session recording can also be set at an individual machine level using the "kcm:record" EC2 instance tag, which can be set to "true" or "false" to explicitly enable or disable connection recording.

(3) Copy .pem files into the guac_keys folder

Add any required PEM files for private keys used to access Linux instances or decrypt Windows passwords to /etc/guacamole/cloud-connector-secrets/aws/

(4) Restart the Guacamole service

The new package will not take effect until the web application is restarted.

Instance Configuration with Tags

Connections can be configured using AWS EC2 tags assigned to each instance, in order to override and customize defaults and metadata.

Available Tags

kcm:username

The username that should be used when connecting to that instance.

This tag defines the login username for the instance, such as "centos" or "ec2-user". KCM attempts to select the correct username based on the AMI of the instance, but this can be used to correct a wrong assumption.

kcm:organize

The full path of the connection groups that should be used to organize the instance among other connections.

This tag Allows EC2 instances to be further organized beyond the connection group containing all instances. By default, all discovered instances will be placed within one top-level group of connections called "Amazon EC2", but will not be further organized. For example, if you set kcm:organize to something like "Databases", that instance will be located within a "Databases" connection group beneath "Amazon EC2". If you set kcm:organize to "Databases/MySQL", that instance will be within a "MySQL" connection group beneath "Databases", which itself would be beneath the main "Amazon EC2" group.

These connection groups do not need to already exist, and they actually exist only in memory (dynamically maintained by the EC2 support).

kcm:record

Flag to indicate if the instance connection sessions should be recorded.

This tag will override the default screen recording configuration of the KCM environment property aws-discovery-record-connections-by-default . If this tag exists with the value "true", the connection will be recorded, if "false", the connection will not be recorded. If the tag does not exist, or is set to any other value, the configured default recording behavior will be used.

Key File Permissions

Filename

  • The key files must be named exactly as referenced in the EC2 console, e.g. MyServer

  • The key files must be named with a .pem file extension, for example MyServer.pem

Permissions

The service in the "guacamole" docker container is run by the "guacamole" user. File permissions must be configured properly in the volume mount to ensure that the "guacamole" user has read access to the shared key files.

Example: On the host under /var/lib/guac_keys/ the files may be owned by ec2-user or whatever you have set up.

In the container the files may show owned by "1000" or some other user ID.

There are two ways of solving the file permissions between the host and the guacamole container.

(1) You may use the environmental variables GUACAMOLE_UID and GUACAMOLE_GID in the guacamole docker definition to map the permission.

This change has the following result:

  • Updates the ownerships of existing files from the old UID of the guacamole user to the specified value.

  • Updates the UID of the guacamole user in the container to match that value.

(2) You can set wider group or world read permissions on the files from the host, but this is a decision based on your environment and security settings.

Ensure that you upgrade the containers for the change to take effect.

(kcm-setup.run upgrade or docker-compose up -d)

Key Files with Passphrases

If the .pem key is encrypted with a passphrase, you will be prompted for this when establishing the connection to the target.

sqlserver-hostname

localhost

The hostname of the database server.

sqlserver-port

1433

The port of the SQL Server service running on the database server.

sqlserver-database

The name of the database that Guacamole should issue queries against.

sqlserver-username

The username of the user that Guacamole should use to connect to the database.

sqlserver-password

The password Guacamole should provide when authenticating with the database.

sqlserver-user-password-min-length

0

The minimum length of each password, in characters. If specified, users will not be able to change their passwords to values that are not at least this length. By default, no minimum length is enforced. Empty passwords are never allowed.

sqlserver-user-password-require-multiple-case

false

If set to "true", require that all passwords contain at least one uppercase character and one lowercase character. By default, passwords are not required to contain mixed case.

sqlserver-user-password-require-symbol

false

If set to "true", require that all passwords contain at least one symbol, where a "symbol" is any non-alphanumeric character. By default, passwords are not required to contain symbols.

sqlserver-user-password-require-digit

false

If set to "true", require that all passwords contain at least one digit, where a "digit" is any numeric character. By default, passwords are not required to contain digits.

sqlserver-user-password-prohibit-username

false

If set to "true", prohibit passwords from containing the user's own username, regardless of case. By default, use of the user's own username within their password is not prevented.

sqlserver-user-password-min-age

The minimum number of days that must elapse between password changes (preventing users from changing passwords too frequency and defeating password reuse protections). By default, frequency of password changes is not restricted.

sqlserver-user-password-max-age

The maximum number of days that may elapse before users are required to change their passwords. By default, users passwords do not automatically expire.

sqlserver-user-password-history-size

The number of past passwords that should be remembered for each user. If specified, users will be prevented from reusing any of these passwords. By default, reuse of past passwords is not prevented.

sqlserver-default-max-connections

0

The maximum number of concurrent connections to allow to any particular connection, where "0" represents unlimited. By default, no overall concurrency limits are enforced on connections.

sqlserver-default-max-group-connections

0

The maximum number of concurrent connections to allow to any particular balancing connection group, where "0" represents unlimited. By default, no overall concurrency limits are enforced on connection groups.

sqlserver-default-max-connections-per-user

0

The maximum number of concurrent connections to allow to any individual user to establish to a connection, where "0" represents unlimited. By default, no per-user concurrency limits are enforced on connections.

sqlserver-default-max-group-connections-per-user

1

The maximum number of concurrent connections to allow to any individual user to establish to a balancing connection group, where "0" represents unlimited. By default, no each user is limited to a single connection for each balancing connection group, to avoid allowing any one user to exhaust the available connections within that group..

sqlserver-absolute-max-connections

0

The absolute maximum number of concurrent connections to allow to the Guacamole server as a whole, regardless of which users are establishing those connections and which connections or groups are being accessed, where "0" represents unlimited. By default, no absolute concurrent restrictions are enforced.

sqlserver-user-required

false

If set to "true", require that all successful authentication attempts be associated with a user defined within SQL Server. If a user authentications successfully via another mechanism (such as LDAP), that attempt will still be denied if no corresponding SQL Server user exists. By default, successful authentication attempts will be considered successful regardless of whether an account for that user exists within SQL Server.

installed using the kcm-guacamole-auth-jdbc-sqlserver package
the keeper/guacamole Docker image
TCP connection information
Database name and credentials
Database password policies
Database concurrent connection limits
Database user account requirements

mysql-hostname

localhost

The hostname of the database server.

mysql-port

3306

The port of the MySQL or MariaDB service running on the database server.

mysql-database

The name of the database that Guacamole should issue queries against.

mysql-username

The username of the user that Guacamole should use to connect to the database.

mysql-password

The password Guacamole should provide when authenticating with the database.

mysql-user-password-min-length

0

The minimum length of each password, in characters. If specified, users will not be able to change their passwords to values that are not at least this length. By default, no minimum length is enforced. Empty passwords are never allowed.

mysql-user-password-require-multiple-case

false

If set to "true", require that all passwords contain at least one uppercase character and one lowercase character. By default, passwords are not required to contain mixed case.

mysql-user-password-require-symbol

false

If set to "true", require that all passwords contain at least one symbol, where a "symbol" is any non-alphanumeric character. By default, passwords are not required to contain symbols.

mysql-user-password-require-digit

false

If set to "true", require that all passwords contain at least one digit, where a "digit" is any numeric character. By default, passwords are not required to contain digits.

mysql-user-password-prohibit-username

false

If set to "true", prohibit passwords from containing the user's own username, regardless of case. By default, use of the user's own username within their password is not prevented.

mysql-user-password-min-age

The minimum number of days that must elapse between password changes (preventing users from changing passwords too frequency and defeating password reuse protections). By default, frequency of password changes is not restricted.

mysql-user-password-max-age

The maximum number of days that may elapse before users are required to change their passwords. By default, users passwords do not automatically expire.

mysql-user-password-history-size

The number of past passwords that should be remembered for each user. If specified, users will be prevented from reusing any of these passwords. By default, reuse of past passwords is not prevented.

mysql-default-max-connections

0

The maximum number of concurrent connections to allow to any particular connection, where "0" represents unlimited. By default, no overall concurrency limits are enforced on connections.

mysql-default-max-group-connections

0

The maximum number of concurrent connections to allow to any particular balancing connection group, where "0" represents unlimited. By default, no overall concurrency limits are enforced on connection groups.

mysql-default-max-connections-per-user

0

The maximum number of concurrent connections to allow to any individual user to establish to a connection, where "0" represents unlimited. By default, no per-user concurrency limits are enforced on connections.

mysql-default-max-group-connections-per-user

1

The maximum number of concurrent connections to allow to any individual user to establish to a balancing connection group, where "0" represents unlimited. By default, no each user is limited to a single connection for each balancing connection group, to avoid allowing any one user to exhaust the available connections within that group..

mysql-absolute-max-connections

0

The absolute maximum number of concurrent connections to allow to the Guacamole server as a whole, regardless of which users are establishing those connections and which connections or groups are being accessed, where "0" represents unlimited. By default, no absolute concurrent restrictions are enforced.

mysql-user-required

false

If set to "true", require that all successful authentication attempts be associated with a user defined within MySQL. If a user authentications successfully via another mechanism (such as LDAP), that attempt will still be denied if no corresponding MySQL user exists. By default, successful authentication attempts will be considered successful regardless of whether an account for that user exists within MySQL.

installed using thekcm-guacamole-auth-jdbc-mysql package
the keeper/guacamole Docker image
TCP connection information
Database name and credentials
Database password policies
Database concurrent connection limits
Database user account requirements

Parameter Token

Description

${KEEPER_SERVER_USERNAME}

Retrieves: “Login” field of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

${KEEPER_SERVER_KEY}

Retrieves: “Private Key” field (or single .pem file attachment) of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

${KEEPER_SERVER_PASSPHRASE}

Retrieves: “Passphrase” field (or “password” if no passphrase) of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

${KEEPER_SERVER_PASSWORD}

Retrieves: “Password” field of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

${KEEPER_SERVER_DOMAIN}

Retrieves: “Domain” custom field of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

${KEEPER_USER_KEY}

Retrieves: “Private Key” field (or single .pem file attachment) of single matched record

Matches: Record with login matching the “username” connection parameter.

${KEEPER_USER_PASSPHRASE}

Retrieves: “Passphrase” field (or “password” if no passphrase) of single matched record

Matches: Record with login matching the “username” connection parameter

${KEEPER_USER_PASSWORD}

Retrieves: “Password” field of single matched record

Matches: Record with login matching the “username” connection parameter

${KEEPER_USER_DOMAIN}

Retrieves: “Domain” custom field of single matched record

Matches: Record with login matching the “username” connection parameter

${KEEPER_*_DOMAIN}

Retrieves: “Domain” part of the "Login" field of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

${KEEPER_*_USERNAME}

Retrieves: “Username” part of the "Login" field of single matched record

Matches: Record with hostname / IP address matching the value of the “hostname” connection parameter.

Parameter Token

Description

${KEEPER_GATEWAY_USERNAME}

Retrieves: “Login” field of single matched record

Matches: Record with hostname / IP address matching the value of the “gateway-hostname” connection parameter.

${KEEPER_GATEWAY_KEY}

Retrieves: “Private Key” field (or single .pem file attachment) of single matched record

Matches: Record with hostname / IP address matching the value of the “gateway-hostname” connection parameter.

${KEEPER_GATEWAY_PASSPHRASE}

Retrieves: “Passphrase” field (or “password” if no passphrase) of single matched record

Matches: Record with hostname / IP address matching the value of the “gateway-hostname” connection parameter.

${KEEPER_GATEWAY_PASSWORD}

Retrieves: “Password” field of single matched record

Matches: Record with hostname / IP address matching the value of the “gateway-hostname” connection parameter.

${KEEPER_GATEWAY_USER_KEY}

Retrieves: “Private Key” field (or single .pem file attachment) of single matched record

Matches: Record with login matching the “gateway-username” connection parameter.

${KEEPER_GATEWAY_USER_PASSPHRASE}

Retrieves: “Passphrase” field (or “password” if no passphrase) of single matched record

Matches: Record with login matching the “gateway-username” connection parameter

${KEEPER_GATEWAY_USER_PASSWORD}

Retrieves: “Password” field of single matched record

Matches: Record with login matching the “gateway-username” connection parameter

docker-compose.yml
            ....
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            KSM_CONFIG: "XXX"
            ....
            ....
            KSM_STRIP_WINDOWS_DOMAINS: "true"
            ....
Example of Linux Connection Matching
SSH Connection with Secrets Manager Integration
Example of Windows Login
Example Connection with User Matching
Vault Record match on User
Domain Matching on Custom Field
Automatic Parsing of Domain from Login Field
$ keeper shell
...
...

Not Logged In> login [email protected]
...
...

My Vault> 
secrets-manager app create "Connection Manager Example"

secrets-manager app get "Connection Manager Example"

Secrets Manager Application
App Name: Connection Manager Example
App UID: YGHY7nWrvkzEzF0I2AuFfg
secrets-manager share add --app "Connection Manager Example" --secret zyMiCn8596yvMln4YwdEdA
secrets-manager client add --app "Connection Manager Example" --config-init b64 --name "KCM Device" --unlock-ip
$ sudo yum install kcm-guacamole-vault-ksm
sudo yum install epel-release
sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable haveged
guacamole.properties
ksm-config: eyJob3N0bm[...]1IzRTN2UVNTNkhsb0NZQW9nUmlPVlY5cjhvUT0ifQ==
$ sudo systemctl restart guacamole
guacamole:
    image: keeper/guacamole:2
    restart: unless-stopped
    volumes:
        - common-storage:/var/lib/guacamole
    environment:
        ACCEPT_EULA: "Y"
        GUACD_HOSTNAME: "guacd"
        MYSQL_HOSTNAME: "db"
        MYSQL_DATABASE: "guacamole_db"
        MYSQL_USERNAME: "guacamole_user"
        MYSQL_PASSWORD: "xxxxxxx"
        KSM_CONFIG: "paste token here"
        
sudo ./kcm-setup.run upgrade
https://docs.keeper.io/secrets-manager/commander-cli/commander-installation-setup
troubleshooting
https://docs.keeper.io/keeper-connection-manager/vault-integration/dynamic-tokens
Shared Folder in the Keeper Vault
Login to Keeper Commander
List Shared Folders
Generate Initialized Configuration

/etc/guacamole/guacd.conf

The configuration file for the Apache Guacamole proxy daemon, "guacd". This file and the guacd service are provided by the kcm-guacd package.

/etc/guacamole/guacamole.properties

The configuration file for the Apache Guacamole web application. This file and the Guacamole web application are provided by the kcm package.

/etc/guacamole/ldap-servers.yml

A YAML file describing the LDAP servers available to authenticate Guacamole users. As the full details of a single LDAP server can be described using guacamole.properties, this file is primarily of use if multiple LDAP servers need to be used, particularly if the set of users available may vary by LDAP server. A skeleton version of this file is provided by the kcm-guacamole-auth-ldap package.

/etc/guacamole/user-mapping.xml

An XML mapping of users to connections which Apache Guacamole can use by default without any additional extensions, primarily intended for initial testing. A skeleton version of this file is provided by the kcm package.

Production use of this file is not recommended.

Active Directory / LDAP support

kcm-guacamole-auth-ldap

LDAP_*

Duo two-factor authentication

kcm-guacamole-auth-duo

DUO_*

Encrypted JSON authentication

kcm-guacamole-auth-json

JSON_*

MySQL / MariaDB database support

kcm-guacamole-auth-jdbc-mysql

MYSQL_*

PostgreSQL database support

kcm-guacamole-auth-jdbc-postgresql

POSTGRES_*

SQL Server database support

kcm-guacamole-auth-jdbc-sqlserver

SQLSERVER_*

TOTP two-factor authentication

kcm-guacamole-auth-totp

TOTP_*

SAML 2.0 / SSO Integration

kcm-guacamole-auth-saml

SAML_*

OpenID Connect Integration

kcm-guacamole-auth-openid

OPENID_*

/etc/guacamole/extensions/

The directory in which extension .jar files should be placed. Tomcat must be restarted after extension .jar files are added or removed.

/etc/guacamole/lib/

The directory in which library .jar files required by installed extensions should be placed. Libraries within this directory will be available within the classpath for all extensions.

the keeper/guacamole Docker image,
custom branding provided as part of a Keeper Connection Manager subscription
Branding extensions which we have provided as part of a subscription
Subscriptions which explicitly extend support to include custom / third-party extensions
the branding extensions we provide on request as part of a Keeper Connection Manager subscription
keeper/guacamole
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeImages",
                "ec2:GetPasswordData",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}
sudo yum install kcm-cloud-connector-aws
sudo systemctl restart guacamole
[root@xxx guac_keys]# ls -l
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoMac.pem
-rw------- 1 ec2-user ec2-user 1678 Jul 29 18:31 kcmdemo.pem
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoUbuntu.pem
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoWindows.pem
-rw------- 1 ec2-user ec2-user 1678 Jul 29 18:30 KCMKaliLinux.pem
[root@1dd8996db434 aws]# ls -l
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoMac.pem
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoUbuntu.pem
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoWindows.pem
-rw------- 1 1000 1000 1678 Jul 29 18:30 KCMKaliLinux.pem
-rw------- 1 1000 1000 1678 Jul 29 18:31 kcmdemo.pem
            GUACAMOLE_UID: 1000
            GUACAMOLE_GID: 1000
Amazon EC2 Discovery
Add permissions

PostgreSQL Configuration Properties

Advanced configuration properties for PostgreSQL

The properties listed here are only applicable if PostgreSQL authentication is being used. Support for PostgreSQL authentication is installed using thekcm-guacamole-auth-jdbc-postgresql package. If using the keeper/guacamole Docker image, support for PostgreSQL authentication is instead configured using environment variables.

  • TCP connection information

  • Database name and credentials

  • Database password policies

    • Minimum password length and complexity

    • Minimum/maximum password age

    • Password reuse prevention

  • Database concurrent connection limits

    • General connection concurrency limits

    • Per-user concurrency limits

    • Absolute concurrency limits

  • Database user account requirements

TCP connection information

The TCP connection details for the PostgreSQL database.

Property name
Default value
Description

postgresql-hostname

localhost

The hostname of the database server.

postgresql-port

5432

The port of the PostgreSQL service running on the database server.

Database name and credentials

The name of the database to use, as well as the credentials to use when connecting to the database. These properties are required if one of the database authentication extensions will be used.

Property name
Description

postgresql-database

The name of the database that Guacamole should issue queries against.

postgresql-username

The username of the user that Guacamole should use to connect to the database.

postgresql-password

The password Guacamole should provide when authenticating with the database.

Database password policies

Restrictions that should be applied to all database users with respect to password complexity, length, change frequency, and reuse.

These properties do not affect users defined outside the database.

Minimum password length and complexity

Property name
Default value
Description

postgresql-user-password-min-length

0

The minimum length of each password, in characters. If specified, users will not be able to change their passwords to values that are not at least this length. By default, no minimum length is enforced. Empty passwords are never allowed.

postgresql-user-password-require-multiple-case

false

If set to "true", require that all passwords contain at least one uppercase character and one lowercase character. By default, passwords are not required to contain mixed case.

postgresql-user-password-require-symbol

false

If set to "true", require that all passwords contain at least one symbol, where a "symbol" is any non-alphanumeric character. By default, passwords are not required to contain symbols.

postgresql-user-password-require-digit

false

If set to "true", require that all passwords contain at least one digit, where a "digit" is any numeric character. By default, passwords are not required to contain digits.

postgresql-user-password-prohibit-username

false

If set to "true", prohibit passwords from containing the user's own username, regardless of case. By default, use of the user's own username within their password is not prevented.

Minimum/maximum password age

Property name
Description

postgresql-user-password-min-age

The minimum number of days that must elapse between password changes (preventing users from changing passwords too frequency and defeating password reuse protections). By default, frequency of password changes is not restricted.

postgresql-user-password-max-age

The maximum number of days that may elapse before users are required to change their passwords. By default, users passwords do not automatically expire.

Password reuse prevention

Property name
Description

postgresql-user-password-history-size

The number of past passwords that should be remembered for each user. If specified, users will be prevented from reusing any of these passwords. By default, reuse of past passwords is not prevented.

Database concurrent connection limits

Concurrent usage restrictions that should be enforced by default across all connections. With the exception the absolute concurrency limit, each of these restrictions may be overridden by the administrator on a per-connection basis by editing the connection.

General connection concurrency limits

Property name
Default value
Description

postgresql-default-max-connections

0

The maximum number of concurrent connections to allow to any particular connection, where "0" represents unlimited. By default, no overall concurrency limits are enforced on connections.

postgresql-default-max-group-connections

0

The maximum number of concurrent connections to allow to any particular balancing connection group, where "0" represents unlimited. By default, no overall concurrency limits are enforced on connection groups.

Per-user concurrency limits

Property name
Default value
Description

postgresql-default-max-connections-per-user

0

The maximum number of concurrent connections to allow to any individual user to establish to a connection, where "0" represents unlimited. By default, no per-user concurrency limits are enforced on connections.

postgresql-default-max-group-connections-per-user

1

The maximum number of concurrent connections to allow to any individual user to establish to a balancing connection group, where "0" represents unlimited. By default, no each user is limited to a single connection for each balancing connection group, to avoid allowing any one user to exhaust the available connections within that group..

Absolute concurrency limits

Property name
Default value
Description

postgresql-absolute-max-connections

0

The absolute maximum number of concurrent connections to allow to the Guacamole server as a whole, regardless of which users are establishing those connections and which connections or groups are being accessed, where "0" represents unlimited. By default, no absolute concurrent restrictions are enforced.

Database user account requirements

Whether authentication via other extensions is allowed for users that do not exist within the PostgreSQL database. If set to "true", authentication attempts will be denied unless the authenticated user has been defined within the database.

Property name
Default value
Description

postgresql-user-required

false

If set to "true", require that all successful authentication attempts be associated with a user defined within PostgreSQL. If a user authentications successfully via another mechanism (such as LDAP), that attempt will still be denied if no corresponding PostgreSQL user exists. By default, successful authentication attempts will be considered successful regardless of whether an account for that user exists within PostgreSQL.

Keyboard Shortcuts

Keeper Connection Manager PostgreSQL connections utilize EMACS-like commands for more powerful text editing. In order to utilize all of these commands, shortcuts are bound to specific Commands.

Note that some shortcuts may be captured by your browser, browser extensions, operating system, or other applications

Common Actions

Copy and Paste

To copy a region of text, first you need to select the text. The easiest way to do this is to highlight the text using your mouse curser.

To Copy

The copy command is Ctrl-c or Meta-w

Hold the Ctrl key and press the c key or press and release the ESC key then press and release the w key.

To Paste

The Paste command is sometimes referred to as 'Yank' and is activated with Ctrl-v or Ctrl-Y

Hold the Ctrl key and press the v key or press and hold Ctrl the click the y key.

Move to Beginning or End of Line

The cursor can be moved to the beginning or the end of the current line.

Move to Beginning

This command is done with Ctrl-A or the Home key

Click Home or hold the Ctrl key and hit the a key

Move to End

This command is done with Ctrl-E or the End key

Click End or hold the Ctrl key and hit the e key

Complete List of Shortcuts

See the complete list of available commands and shortcuts below.

In this table "Meta-" refers to hitting the ESC key followed by the shown key. For example to use Meta-B (ed-prev-word) hit ESC then release, then hit B and release. Optionally a Meta key can be setup on your keyboard.

Shortcut

Editor Command

Ctrl-@, NUL

set cursor where the mouse is located

Ctrl-A

move cursor to beginning of line

Ctrl-B

move cursor back one character

Ctrl-C

clear the terminal

Ctrl-D

close the current connection

Ctrl-E

move cursor to end of line

Ctrl-F

move cursor one character forward

Ctrl-H, Backspace

delete previous character

Ctrl-J, LF

newline

Ctrl-K

cut line

Ctrl-L, FF

clear screen

Ctrl-M, CR

newline

Ctrl-N

next history

Ctrl-O

tty flush output

Ctrl-P

previous history

Ctrl-Q

tty start output

Ctrl-R

redisplay

Ctrl-S

tty stop output

Ctrl-T

transpose characters

Ctrl-U

cut line

Ctrl-V

quoted insert

Ctrl-W

cut highlighted region

Ctrl-X

sequence lead in

Ctrl-Y

yank (paste)

Ctrl-Z, TSTP

tty sigtstp

Ctrl-[, ESC

move cursor forward

Ctrl-\, QUIT

tty sigquit

Ctrl-]

tty dsusp

Ctrl-?, DEL

delete previous character

Ctrl-Meta-H

delete previous word

Ctrl-Meta-L

clear screen

Ctrl-Meta-_

copy the previous word

Meta-0 to Meta-9

argument digit

Meta-B

previous word

Meta-C

use capitol case

Meta-D

delete next word

Meta-F

move to next word

Meta-L

lower case

Meta-N

search next history

Meta-O

sequence lead in

Meta-P

search previous history

Meta-U

upper case

Meta-W

copy highlighted region

Meta-X

command

Meta-[

sequence lead in

Meta-p

search previous history

Ctrl-Meta-?

delete previous word

Security Architecture

Keeper Connection Manager security and encryption model

Keeper is Fanatical About Data Protection

Keeper utilizes best-in-class security with a zero-trust framework and zero-knowledge security architecture to safeguard your infrastructure and mitigate the risk of a data breach.

Overview

Keeper Security, Inc. (KSI) is passionate about protecting its customer's information and infrastructure with Keeper desktop and mobile security software. Millions of consumers and businesses trust Keeper to secure and access remote systems, passwords and private information. Keeper's software is constantly improved and updated to provide our customers with the latest in technology and protection. This page provides an overview of Keeper's security architecture and encryption methodologies.

System Architecture

The Keeper Connection Manager Gateway is a platform that is fully hosted by the customer in any cloud, on-prem or virtual environment. This documentation is focused on the method.

Apache Guacamole™

The engineering team at Keeper Security that built Keeper Connection Manager (formerly Glyptodon) are the inventors and primary maintainers of the open source project. Keeper Security is proud to support the open source community and millions of users who use the Apache Guacamole remote desktop software.

Least Privilege Access

The packages provided by Keeper Connection Manager have been designed to follow best practices with respect to security, particularly with respect to the . This is accomplished through careful delegation of rights through users and groups which are automatically created by the Keeper Connection Manager packages, and through strict file permissions.

If you deployed Keeper Connection Manager using the Advanced Linux Install method, we recommend using a reverse proxy like Apache or NGINX for SSL termination. We provide documentation for configuring either of these reverse proxies:

In addition, as the user-mapping.xml authentication mechanism is meant only as a quick means of testing Guacamole (it is not supported for production deployments), customers need to migrate to a production-ready authentication mechanism. All authentication methods packaged within Keeper Connection Manager and which are not user-mapping.xml are production-ready:

If you wish to enable multi-factor authentication in front of Keeper Connection Manager, you may do so with Duo or TOTP (the standard supported by Google Authenticator and similar apps). Multi-factor authentication is supported in front of any of the above production-ready authentication mechanisms:

In addition to the above authentication methods, Keeper Connection Manager supports the use of Client Certificates to lock down access to specific machines that are managed by the Enterprise.

Service/System Accounts and Groups

The Keeper Connection Manager packages create the following users and groups in order to limit the access of services within the Guacamole stack:

  • The "guacamole" group - owns all files which the Guacamole web application should be able to read.

  • The "guacd" group - owns all files which the guacd service should be able to read.

  • The "guacd" user - the sole member of the "guacd" group, and the user which runs the guacd service.

When installing Keeper Connection Manager using the Advanced Linux Install method with Tomcat, you will need to ensure the "tomcat" user is a member of the "guacamole" group. If this is not done, the Guacamole web application will not be able to read its own configuration files, and web application startup will fail:

The "guacd" user and group are intentionally limited in privilege. If you need guacd to have access to additional files or directories, such as for file transfer or storing session recordings, you will need to set the ownership and permissions of those files appropriately.

Users and File Ownership

The ownership and permissions of sensitive files like guacamole.properties, user-mapping.xml, and guacd.conf have been set such that only the components of the Apache Guacamole stack that should be able to read those files can read those files, and such that no component within the Guacamole stack can write or otherwise modify those files:

Upgrade Methods

  • Customers who deploy the Advanced Linux Install through package management are provided through Keeper Connection Manager's YUM repository (the “yum” tool will automatically apply updates when the administrator runs the command to do so).

  • Customers who deploy the Auto Docker Install version can use the .

  • Customers who deploy the Docker Compose Install version can use the .

Compliance & Audits

Certified SOC 2 Compliant

Customer vault records are protected using stringent and tightly monitored internal control practices. Keeper is certified as SOC 2 Type 2 compliant in accordance with the AICPA Service Organization Control framework. SOC 2 certification helps ensure that your vault is kept secure through the implementation of standardized controls as defined in the AICPA Trust Service Principles framework.

ISO 27001 Certified (Information Security Management System)

Keeper Security is ISO 27001 certified, covering the Keeper Security Information Management System which supports the Keeper Enterprise Platform. Keeper's ISO 27001 certification is scoped to include the management and operation of the digital vault and cloud services, software and application development, and protection of digital assets for the digital vault and cloud services.

GDPR Compliance

Keeper is GDPR compliant and we are committed to ensuring our business processes and products continue to maintain compliance for our customers in the European Union. to learn more about Keeper's GDPR compliance and download data processing agreements.

Protection of Patient Medical Data

Keeper software is compliant with global, medical data protection standards covering, without limitation, HIPAA (Health Insurance Portability and Accountability Act) and DPA (Data Protection Act).

HIPAA Compliance and Business Associate Agreements

Keeper is a SOC2-certified and ISO 27001-certified zero-knowledge security platform that is HIPAA compliant. Strict adherence and controls covering privacy, confidentiality, integrity and availability are maintained. With this security architecture, Keeper cannot decrypt, view or access any information, including ePHI, stored in a user’s Keeper Vault. For the foregoing reasons, Keeper is not a Business Associate as defined in the Health Insurance Portability and Accountability Act (HIPAA), and therefore, is not subject to a Business Associate Agreement.

To learn more about the additional benefits for healthcare providers and health insurance companies, please read our and visit our .

Penetration Testing

Keeper performs quarterly pen testing with 3rd party experts including and . In addition, Keeper works with independent security researchers who test against all of our products and systems through our .

Third-Party Security Scanning & Penetration Tests

Keeper Security environments are tested daily by TrustedSite to ensure that the Keeper web application and KSI's Cloud Security Vault are secure from known remote exploits, vulnerabilities and denial-of-service attacks. A comprehensive external security scan is conducted monthly on the Keeper websites, Keeper web application, and Keeper Cloud Security Vault by TrustedSite. Keeper staff periodically initiate on-demand external scans.

Payment Processing and PCI Compliance

Keeper Security uses PayPal and Stripe for securely processing credit and debit card payments through the KSI payment website. PayPal and Stripe are PCI-DSS compliant transaction processing solutions. Keeper Security is certified PCI-DSS compliant by McAfee Secure.

EU-US Privacy Shield

The Keeper web client, Android App, Windows Phone App, iPhone/iPad App and browser extensions have been certified Privacy Shield compliant with the U.S. Department of Commerce's EU-U.S. Privacy Shield program, meeting the European Commission's Directive on Data Protection. For more information about the U.S. Department of Commerce U.S. Privacy Shield program, see

FIPS 140-2 Validated

Keeper utilizes FIPS 140-2 validated encryption modules to address rigorous government and public sector security requirements. Keeper’s encryption has been certified by the NIST CMVP and validated to the FIPS 140 standard by accredited third party laboratories. Keeper has been issued under the NIST CMVP.

For the best FIPS experience use KCM version 2.9.6+ for improvements including: - improved FIPS compliance support for SSH and RDP connections - Better log messaging when a compliant connection cannot be made

U.S. Department of Commerce Export Licensed Under EAR

Keeper is certified by the U.S. Department of Commerce Bureau of Industry and Security under Export Commodity Classification Control Number 5D992, in compliance with Export Administration Regulations (EAR). For more information about EAR:

24x7 Remote Monitoring

Keeper is monitored 24x7x365 by a global third-party monitoring network to ensure that our website and Cloud Security Vault are available worldwide. If you have any questions regarding this security disclosure, please .

Phishing or Spoofed Emails

If you receive an email purporting to be sent from KSI and you are unsure if it is legitimate, it may be a “phishing email” where the sender's email address is forged or “spoofed”. In that case, an email may contain links to a website that looks like KeeperSecurity.com but is not our site. The website may ask you for your Keeper Security master password or try to install unwanted software on your computer in an attempt to steal your personal information or access your computer. Other emails contain links that may redirect you to other potentially dangerous web sites. The message may also include attachments, which typically contain unwanted software called "malware." If you are unsure about an email received in your inbox, you should delete it without clicking any links or opening any attachments. If you wish to report an email purporting to be from KSI that you believe is a forgery or you have other security concerns involving other matters with KSI, please .

Hosting Infrastructure Certified to the Strictest Industry Standards

Keeper Connection Manager is hosted by the customer. The Keeper website and cloud storage runs on secure Amazon Web Services (AWS) cloud computing infrastructure. The AWS cloud infrastructure which hosts Keeper's system architecture has been certified to meet the following third-party attestations, reports and certifications:

  • SOC 1 / SSAE 16 / ISAE 3402 (SAS70)

  • SOC 2

  • SOC 3

  • PCI DSS Level 1

  • ISO 27001

  • FedRamp

  • DIACAP

  • FISMA

  • ITAC

  • FIPS 140-2

  • CSA

  • MPAA

Vulnerability Reporting and Bug Bounty Program

Keeper Security is committed to the industry best practice of responsible disclosure of potential security issues. We take your security and privacy seriously are committed to protecting our customers’ privacy and personal data. KSI’s mission is to build world’s most secure and innovative security apps, and we believe that bug reports from the worldwide community of security researchers is a valuable component to ensuring the security of KSI’s products and services.

Keeping our users secure is core to our values as an organization. We value the input of good-faith researchers and believe that an ongoing relationship with the cybersecurity community helps us ensure their security and privacy, and makes the Internet a more secure place. This includes encouraging responsible security testing and disclosure of security vulnerabilities.

The Keeper Connection Manager team actively monitors the upstream Apache Guacamole project for newly-disclosed security vulnerabilities, and has procedures in place for releasing security updates outside the normal release cycle. Should a vulnerability be found in Guacamole, the patch for that vulnerability will made be immediately available through the Keeper Connection Manager repository, and can be applied automatically using the upgrade process based on your installation method.

Guidelines

Keeper's Vulnerability Disclosure Policy sets out expectations when working with good-faith researchers, as well as what you can expect from us.

If security testing and reporting is done within the guidelines of this policy, we:

  • Consider it to be authorized in accordance with Computer Fraud and Abuse Act,

  • Consider it exempt from DMCA, and will not bring a claim against you for bypassing any security or technology controls,

  • Consider it legal, and will not pursue or support any legal action related to this program against you,

  • Will work with you to understand and resolve the issue quickly, and

  • Will recognize your contributions publicly if you are the first to report the issue and we make a code or configuration change based on the issue.

If at any time you are concerned or uncertain about testing in a way that is consistent with the Guidelines and Scope of this policy, please contact us at before proceeding.

To encourage good-faith security testing and disclosure of discovered vulnerabilities, we ask that you:

  • Avoid violating privacy, harming user experience, disrupting production or corporate systems, and/or destroying data,

  • Perform research only within the scope set out by the Bugcrowd vulnerability disclosure program linked below, and respect systems and activities which are out-of-scope,

  • Contact us immediately at if you encounter any user data during testing, and

  • You give us reasonable time to analyze, confirm and resolve the reported issue before publicly disclosing any vulnerability finding.

Submitting a Report

Keeper has partnered with Bugcrowd to manage our vulnerability disclosure program.

Please submit reports through .

Additional Information

Keeper Security utilizes best-in-class security with a Zero-Knowledge security architecture and Zero-Trust framework. Additional technical documentation about Keeper's Zero-Knowledge encryption model can be found at the links below:

Keeper is SOC 2 Type 2, ISO27001 certified. Customers may request access to our certification reports, 3rd party penetration reports and technical architecture documentation with a signed mutual NDA.

Keyboard Shortcuts

Keeper Connection Manager MySQL connections utilize EMACS-like commands for more powerful text editing. In order to utilize all of these commands, shortcuts are bound to specific Commands.

Note that some shortcuts may be captured by your browser, browser extensions, operating system, or other applications

Common Actions

Copy and Paste

To copy a region of text, first you need to select the text. The easiest way to do this is to highlight the text using your mouse curser.

To Copy

The copy command is Ctrl-c or Meta-w

Hold the Ctrl key and press the c key or press and release the ESC key then press and release the w key.

To Paste

The Paste command is sometimes referred to as 'Yank' and is activated with Ctrl-v or Ctrl-Y

Hold the Ctrl key and press the v key or press and hold Ctrl the click the y key.

Move to Beginning or End of Line

The cursor can be moved to the beginning or the end of the current line.

Move to Beginning

This command is done with Ctrl-A or the Home key

Click Home or hold the Ctrl key and hit the a key

Move to End

This command is done with Ctrl-E or the End key

Click End or hold the Ctrl key and hit the e key

Complete List of Shortcuts

See the complete list of available commands and shortcuts below.

In this table "Meta-" refers to hitting the ESC key followed by the shown key. For example to use Meta-B (ed-prev-word) hit ESC then release, then hit B and release. Optionally a Meta key can be setup on your keyboard.

Shortcut

Editor Command

Ctrl-@, NUL

set cursor where the mouse is located

Ctrl-A

move cursor to beginning of line

Ctrl-B

move cursor back one character

Ctrl-C

clear the terminal

Ctrl-D

close the current connection

Ctrl-E

move cursor to end of line

Ctrl-F

move cursor one character forward

Ctrl-H, Backspace

delete previous character

Ctrl-J, LF

newline

Ctrl-K

cut line

Ctrl-L, FF

clear screen

Ctrl-M, CR

newline

Ctrl-N

next history

Ctrl-O

tty flush output

Ctrl-P

previous history

Ctrl-Q

tty start output

Ctrl-R

redisplay

Ctrl-S

tty stop output

Ctrl-T

transpose characters

Ctrl-U

cut line

Ctrl-V

quoted insert

Ctrl-W

cut highlighted region

Ctrl-X

sequence lead in

Ctrl-Y

yank (paste)

Ctrl-Z, TSTP

tty sigtstp

Ctrl-[, ESC

move cursor forward

Ctrl-\, QUIT

tty sigquit

Ctrl-]

tty dsusp

Ctrl-?, DEL

delete previous character

Ctrl-Meta-H

delete previous word

Ctrl-Meta-L

clear screen

Ctrl-Meta-_

copy the previous word

Meta-0 to Meta-9

argument digit

Meta-B

previous word

Meta-C

use capitol case

Meta-D

delete next word

Meta-F

move to next word

Meta-L

lower case

Meta-N

search next history

Meta-O

sequence lead in

Meta-P

search previous history

Meta-U

upper case

Meta-W

copy highlighted region

Meta-X

command

Meta-[

sequence lead in

Meta-p

search previous history

Ctrl-Meta-?

delete previous word

Keyboard Shortcuts

Keeper Connection Manager PostgreSQL connections utilize EMACS-like commands for more powerful text editing. In order to utilize all of these commands, shortcuts are bound to specific Commands.

Note that some shortcuts may be captured by your browser, browser extensions, operating system, or other applications

Common Actions

Copy and Paste

To copy a region of text, first you need to select the text. The easiest way to do this is to highlight the text using your mouse curser.

To Copy

The copy command is Ctrl-c or Meta-w

Hold the Ctrl key and press the c key or press and release the ESC key then press and release the w key.

To Paste

The Paste command is sometimes referred to as 'Yank' and is activated with Ctrl-v or Ctrl-Y

Hold the Ctrl key and press the v key or press and hold Ctrl the click the y key.

Move to Beginning or End of Line

The cursor can be moved to the beginning or the end of the current line.

Move to Beginning

This command is done with Ctrl-A or the Home key

Click Home or hold the Ctrl key and hit the a key

Move to End

This command is done with Ctrl-E or the End key

Click End or hold the Ctrl key and hit the e key

Complete List of Shortcuts

See the complete list of available commands and shortcuts below.

In this table "Meta-" refers to hitting the ESC key followed by the shown key. For example to use Meta-B (ed-prev-word) hit ESC then release, then hit B and release. Optionally a Meta key can be setup on your keyboard.

Shortcut

Editor Command

Ctrl-@, NUL

set cursor where the mouse is located

Ctrl-A

move cursor to beginning of line

Ctrl-B

move cursor back one character

Ctrl-C

clear the terminal

Ctrl-D

close the current connection

Ctrl-E

move cursor to end of line

Ctrl-F

move cursor one character forward

Ctrl-H, Backspace

delete previous character

Ctrl-J, LF

newline

Ctrl-K

cut line

Ctrl-L, FF

clear screen

Ctrl-M, CR

newline

Ctrl-N

next history

Ctrl-O

tty flush output

Ctrl-P

previous history

Ctrl-Q

tty start output

Ctrl-R

redisplay

Ctrl-S

tty stop output

Ctrl-T

transpose characters

Ctrl-U

cut line

Ctrl-V

quoted insert

Ctrl-W

cut highlighted region

Ctrl-X

sequence lead in

Ctrl-Y

yank (paste)

Ctrl-Z, TSTP

tty sigtstp

Ctrl-[, ESC

move cursor forward

Ctrl-\, QUIT

tty sigquit

Ctrl-]

tty dsusp

Ctrl-?, DEL

delete previous character

Ctrl-Meta-H

delete previous word

Ctrl-Meta-L

clear screen

Ctrl-Meta-_

copy the previous word

Meta-0 to Meta-9

argument digit

Meta-B

previous word

Meta-C

use capitol case

Meta-D

delete next word

Meta-F

move to next word

Meta-L

lower case

Meta-N

search next history

Meta-O

sequence lead in

Meta-P

search previous history

Meta-U

upper case

Meta-W

copy highlighted region

Meta-X

command

Meta-[

sequence lead in

Meta-p

search previous history

Ctrl-Meta-?

delete previous word

$ sudo usermod -aG guacamole tomcat
$ ls -l /etc/guacamole/
total 20
drwxr-xr-x. 2 root root      47    Apr 27 23:17 extensions
-rw-r-----. 1 root guacamole 10748 Jun 24  2017 guacamole.properties
-rw-r-----. 1 root guacd     1334  Apr 26 05:18 guacd.conf
drwxr-xr-x. 2 root root      32    Apr 27 23:17 lib
-rw-r-----. 1 root guacamole 1938  Apr 27 22:40 user-mapping.xml
$
Advanced Linux Install
Apache Guacamole
Principle of Least Privilege
Setting up SSL termination with Apache
Setting up SSL termination with NGINX
Authenticating users with LDAP
Authenticating users with SAML 2.0
Authenticating users with OpenID Connect
Using Guacamole with a MySQL Database
Using Guacamole with a PostgreSQL Database
Using Guacamole with a SQL Server Database
Using Duo for Multi-factor Authentication
Using TOTP for Multi-factor Authentication
Client Certificate Configuration
update packages
built-in update capabilities
Docker update capabilities
Click here
Security Disclosure
Enterprise Guide
NCC Group
Cybertest
Bugcrowd bug bounty program
https://www.privacyshield.gov
certificate #3967
https://www.bis.doc.gov
contact us
contact us
[email protected]
[email protected]
[https://bugcrowd.com/keepersecurity]
Keeper Encryption Model
Secrets Manager Encryption Model
Security Disclosure Page
Product Documentation
System Status
Release Notes
Architecture Diagram
Bugcrowd

Dynamic Connections

Integrate Keeper Connection Manager with external data sources using Encrypted JSON Authentication

Overview

Keeper Connection Manager can be configured to integrate with any custom software or 3rd party application using encrypted JSON files that simultaneously authenticate a user and grant them access to remote connections. This provides a simple method of integration without substantial coding, and it's a great alternative to writing a full Guacamole extension.

Installation

The Dynamic Connections feature requires installation of the Encrypted JSON Authentication module for Keeper Connection Manager.

Advanced Linux Install Method

If you installed Keeper Connection Manager using the linux package installation method, the package kcm-guacamole-auth-json needs to be installed. This package is an authentication extension for Apache Guacamole which authenticates users using JSON which has been signed using HMAC/SHA-256 and encrypted with AES-128 CBC. As this JSON contains all information describing the user being authenticated, including any connections they have access to, this extension can provide a simple means of integrating Keeper Connection Manager with external applications.

$ sudo yum install kcm-guacamole-auth-json

Configuring Guacamole to accept encrypted JSON

Guacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to specify the secret key which the Guacamole server should use to decrypt and verify received JSON. Systems generating this JSON will also use this same key to encrypt and sign the JSON they generate.

$ sudo vi /etc/guacamole/guacamole.properties

As guacamole-auth-json uses 128-bit AES, this key must be 128 bits, specified as a 32-digit hexadecimal value using the json-secret-key property:

##
## [JSON-1] Shared JSON secret key
##
## A shared secret key is used by systems generating JSON data to encrypt and
## sign the JSON, and by the Guacamole server to verify and decrypt received
## data. This key must be 128 bits, specified with 32 hexadecimal digits.
##

#json-secret-key: 4c0b569e4c96df157eee1b65dd0e4d41

This key can be essentially anything as long as it is unpredictable. An easy way of generating such a key is to echo a passphrase through the "md5sum" utility. This is the technique OpenSSL itself uses to generate 128-bit keys from passphrases. For example:

$ echo -n "ThisIsATest" | md5sum
4c0b569e4c96df157eee1b65dd0e4d41  -

If encrypted JSON will only ever be received from a known set of machines or private subnets, you may wish to further restrict acceptance of received JSON to only those trusted machines using the json-trusted-networks property:

##
## [JSON-2] Source network restrictions
##
## By default, received encrypted JSON will be accepted as long as it is valid
## and properly signed with the secret key. This can be further restricted to
## accept encrypted JSON only from machines which match a comma-separated list
## of trusted IP addresses and/or CIDR subnets.
##

#json-trusted-networks: 127.0.0.0/8, 10.0.0.0/8

Completing installation

Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:

$ sudo systemctl restart guacamole

JSON format

The general format of the JSON (prior to being encrypted, signed, and sent to Guacamole), is as follows:

{

    "username" : "arbitraryUsername",
    "expires" : TIMESTAMP,
    "connections" : {

        "Connection Name" : {
            "protocol" : "PROTOCOL",
            "parameters" : {
                "name1" : "value1",
                "name2" : "value2",
                ...
            }
        },

        ...

    }

}

where TIMESTAMP is a standard UNIX epoch timestamp with millisecond resolution (the number of milliseconds since midnight of January 1, 1970 UTC) and PROTOCOL is the internal name of any of Guacamole's supported protocols, such as vnc, rdp, or ssh.

The JSON will cease to be accepted as valid after the server time passes the timestamp. If no timestamp is specified, the data will not expire. This can be desirable, but should only be done after careful consideration. In most cases, it is critical that a timestamp is specified, limiting the use of the encrypted JSON to some reasonable time interval and preventing replay attacks.

The top-level JSON object which must be submitted to Guacamole has the following properties:

Property name
Type
Description

username

string

The unique username of the user authenticated by the JSON. If the user is anonymous, this should be the empty string ("").

expires

number

The absolute time after which the JSON should no longer be accepted, even if the signature is valid, as a standard UNIX epoch timestamp with millisecond resolution (the number of milliseconds since midnight of January 1, 1970 UTC).

connections

object

The set of connections which should be exposed to the user by their corresponding, unique names. If no connections will be exposed to the user, this can simply be an empty object ({}).

Each connection defined within each submitted JSON object has the following properties:

Property name
Type
Description

protocol

string

The internal name of a supported protocol, such as vnc, rdp, or ssh.

parameters

object

An object representing the connection parameter name/value pairs to apply to the connection, as documented in the .

Generating encrypted JSON

To authenticate a user with the above JSON format, the JSON must be both signed and encrypted using the same 128-bit secret key specified with the json-secret-key within guacamole.properties:

  1. Generate JSON in the format described above

  2. Sign the JSON using the secret key (the same 128-bit key stored within guacamole.properties with the json-secret-key property) with HMAC/SHA-256. Prepend the binary result of the signing process to the plaintext JSON that was signed.

  3. Encrypt the result of (2) above using AES in CBC mode, with the initial vector (IV) set to all zero bytes.

  4. Encode the encrypted result using base64.

  5. POST the encrypted result to the /api/tokens REST endpoint as the value of an HTTP parameter named data (or include it in the URL of any Guacamole page as a query parameter named data).

For example, if Guacamole is running on localhost at /guacamole, and BASE64_RESULT is the result of the above process, the equivalent run of the "curl" utility would be:

$ curl --data-urlencode "data=BASE64_RESULT" http://localhost:8080/guacamole/api/tokens

Be sure to URL-encode the base64-encoded result prior to POSTing it to /api/tokens or including it in the URL. Base64 can contain both "+" and "=" characters, which have special meaning within URLs.

If the data is invalid in any way, if the signature does not match, if decryption or signature verification fails, or if the submitted data has expired, the REST service will return an invalid credentials error and fail without user-visible explanation. Details describing the error that occurred will be in the Tomcat logs via journalctl.

Reference implementation

The source includes a shell script, /opt/keeper/share/guacamole-auth-json/doc/encrypt-json.sh, which uses the OpenSSL command-line utility to encrypt and sign JSON in the manner that guacamole-auth-json requires. It is thoroughly commented and should work well as a reference implementation, for testing, and as a point of comparison for development. The script is run as:

$ /opt/keeper/share/guacamole-auth-json/doc/encrypt-json.sh HEX_ENCRYPTION_KEY file-to-sign-and-encrypt.json

For example, if you have a file called auth.json containing the following:

{
    "username" : "test",
    "expires" : "1446323765000",
    "connections" : {
        "My Connection" : {
            "protocol" : "rdp",
            "parameters" : {
                "hostname" : "10.10.209.63",
                "port" : "3389"
            }
        },
        "My OTHER Connection" : {
            "protocol" : "rdp",
            "parameters" : {
                "hostname" : "10.10.209.64",
                "port" : "3389"
            }
        }
    }
}

and you run:

$ /opt/keeper/share/guacamole-auth-json/doc/encrypt-json.sh 4C0B569E4C96DF157EEE1B65DD0E4D41 auth.json

You will receive the following output:

le2Ug6YIo4perD2GV17QtWvOdfSemVDDtCOdRYJlbdUf3fhN+63LpQa1RDkzU7Zc
DW3+OtyTCBGQ7OLO+HpG6pHNom76BXpmnHSRx1UdQ3WVZelPUXEDzxe74aN6DUP9
G9isXhBMdLUhZwEJf4k4Gpzt9MHAH5PufSKq3DO1UHnrRjdGbKKddug2BcuDrwJM
UJf1tRX9CAEC11/gWEwrHDOhH/abeyeDyElbaEG/oOY8EdoFNYgUsjI2x31OpCuB
sEv7FOFafL05wEoIFv0/pPft0DHk7GuvHBBCqXuK98yMEo3d0zD5D+IsOY8Rmm1+
0CoWkX22mqyRQMFS2fTp/fClCN4QLb0aNn+unweTimd2SXN9cjREmZknXf7Tj8oU
/FNXc37i0HEfG5aVgp5znMCwwRAOFnFhLqG3K2yaTRE+hLNBxltIjLfFmNG5TZZA
gUdKyuegsOd0KS5iHdW6tPI01AwfRO9y2z20t3flsgDp50EGWjT2/TTA5Nkjnnjk
JXNzCOfM7DCI/ioEz6Ga140qXfOX/g8SGiukpwt+j0ANI573TdVt7nsp7MZX2qKg
2GcoNqjBqQxqpqI5ZYz4KVfD4cYu8KDZ9MiFMzbUwwKNSzYxiep1KJwiG0HQThHg
oX2FJYOFCFcinQgGkUOaBJK1K0bo1ouaBSe4iGPjd54=

The resulting base64 data above, if submitted using the data parameter to Guacamole, will authenticate a user and grant them access to the connections described in the JSON (at least until the expires timestamp is reached, at which point the JSON will no longer be accepted).

Note: The OpenSSL utility is not an explicit dependency of the kcm-guacamole-auth-json package as it's not inherently required by the actual Guacamole extension. If you do not already have the OpenSSL utility installed, you will need to install it before running the encrypt-json.sh reference implementation:

$ sudo yum install openssl

Custom Docker Images

Creating custom Docker images based on Keeper Connection Manager packages

Overview

The main Keeper Connection Manager packages include default Docker entry points, allowing deployments of Keeper Connection Manager to be automated with Docker, even if your deployment is customized with , third-party authentication extensions, or organization-specific settings.

A simple Dockerfile can be created which accomplishes the following tasks:

  1. Copy a .repo file into /etc/yum.repos.d/ so the Docker image build has access to the Keeper Connection Manager packages.

  2. Install any required packages for your use case.

  3. Remove the .repo file so your image doesn't contain your repository credentials.

  4. Apply any desired configuration (such as through a guacamole.properties.docker file).

  5. Configure the environment as required for installing the Keeper Connection Manager packages used by the image (such as adding the tomcat user to any necessary groups or deploying guacamole.war).

  6. Start one of the provided Docker entrypoints.

The Keeper Connection Manager packages currently include three Docker entrypoints ready for use within custom images. Which entrypoint(s) you use will depend on whether you are creating separate images for Apache Guacamole and guacd vs. an all-in-one image which contains both:

Filename
Description

Configuring Guacamole using guacamole.properties.docker

The entrypoint-combined.sh and entrypoint-guacamole.sh entrypoints will both check for the existence of an optional /etc/guacamole/guacamole.properties.docker file. If this file exists, it will be automatically filtered such that environment variables are substituted within the contents of the file. The filtered contents of this file will be written to /etc/guacamole/guacamole.properties, overwriting the original file, but omitting any properties which remain unset after filtering.

The filtering applied to guacamole.properties.docker leverages the envsubst utility provided by the gettext package. The gettext package must be installed within any Docker container intended to leverage guacamole.properties.docker.

For example, if an /etc/guacamole/guacamole.properties file exists within a Guacamole-only or combined image containing the following:

The main guacamole.properties will be generated using this as a template, substituting the values of the DATABASE_HOSTNAME, DATABASE_USERNAME, DATABASE_PASSWORD, LDAP_HOSTNAME, and LDAP_PORT environment variables. If only the DATABASE variables are set, then properties which depend on other values will automatically be omitted:

guacamole.properties.docker can thus be used to provide a completely custom set of configuration options. Your image need only support the options you specifically need.

Creating an all-in-one image using the combined entrypoint

An all-in-one Docker image for Guacamole contains both the Guacamole web application and guacd. An image which contains both Guacamole and guacd will require at least the following packages:

  • kcm-guacamole

  • kcm-guacd

  • tomcat

If using LDAP and/or one of the supported databases for authentication, the relevant packages for those authentication methods will also be installed:

  • kcm-guacamole-auth-duo

  • kcm-guacamole-auth-json

  • kcm-guacamole-auth-ldap

  • kcm-guacamole-auth-mysql

  • kcm-guacamole-auth-postgresql

  • kcm-guacamole-auth-sqlserver

  • kcm-guacamole-auth-totp

You must also install at least one package providing protocol support. The packages required depend only on the protocols you intend to support, which may well be all protocols supported by Guacamole:

  • kcm-libguac-client-rdp

  • kcm-libguac-client-ssh

  • kcm-libguac-client-telnet

  • kcm-libguac-client-vnc

If providing support for telnet, you will also need to configure your image to use the EPEL repository by installing the epel-release package. This package will need to be installed before the kcm-libguac-client-telnet package, as its dependencies will not be able to be satisfied without EPEL:

  • epel-release

If you will be using to provide configuration options that leverage environment variables, the gettext package is required

  • gettext

A combined Dockerfile which provides support for absolutely all protocols, uses MySQL for authentication, and leverages would look like the following:

Creating a separate Guacamole image (without guacd)

A Docker image contains only the Guacamole web application will require at least the following packages:

  • kcm-guacamole

  • tomcat

If using LDAP and/or one of the supported databases for authentication, the relevant packages for those authentication methods will also be installed:

  • kcm-guacamole-auth-saml

  • kcm-guacamole-auth-openid

  • kcm-guacamole-auth-duo

  • kcm-guacamole-auth-json

  • kcm-guacamole-auth-ldap

  • kcm-guacamole-auth-mysql

  • kcm-guacamole-auth-postgresql

  • kcm-guacamole-auth-sqlserver

  • kcm-guacamole-auth-totp

If you will be using guacamole.properties.docker to provide configuration options that leverage environment variables, the gettext package is required

  • gettext

A Dockerfile which contains only the web application, uses MySQL for authentication, and which leverages guacamole.properties.docker would look like the following:

Creating a separate guacd image (without Guacamole)

A Docker image which contains only guacd will require at least the kcm-guacd package:

  • kcm-guacd

You must also install at least one package providing protocol support. The packages required depend only on the protocols you intend to support, which may well be all protocols supported by Guacamole:

  • kcm-libguac-client-rdp

  • kcm-libguac-client-ssh

  • kcm-libguac-client-telnet

  • kcm-libguac-client-vnc

If providing support for telnet, you will also need to configure your image to use the EPEL repository by installing the epel-release package. This package will need to be installed before the kcm-libguac-client-telnet package, as its dependencies will not be able to be satisfied without EPEL:

  • epel-release

A Dockerfile which contains only guacd and provides support for absolutely all protocols would look like the following:

Guacamole manual

opt/keeper/share/guacamole/entrypoint-combined.sh

Docker entrypoint which starts both the Guacamole web application and the guacd daemon. This entrypoint is part of the kcm package and additionally requires gettext to be installed.

/opt/keeper/share/guacamole/entrypoint-guacamole.sh

Docker entrypoint which starts only the Guacamole web application. A separate container will be needed for guacd. This entrypoint is part of the kcm package and additionally requires gettext to be installed.

/opt/keeper/share/guacd/entrypoint-guacd.sh

Docker entrypoint which starts only the guacd daemon. A separate container will be needed for the Guacamole web application. This entrypoint is part of the kcm package

mysql-hostname: $DATABASE_HOSTNAME
mysql-database: guacamole_db
mysql-username: $DATABASE_USERNAME
mysql-password: $DATABASE_PASSWORD

ldap-hostname: $LDAP_HOSTNAME
ldap-port: $LDAP_PORT
mysql-hostname: localhost
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: some_password
# Build off CentOS 7
FROM centos:centos7

# Add the Keeper Connection Manager Enterprise repository
COPY kcm.repo /etc/yum.repos.d/

# Install Guacamole, Tomcat, and guacd
RUN    yum install -y epel-release               \
    && yum install -y                            \
        gettext                                  \
        kcm                      \
        kcm-guacamole-auth-jdbc-mysql      \
        kcm-guacd                          \
        kcm-libguac-client-rdp             \
        kcm-libguac-client-ssh             \
        kcm-libguac-client-telnet          \
        kcm-libguac-client-vnc             \
        tomcat                                   \
    && yum clean all                             \
    && rm /etc/yum.repos.d/kcm.repo

# Add Tomcat service user to the "guacamole" group
RUN usermod -aG guacamole tomcat

# Deploy the Guacamole web application under Tomcat
RUN ln -s /opt/keeper/share/guacamole/guacamole.war /var/lib/tomcat/webapps/ROOT.war

# Add template guacamole.properties which will be populated with environment
# variables during startup by the entrypoint script
COPY guacamole.properties.docker /etc/guacamole/

# Tomcat will be accessed via port 8080
EXPOSE 8080

# Use combined Tomcat+guacd entrypoint
ENTRYPOINT [ "/opt/keeper/share/guacamole/entrypoint-combined.sh" ]
# Build off CentOS 7
FROM centos:centos7

# Add the Keeper Connection Manager repository
COPY kcm.repo /etc/yum.repos.d/

# Install Guacamole and Tomcat
RUN    yum install -y                            \
        gettext                                  \
        kcm                                      \
        kcm-guacamole-auth-jdbc-mysql            \
        tomcat                                   \
    && yum clean all                             \
    && rm /etc/yum.repos.d/kcm.repo

# Add Tomcat service user to the "guacamole" group
RUN usermod -aG guacamole tomcat

# Deploy the Guacamole web application under Tomcat
RUN ln -s /opt/keeper/share/guacamole/guacamole.war /var/lib/tomcat/webapps/ROOT.war

# Add template guacamole.properties which will be populated with environment
# variables during startup by the entrypoint script
COPY guacamole.properties.docker /etc/guacamole/

# Tomcat will be accessed via port 8080
EXPOSE 8080

# Use Guacamole entrypoint
ENTRYPOINT [ "/opt/keeper/share/guacamole/entrypoint-guacamole.sh" ]
# Build off CentOS 7
FROM centos:centos7

# Add the Keeper Connection Manager repository
COPY kcm.repo /etc/yum.repos.d/

# Install guacd and protocol support
RUN    yum install -y epel-release               \
    && yum install -y                            \
        kcm-guacd                          \
        kcm-libguac-client-rdp             \
        kcm-libguac-client-ssh             \
        kcm-libguac-client-telnet          \
        kcm-libguac-client-vnc             \
    && yum clean all                             \
    && rm /etc/yum.repos.d/kcm.repo

# guacd will be accessed via port 4822
EXPOSE 4822

# Use guacd entrypoint
ENTRYPOINT [ "/opt/keeper/share/guacd/entrypoint-guacd.sh" ]
your own branding
guacamole.properties.docker
guacamole.properties.docker

Scope of Support

Description of the support offered for Keeper Connection Manager customers

Subscribers to Keeper Connection Manager receive continuous access to updates, released regularly according to a general release schedule, and support for each major release until it reaches end-of-life.

Customers who deploy the Advanced Linux Install through package management are provided update packages through Keeper Connection Manager's YUM repository (the “yum” tool will automatically apply updates when the administrator runs the command to do so).

Customers who deploy the Auto Docker Install version can use the built-in update capabilities.

Customers who deploy the Custom Docker Install version can use the Docker update capabilities.

Additional support services are provided through the following options, depending on the specific product purchased:

  • Online help desk / ticketing system

  • Phone support

  • Custom branding

  • Remote intervention

  • Integration / deployment consulting

Release schedule

Keeper Security is continuously working to improve the Keeper Connection Manager platform. Major updates of Keeper Connection Manager release once per year. Unlike updates to existing major releases, each new major version of Keeper Connection Manager may break compatibility with previous versions, and administrators will likely need to manually facilitate the upgrade from an older major release.

Each major release is a line of development which is maintained throughout its support lifecycle through issuing relatively regular updates, which users apply using the same package management tool that they used to install Keeper Connection Manager in the first place (YUM, an open source tool which is included with the Linux distributions we support).

Major release:

Annually (the only releases which can break compatibility). Major releases are numbered 1.0, 2.0, 3.0, etc.

Minor/Maintenance release:

Every 3 months following general availability (updates to an existing major release which add new features, fix minor bugs, etc.). Minor/maintenance releases are numbered relative to the major release being updated: 1.1, 1.2, 1.3, etc.

Security/Critical release:

ASAP (fixes to security vulnerabilities or critical bugs). Security/critical releases are numbered identically to minor/maintenance releases.

Backward and API compatibility

Keeper Connection Manager provides API compatibility guarantees between minor releases. Each minor release of Keeper Connection Manager is backward compatible with prior minor releases. For example, Glyptodon Enterprise 1.1 is backward compatible with 1.0, Keeper Connection Manager (v2.8) and Glyptodon Enterprise 2.4 are backward compatible with 2.3, 2.2, etc.

Overall, this means:

  1. Updating from one minor release to another will not require system or configuration changes. It will only involve updating the relevant packages (running yum upgrade) and restarting Guacamole's services.

  2. Guacamole extensions that are written for one minor release of Keeper Connection Manager will not require code changes to work with a newer minor release.

API compatibility within Keeper Connection Manager specifically covers:

  • The Guacamole core APIs made available to Guacamole extensions: guacamole-common, guacamole-common-js, and guacamole-ext.

  • The SQL schema used by Guacamole's database authentication extensions.

We will take reasonable efforts to maintain compatibility with other APIs present within the scope of the Guacamole stack, such as those inherited from external libraries or bundled dependencies, but may occasionally need to make updates that break compatibility. Examples of such libraries include (but are not limited to):

  • JavaScript libraries like AngularJS, jQuery, and Lodash.

  • Java frameworks like Jersey and Guice.

  • libguac, the core C library used by protocol support plugins for guacd.

  • Libraries that protocol support plugins for guacd may depend on, like FreeRDP, libtelnet, or libvncclient.

Support lifecycle

Each release of Keeper Connection Manager is supported for at least five years following the first general availability (GA) release. The five-year period of support for each release is further divided into the initial period of full support, during which regular updates can be expected, and the final period of extended support, during which updates are provided only for critical or security-related issues:

Full Support
Extended Support
EOL

Year 1-3

Year 4-5

Year 6+

Following end of life (EOL), users will need to upgrade to a newer release to continue receiving updates and support. Users are advised to take advantage of the period of extended support as a grace period for migration, using the time provided to migrate to a newer release with full support, rather than allow support for a production deployment to lapse.

The date of each GA release, and the expected dates for the end of full support, end of extended support, and end of life will all be published online, but are subject to change.

Online help desk

If included with your purchased product, Keeper Connection Manager will provide support in the form of an online help desk, resolving issues through:

  • Responding to support tickets, so long as those tickets are within scope (see the scope of support).

  • Converting support tickets to bug reports or feature requests (though priority and scheduling for bug reports and feature requests is at Keeper Connection Manager’s sole discretion).

Tickets may be opened for issues encountered specifically with Keeper Connection Manager and for issues encountered with using a supported version of Keeper Connection Manager as documented with any of the software listed within the scope of support. Tickets are serviced for all supported releases of Keeper Connection Manager until EOL, and can be expected to be handled in a timely manner.

Phone support

If included with your purchased product, Keeper Connection Manager will additionally provide support as needed over the phone, and the contact number for phone support can be found within your account dashboard. Phone support is available during Keeper Connection Manager’s business hours: Monday through Friday, 9:00 AM to 5:00 PM, Pacific Time.

Scope of phone support is generally limited to issues encountered specifically with Keeper Connection Manager and for issues encountered with using a supported version of Keeper Connection Manager as documented with any of the software listed within the scope of support, though your purchased product may expand this scope.

Custom branding

If included with your purchased product, you may request custom branding from Keeper Connection Manager by opening a support ticket containing the details of the branding required. Keeper Connection Manager will provide a branding extension for Apache Guacamole which applies custom branding of your choosing to a deployment of Keeper Connection Manager, along with instructions for its installation. Once installed, the branding will be stable across upgrades. Custom branding may contain any or all of the following:

  • Your company’s name / product name

  • An arbitrary logo to be displayed on the login screen

  • An arbitrary tab / bookmark icon (“favicon”)

  • Disclaimer/warning text to be displayed above the login screen.

The branding extension may be revised at any time by opening a support ticket.

Remote intervention

If included with your purchased product, Keeper Connection Manager will be available to remotely investigate and address reported issues if other means of support are insufficient to resolve the problem. After reporting the issue requiring investigation and describing what you have attempted thus far, you will need to provide Keeper Connection Manager with:

  1. Temporary access to the system(s) in question via SSH or Apache Guacamole

  2. Any necessary credentials

Remote intervention sessions must be scheduled in advance, and Keeper Connection Manager will make reasonable efforts to schedule remote intervention sessions in a timely manner.

Integration / deployment consulting

If included with your purchased product, Keeper Connection Manager will be available by email and phone to consult regarding the details of your integration or deployment of Keeper Connection Manager, even if such integration/deployment is specific to your own custom software. Consultation over the phone must be scheduled in advance, and Keeper Connection Manager will make reasonable efforts to schedule any requested consultation in a timely manner.

Scope of integration and deployment consultation includes but is not limited to:

  • Discussing development related to custom authentication

  • Issues encountered with software not explicitly listed in the scope of support

  • Possible high-availability deployment configurations

  • Security best practices

  • Integrating Keeper Connection Manager within existing web applications

  • Troubleshooting issues within your custom integration of Keeper Connection Manager

Integration and deployment consultation does not include development services, such as the creation of custom code or documentation.

Scope of support

If your purchased product includes support services, the scope of those services is generally restricted to the following specific versions of software commonly used with Apache Guacamole, to the extent that the support deals directly with using Keeper Connection Manager as documented. Your purchased product may extend that support to include integration and deployment alongside your own software, even if not the Keeper Connection Manager documentation does not cover that specific case.

Web Browser

Browser
Description

Google Chrome

Any release still supported by Google

Mozilla Firefox

Any release still supported by Mozilla

Apple Safari:

Any release still supported by Apple

Internet Explorer

10, 11

Microsoft Edge

Any release still supported by Microsoft

Servlet Container

Version
Description

Tomcat 7.x

7.0.37 or later release

Tomcat 8.x

Any release

Tomcat 9.x

Any release

JBoss Web Server

3.1 or later release

Operating System

OS Type
OS Version

CentOS

Any non-EOL release (currently 7)

Red Hat Enterprise Linux

Any non-EOL release (currently 7 and 8)

Rocky Linux

Any non-EOL release (currently 7 and 8)

Reverse Proxy / SSL Termination

Software
Software Version

NGINX

1.3 or later release

Apache

2.4.5 or later release, with installed

Database

Database
Version

MySQL

Any non-EOL release AND any release packaged with a supported OS

PostgreSQL

Any non-EOL release AND any release packaged with a supported OS

SQL Server

Microsoft SQL Server 2008 or later, any edition

LDAP / Active Directory

Directory Type
Version

OpenLDAP

Any actively-maintained release AND any release packaged with a supported OS

Microsoft Active Directory

Any release still supported by Microsoft

Multifactor Authentication

MFA Type
Version

Duo

Web SDK

TOTP

Any authentication device supporting the TOTP standard (such as Google Authenticator)

mod_proxy_wstunnel

How to Use KCM

Keeper Connection Manager user guide - launching connections

Overview

A connection can be launched by either clicking "Launch" or clicking on item from the list.

Launch Button
Launch from All Connections List

Launching a Connection

When you launch a connection, you will be instantly connected to the remote display from your web browser. You can interact with this display as if your mouse and keyboard are connected directly to the remote machine.

The remote display will take up the entire browser window, with no buttons or menus to disturb the view. With the intent of providing a seamless experience, options specific to remote desktop are hidden within the Keeper Connection Manager menu, which can be opened as needed.

Sidebar Menu

The Keeper Connection Manager sidebar menu provides many features that you can use during your remote session.

To show or hide the menu, use the keystrokes below:

On Windows or Linux: Use Ctrl+Alt+Shift

On Mac: Use Ctrl+Option+Shift

If you are using a mobile or touchscreen device that lacks a keyboard, you can also show the menu by swiping right from the left edge of the screen.

The Keeper Connection Manager menu provides many features including:

  • Reading to and from the clipboard on the remote device

  • Switching between connections and joining multiple connections

  • Navigating back to the Home Screen

  • Disconnecting from the current connection

  • Sharing the current connection (if external sharing is configured)

  • Changing keyboard input method

  • Zooming in and out of the remote display

  • Selecting alternative mouse emulation methods

Clipboard Management

At the top of the Keeper Connection Manager menu is a text area labeled “Clipboard” along with some basic instructions:

Text copied/cut within Keeper Connection Manager will appear here. Changes to the text below will affect the remote clipboard.

Clipboard Control

The text area functions as an interface between the remote clipboard and the local clipboard. Text from the local clipboard can be pasted into the text area, causing that text to be sent to the clipboard of the remote desktop. Similarly, if you copy or cut text within the remote desktop, you will see that text within the text area, and can manually copy it into the local clipboard if desired.

Switching and Tiling connections

If you have access to more than one connection, clicking the current connection name at the top of the Keeper Connection Manager menu will open a drop-down menu containing a list of your other available connections. Clicking on the name of another connection in this drop-down menu will immediately switch to that connection.

Switching and Tiling Connections

The previous connection will remain running as a thumbnail within a panel attached to the lower-right corner of the screen. This panel updates in real-time and remains visible as long as you have multiple active connections, even if you navigate away to another part of the Keeper Connection Manager application:

Connection Thumbnail

Clicking on any connection within the panel will navigate back to that connection, while clicking the “X” icon in the upper-right corner of the connection thumbnail will immediately close the connection.

Tiling Connections

Multiple connections may also be opened simultaneously within the same view by clicking the checkboxes next to the names of those connections in the connection menu. All connections opened in this way are automatically arranged in equally-sized tiles to fill the available area.

Tiling Connections

With multiple connections displayed as tiles, keyboard interaction and the Keeper Connection Manager menu will only affect the currently focused connection, as indicated by the blue title and border. Clicking or tapping within another connection will change the focus and allow keyboard interaction with that connection.

Connections automatically fill the screen evenly

Typing with Multiple Connections

By holding down Ctrl (to select an individual connection) or Shift (to select a rectangle of connections), multiple connection may be focused at the same time. While multiple connections are focused, each key pressed will be broadcast across each focused connection:

Typing with multiple connection

This is particularly useful for running the same series of commands on multiple computers. Further, since Keeper Connection Manager automatically translates between the user’s local keyboard layout and the keyboard layout of the remote server, this will work as expected even if the keyboard layouts of focused connections do not match.

Disconnecting and Navigation

When you are done using the current connection, or you wish to navigate elsewhere temporarily, options to do so are within the user menu inside the Keeper Connection Manager menu:

Disconnecting

The user menu within the Keeper Connection Manager menu provides an additional “Disconnect” option that allows you to explicitly close the current connection only. Clicking “Logout” will also implicitly disconnect all active connections, including the current connection.

Navigating back to the home screen or to the settings screen will not disconnect you: your connection will continue running in the background while you change settings or initiate another connection, and you can resume any active connection by clicking on it within the home screen.

Transferring Files

You can transfer files back and forth between your local computer and the remote desktop if it is supported by the underlying protocol and enabled on the connection. Currently, Keeper Connection Manager supports file transfer for VNC, RDP, and SSH, using either the native file transfer support of the protocol or SFTP.

Files can be transferred to the remote computer by dragging and dropping the files into your browser window, or through using the file browser located in the Keeper Connection Manager menu.

Drag and Drop Files

While transferring files, a dialog on the lower right will display the status.

File Transfers

Using the File Browser

If file transfer is enabled on the connection, you will see one or more filesystem devices listed within the Keeper Connection Manager menu. Clicking on one of the filesystems opens a file browser which lists the files and directories within that filesystem.

Shared Drive
File Browser

Double-clicking on any directory will change the current location of the file browser to that directory, updating the list of files shown as well as the “breadcrumbs” at the top of the file browser. Clicking on any of the directory names listed in the breadcrumbs will bring you back to that directory, and clicking on the drive icon on the far left will bring you all the way back to the root level.

Downloads are initiated by double-clicking on any file shown, while uploads are initiated by clicking the “Upload Files” button. Clicking “Upload Files” will open a file browsing dialog where you can choose one or more files from your local computer, ultimately uploading the selected files to the directory currently displayed within the file browser.

The state of all file uploads can be observed within the notification dialog that appears once an upload begins, and can be cleared once completed by clicking the “Clear” button. Downloads are tracked through your browser’s own download notification system.

When you are done browsing the filesystem and transferring files, click “Back” to return to the Keeper Connection Manager menu.

Transferring Files

The RDP Virtual Drive

RDP provides its own native support for file transfer called “drive redirection” or “RDPDR”. Keeper Connection Manager provides support for this mechanism by emulating a virtual drive. Typically, this virtual drive will appear as a network drive within the RDP session. Files uploaded and downloaded will be preserved within this drive, even after disconnecting.

RDP Virtual Drive

Files can be downloaded from this drive using the file browser in the Keeper Connection Manager menu or using the special “Download” folder within the virtual drive. All files dropped into this folder will automatically begin uploading to the client, and thus downloading through the browser.

Downloading Files

guacctl / guacget

In addition to using the traditional drag-and-drop and the file browser, Keeper Connection Manager SSH support can be used with the guacctl utility. The guacctl utility is a simple shell script included with Guacamole (and supported by Keeper Connection Manager) which allows you to use and configure file transfer directly from the command line within the SSH session:

$ guacctl
guacctl 0.8.0, Guacamole SSH session control utility.
Usage: guacctl [OPTION] [FILE]...

    -d, --download         download each of the files listed.
    -s, --set-directory    set the destination directory for future uploaded 
                           files.
$ guacctl -d FILENAME
$ guacctl -s DIRECTORY
$

For convenience, you may also create a symbolic link or alias to guacctl called guacget. When run as guacget, the utility behaves as if the --download option were supplied and initiates a download for each file specified on the command line.

On-screen Keyboard

Certain key combinations are impossible to press within a web application like Keeper Connection Manager because they are reserved by the operating system (Ctrl+Alt+Del or Alt+Tab, for example) or by the web browser. If you press one of these reserved combinations, the effect will be observed locally, not remotely, and the remote desktop will receive only some of the keys.

Keeper Connection Manager provides its own, built-in on-screen keyboard which allows keys to be sent to the remote desktop without affecting the local system. If the device you’re using does not have certain keys which the remote desktop depends on, such as the arrow keys or Ctrl, you can use the on-screen keyboard for this, too. You can show the on-screen keyboard by selecting the “On-screen keyboard” option from the menu.

On-screen Keyboard

Clicking (or tapping) the buttons of the on-screen keyboard has the same effect as pressing the same buttons on a real keyboard, except that the operating system and browser will not intercept these keypresses; they will only be sent to the remote desktop.

Using the On-screen Keyboard for Ctrl+Alt+Del

Scaling the display

Keeper Connection Manager will default to shrinking or expanding the remote display to fit the browser window exactly, but this is not necessarily ideal. If the remote display is much larger than your local display, the screen may be impossible to see or interact with. This is especially true for mobile phones, whose screens need to be small enough to fit in the average hand.

You can scale the display on touch devices by using the familiar pinch gesture. Place two fingers on the screen and bring them closer together to zoom out or further apart to zoom in.

If your device lacks a touch screen, you can also control the zoom level through the menu. The controls for zooming in and out are located at the bottom of the menu. The current zoom level is displayed between two “-” and “+” buttons which control the zoom level in 10% increments.

Zoom Setting

Mobile or touch devices

Keeper Connection Manager is designed to work equally well across all HTML5 browsers, including those of mobile devices. It will automatically handle input from a touch screen or a traditional mouse (or both, if you happen to have such a gifted computer), and provides alternative input methods for devices which lack a physical keyboard.

Input Methods and Mouse Emulation Options

Mouse emulation

In the case that your device has a touchscreen and lacks a mouse, Keeper Connection Manager will emulate a mouse for the sake of interacting with remote desktops that expect mouse input. By default, Keeper Connection Manager uses “absolute” mouse emulation. This means that the mouse pointer is positioned at the location of each tap on the screen.

In both absolute and relative modes, you can click-and-drag by tapping the screen and then quickly placing your finger back down. This gesture only causes the mouse button to press down, but does not release it again until you lift your finger back up.

Absolute mode (touchscreen)

Absolute mouse emulation is the default as it tends to be what people expect when using a touch device to interact with applications designed for mouse input.

Each tap on the screen is translated into a left-click at that position. Right-clicking is accomplished through pressing and holding your finger on the screen. If parts of the remote display are off-screen, you can drag your finger around the screen to pan the off-screen parts back into view.

Although absolute mouse emulation works generally well, a finger makes for a very inaccurate pointing device. To address this, Keeper Connection Manager also provides “relative” mouse emulation. Relative mouse emulation provides a way to deal with the need for accurate pointer control, when a true pointer device is not present.

Mouse Input Absolute

Relative mode (touchpad)

Keeper Connection Manager's relative mouse emulation behaves similarly to the touchpad present on most modern laptops. You drag your finger across the display to move the mouse pointer, and tap the display to left-click. The pointer moves relative to the motion of your finger. Right-clicking is accomplished with a two-finger tap, and middle-clicking with a three-finger tap. The mouse scroll wheel can be operated by dragging two fingers up or down.

Because the relative mouse emulation reserves so many gestures for the different mouse buttons and actions, common touch gestures like panning and pinch-to-zoom will not work while relative mouse emulation is enabled. Instead, the screen will automatically pan to keep the mouse pointer in view, and you can zoom through the buttons in the menu.

Mouse Input Relative

Typing without a physical keyboard

Many mobile devices lack a physical keyboard entirely, and instead provide their own on-screen keyboards. As these are not true keyboards per se and do not produce key presses, Keeper Connection Manager's text input mode is required for typing on these platforms.

“Text input” allows input of keystrokes based on the input of text. Choosing “Text input” tells Keeper Connection Manager to infer keystrokes by tracking text entered, rather than relying on actual key presses. Keeper Connection Manager will instead determine the combination of keypresses necessary to produce the same pattern of input, including deletions.

If you wish to type via an IME (input method editor), such as those required for Chinese, Japanese, or Korean, text input mode is required for this as well. Such IMEs function through the explicit insertion of text and do not send traditional key presses. Using text input mode within Keeper Connection Manager thus allows you to use a locally-installed IME, without requiring the IME to be installed on the remote desktop.

Changing preferences

User preferences can be changed within the settings screen under the "Preferences" tab. These preferences are stored locally within the browser, so if you use multiple computers to access Keeper Connection Manager, you can have different settings for each location. The settings screen allows users to change the language of the Keeper Connection Manager interface, to change the default input method used by Keeper Connection Manager connections, and to change the default mouse emulation mode for if a touch device is used. If you have sufficient permissions, you may also change your password, or administer the system.

Preferences

Display language

The Keeper Connection Manager interface is currently available in English, Dutch, French, German, Italian, and Russian. By default, Keeper Connection Manager will attempt to determine the appropriate display language by checking the language preferences of the browser in use. If this fails, or the browser is using a language not yet available within Keeper Connection Manager, English will be used as a fallback.

If you wish to override the current display language, you can do so by selecting a different language within the “Display language” field. The change will take effect immediately.

Changing your password

Change Password

System administrators can restrict the ability of individual users to change their own passwords, so this section may not always be available. If your account does have permission, the preferences screen will contain a “Change Password” section.

To change your password, you must provide your current password, enter the desired new password, and click “Update Password”. You will remain logged in, and the change will affect any future login attempt.

Default input settings

Input methods
Mouse emulation options

Keeper Connection Manager provides multiple keyboard input methods and multiple mouse emulation modes. Many of these settings are specifically useful for touch devices, while others are aimed mainly at traditional desktop use. By default, Keeper Connection Manager will use the keyboard and mouse modes most commonly preferred by users, but you can change these defaults if they do not fit your tastes or your current device.

The choices available mirror those within the Keeper Connection Manager menu discussed earlier in this chapter, and changing these settings will affect the default values selected within the Keeper Connection Manager menu of future connections.

Sharing Connections

In order for a connection to be shared, an admin must first create a sharing profile. See the admin documentation for more details.

To initiate a connection share, from within a connection session first open the connection menu using Ctrl+Shift+Win (Ctrl+Shift+Cmd for Mac). When at least one sharing profile exists for the connection, the "Sharing" menu will appear next to the user's name.

Sharing Menu in Connection

Click "Sharing" to see a list of the sharing profiles for this connection.

Select a sharing profile

Select which profile to use and click it to create a sharing URL which can be shared to give anyone access to this connection session.

When someone without an account in this Keeper Connection Manager system connections to the session, they will have full access to the connection (unless "Read Only" was selected in the sharing profile settings) however they will not have a user menu, or sharing menu.

The connection menu for someone without an account

PostgreSQL

Advanced configuration of PostgreSQL / Redshift connection type

Support for the PostgreSQL protocol within Keeper Connection Manager is provided by the kcm-libguac-client-postgres package. This package will be installed by default if the @kcm-guacamole package group was used during installation, and is already installed within the keeper/guacd Docker image. If this package has not yet been installed, PostgreSQL connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

guacd[8]: WARNING: Support for protocol "postgres" is not installed

If such an error appears within the guacd logs, simply installing kcm-libguac-client-postgres is sufficient to resolve the issue:

$ sudo yum install kcm-libguac-client-postgres

The guacd service does not need to be restarted for installation of PostgreSQL support to take effect.

Overview

The PostgreSQL implementation in Keeper Connection Manager utilizes the PostgreSQL client library as well as an internal terminal library which renders the user interface. Guacamole's PostgreSQL support emulates a terminal on the server side, and draws the screen of this terminal remotely on the client.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

  • Network parameters

  • Authentication parameters

  • Database parameters

  • Display settings

    • Custom color schemes

  • Clipboard parameters

  • Terminal behavior parameters

  • Text session recording (typescripts)

  • Screen recording parameters

Network parameters

PostgreSQL connections are established over TCP to a specific port and a specific hostname or IP address. The hostname/address must be specified for all PostgreSQL connections, but you only need to specify a port if you are not using the standard port (5432).

Field header (web interface)
Parameter name
Description

Hostname

hostname

REQUIRED: The hostname or IP address of the PostgreSQL server Guacamole should connect to.

Port

port

The port the PostgreSQL server is listening on. By default, the standard port of 5432 will be used.

Authentication parameters

Keeper Connection manager supports PostgreSQL authentication through username and password parameters. Both fields are required to establish a connection.

Authentication Parameters
Field header (web interface)
Parameter name
Description

Username

username

REQUIRED: The username to authenticate as when connecting to the specified PostgreSQL server.

Password

password

REQUIRED: The password to use when authenticating with the specified PostgreSQL server.

Database parameters

The default database can be specified when establishing the connection. You can also disable the ability to perform CSV import and export of data.

Field header (web interface)
Parameter name
Description

Default Database

database

The database schema selected when connecting to the specified PostgreSQL server.

Disable CSV Export

disable-csv-export

Set this value to "true" to disable CSV export of data when using the SQL export statement "COPY..."

Disable CSV Import

disable-csv-import

Set this value to "true" to disable CSV import of data when using the SQL import statement "COPY..."

Display settings

Guacamole's PostgreSQL support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

If selecting a different font for a PostgreSQL connection, the chosen font must be installed on the server running guacd. It is the server that will handle rendering of characters to the terminal display, not the client.

Display settings
Field header (web interface)
Parameter name
Description

Theme

color-scheme

The color scheme to use for the terminal emulator used by SSH connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:

  • "black-white" - Black text over a white background

  • "gray-black" - Gray text over a black background (the default)

  • "green-black" - Green text over a black background

  • "white-black" - White text over a black background

  • A (as described below)

By default, Guacamole will render text as gray over a black background.

Font name

font-name

The name of the font to use. If not specified, the default of "monospace" will be used instead. This must be the name of a font installed on the server running guacd, and should be a monospaced font. If a non-monospaced font is used, individual glyphs may render incorrectly.

Font size

font-size

The size of the font to use, in points. By default, the size of rendered text will be 12 point.

Maximum scrollback size:

scrollback

The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.

Custom color schemes

Custom color schemes may be provided for the terminal emulator used by PostgreSQL connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

Legal color names are:

  • "foreground" - the default foreground color.

  • "background" - the default background color.

  • "colorN" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

  • "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "rgb:ff/00/00" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "rgb:f/8/0", "rgb:f0/80/00", and "rgb:f0f/808/00f" all refer to the same effective color.

  • "colorN" - the color currently assigned to index N within the Xterm 256-color palette. For example, "color9" specifies the color currently assigned to palette index 9. Note that the current color value is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.

  • "NAME" - the color with human-readable name "NAME", where "NAME" is one of the standard color names supported by X11. These names generally correspond to the names standardized by the W3C for CSS.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for PostgreSQL connections. This behavior can be overridden on a per-connection basis, restricting access to the clipboard.

Clipboard parameters
Field header (web interface)
Parameter name
Description

Disable copying from terminal:

disable-copy

If set to "true", text copied within the PostgreSQL session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the PostgreSQL session. By default, the user will be able to paste data from outside the browser within the PostgreSQL session.

Text session recording (typescripts)

The full, raw text content of PostgreSQL sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "NAME" is the value provided for the typescript name, these files will be named "NAME" and "NAME.timing" respectively.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using scriptreplay (if installed). For example, to replay a typescript called "NAME", you would run:

$ scriptreplay NAME.timing NAME
Typescript settings
Field header (web interface)
Parameter name
Description

Typescript path

typescript-path

The directory in which typescript files should be created. If a typescript needs to be recorded, then this parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript name

typescript-name

The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.

Guacamole will never overwrite an existing typescript. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Automatically create typescript path

create-typescript-path

If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Screen recording parameters

PostgreSQL sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the Glyptodon Enterprise Session Recording Player application hosted at player.glyptodon.com (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment: https://github.com/glyptodon/glyptodon-enterprise-player

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the Session Recording documentation page.

Field header (web interface)
Parameter name
Description

Recording path

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Microsoft SQL Server

Advanced configuration of Microsoft SQL Server connection type

Support for the SQL Server protocol within Keeper Connection Manager is provided by the kcm-libguac-client-sql-server package. This package will be installed by default if the @kcm-guacamole package group was used during installation, and is already installed within the keeper/guacd Docker image. If this package has not yet been installed, SQL Server connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

guacd[8]: WARNING: Support for protocol "sql-server" is not installed

If such an error appears within the guacd logs, simply installing kcm-libguac-client-sql-server is sufficient to resolve the issue:

$ sudo yum install kcm-libguac-client-sql-server

The guacd service does not need to be restarted for installation of SQL Server support to take effect.

Overview

The SQL Server implementation in Keeper Connection Manager utilizes the SQL Server client library as well as an internal terminal library which renders the user interface. Guacamole's SQL Server support emulates a terminal on the server side, and draws the screen of this terminal remotely on the client.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

  • Network parameters

  • Authentication parameters

  • Database parameters

  • Display settings

    • Custom color schemes

  • Clipboard parameters

  • Terminal behavior parameters

  • Text session recording (typescripts)

  • Screen recording parameters

Network parameters

SQL Server connections are established over TCP to a specific port and a specific hostname or IP address. The hostname/address must be specified for all connections, but you only need to specify a port if you are not using the standard port (1433).

Field header (web interface)
Parameter name
Description

Hostname

hostname

REQUIRED: The hostname or IP address of the SQL server Guacamole should connect to.

Port

port

The port the SQL Server is listening on. By default, the standard port of 1433 will be used.

Authentication parameters

Keeper Connection manager supports SQL Server authentication through username and password parameters. Both fields are required to establish a connection.

Authentication Parameters
Field header (web interface)
Parameter name
Description

Username

username

REQUIRED: The username to authenticate as when connecting to the specified SQL server.

Password

password

REQUIRED: The password to use when authenticating with the specified SQL server.

Database parameters

The default database can be specified when establishing the connection. You can also disable the ability to perform CSV import and export of data.

Field header (web interface)
Parameter name
Description

Default Database

database

The database schema selected when connecting to the specified SQL server.

Disable CSV Export

disable-csv-export

Set this value to "true" to disable CSV export of data when using the SQL statement "SELECT INTO LOCAL OUTFILE"

Disable CSV Import

disable-csv-import

Set this value to "true" to disable CSV import of data when using the SQL statement "BULK INSERT..."

Display settings

Guacamole's SQL Server support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

If selecting a different font for a SQL Server connection, the chosen font must be installed on the server running guacd. It is the server that will handle rendering of characters to the terminal display, not the client.

Display settings
Field header (web interface)
Parameter name
Description

Theme

color-scheme

The color scheme to use for the terminal emulator used by SSH connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:

  • "black-white" - Black text over a white background

  • "gray-black" - Gray text over a black background (the default)

  • "green-black" - Green text over a black background

  • "white-black" - White text over a black background

  • A (as described below)

By default, Guacamole will render text as gray over a black background.

Font name

font-name

The name of the font to use. If not specified, the default of "monospace" will be used instead. This must be the name of a font installed on the server running guacd, and should be a monospaced font. If a non-monospaced font is used, individual glyphs may render incorrectly.

Font size

font-size

The size of the font to use, in points. By default, the size of rendered text will be 12 point.

Maximum scrollback size:

scrollback

The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.

Custom color schemes

Custom color schemes may be provided for the terminal emulator used by SQL Server connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

Legal color names are:

  • "foreground" - the default foreground color.

  • "background" - the default background color.

  • "colorN" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

  • "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "rgb:ff/00/00" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "rgb:f/8/0", "rgb:f0/80/00", and "rgb:f0f/808/00f" all refer to the same effective color.

  • "colorN" - the color currently assigned to index N within the Xterm 256-color palette. For example, "color9" specifies the color currently assigned to palette index 9. Note that the current color value is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.

  • "NAME" - the color with human-readable name "NAME", where "NAME" is one of the standard color names supported by X11. These names generally correspond to the names standardized by the W3C for CSS.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for SQL Server connections. This behavior can be overridden on a per-connection basis, restricting access to the clipboard.

Clipboard parameters
Field header (web interface)
Parameter name
Description

Disable copying from terminal:

disable-copy

If set to "true", text copied within the SQL Server session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the session. By default, the user will be able to paste data from outside the browser within the SQL Server session.

Text session recording (typescripts)

The full, raw text content of SQL Server sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "NAME" is the value provided for the typescript name, these files will be named "NAME" and "NAME.timing" respectively.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using scriptreplay (if installed). For example, to replay a typescript called "NAME", you would run:

$ scriptreplay NAME.timing NAME
Typescript settings
Field header (web interface)
Parameter name
Description

Typescript path

typescript-path

The directory in which typescript files should be created. If a typescript needs to be recorded, then this parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript name

typescript-name

The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.

Guacamole will never overwrite an existing typescript. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Automatically create typescript path

create-typescript-path

If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Screen recording parameters

SQL Server sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the Glyptodon Enterprise Session Recording Player application hosted at player.glyptodon.com (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment: https://github.com/glyptodon/glyptodon-enterprise-player

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the Session Recording documentation page.

Field header (web interface)
Parameter name
Description

Recording path

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Troubleshooting

Common troubleshooting and log inspection

Check the Logs

If things are not behaving as expected, a good first step is always to check the logs. There may be messages logged by Guacamole or guacd which describe exactly what is failing, or which will at least point you in the right direction toward resolving a problem.

Advanced Linux Install method

Both Guacamole (running beneath Tomcat) and guacd log to the systemd journal, which is viewed using the journalctl command. By default, simply running journalctl will allow you to page through all messages logged to the systemd journal, including those from the numerous other services running on a typical server. Options can be provided to narrow these logs to messages from Tomcat or guacd.

In general:

  • The Guacamole logs will be useful when debugging issues with web application authentication (database, LDAP, Active Directory, etc.). Depending on the nature of the issue, the Guacamole logs may be useful when debugging connectivity issues, particularly between the browser and Tomcat, however only guacd will be directly aware of connectivity issues related to the underlying remote desktop connection.

  • The guacd logs will be useful when debugging issues with remote desktop behavior, issues related to authentication with the remote desktop (not authentication with the web application), or issues related to guacd accessing the file system (session recording, file transfer).

Accessing the Guacamole logs (kcm-guacamole-standalone)

When installed using the kcm package, the Guacamole web application will log its messages to syslog. To view the log messages from Guacamole specifically, specify the "-t guacamole" option to restrict journalctl to showing only log messages from the "guacamole" syslog identifier:

$ journalctl -t guacamole

Once open, the arrow keys, page up/down, etc. can be used to scroll through the Guacamole logs. You may need to scroll to the right to see the details of lengthy messages. Alternatively, the logs can also be sent to a file using the standard output redirection provided by the shell:

$ journalctl -t guacamole > my-guacamole-logs.txt

Accessing the Tomcat logs (manual deployment of kcm-guacamole)

The Guacamole web application will log its messages through Tomcat. To view the Tomcat logs specifically, specify the "-u tomcat" option to restrict journalctl to showing only log messages from Tomcat's systemd unit:

$ journalctl -u tomcat

Once open, the arrow keys, page up/down, etc. can be used to scroll through the Tomcat logs. You may need to scroll to the right to see the details of lengthy messages. Alternatively, the logs can also be sent to a file using the standard output redirection provided by the shell:

$ journalctl -u tomcat > my-tomcat-logs.txt

Accessing the guacd logs

The guacd service uses syslog to log its messages. To view the log messages from guacd specifically, specify the "-t guacd" option to restrict journalctl to showing only log messages from the "guacd" syslog identifier:

$ journalctl -t guacd

Once open, the arrow keys, page up/down, etc. can be used to scroll through the guacd logs. You may need to scroll to the right to see the details of lengthy messages. Alternatively, the logs can also be sent to a file using the standard output redirection provided by the shell:

$ journalctl -t guacd > my-guacd-logs.txt

Connection Issues

If Keeper Connection Manager is hanging during startup, or unable to connect to any hosts, one thing to quickly check is if the Linux machine is capable of generating enough entropy for random number generation. To resolve this, we recommend installing the haveged package.

These packages can be installed using the commands below (CentOS / RHEL):

sudo yum install epel-release
sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable haveged

Installation Issues

Packages cannot be downloaded from the Keeper Connection Manager repository

Verify that your server can access the internet

Depending on the configuration of your network and server, internet access may be unavailable. If this is the case, the site hosting the repository will not be reachable and the packages will not be able to be downloaded. You will need to adjust the configuration of your network/server to ensure the repository can be accessed. Alternatively, if your organization maintains its own internal set of repository mirrors, you can configure your repository to mirror ours and point your server at your mirror instead.

Dependency errors block installation of the packages

Verify that you are using a supported Linux distribution

Keeper Connection Manager supports CentOS and RHEL for the Keeper Connection Manager product. The packages should not be installed under other Linux distributions, regardless of whether those Linux distributions also use RPM. For more information, please see the overall list of supported distributions in our scope of support. If you are unable to deploy a CentOS or RHEL server, you can still install Keeper Connection Manager by leveraging our Docker images.

Verify that your version of CentOS or RHEL is supported.

Keeper Connection Manager supports specific versions of CentOS and RHEL. It is our intent to support all non-EOL versions of CentOS and RHEL, however this may not be the case for relatively new releases of these distributions, particularly of those releases introduce major differences in the handling of packaging, repositories, or in the availability of dependencies. Please see the list of specific CentOS and RHEL versions supported in our scope of support.

Verify that the repository you are using matches your version of CentOS or RHEL

It is not possible to use the EL6 repository on CentOS / RHEL 7, nor is it possible to use the EL7 repository on CentOS / RHEL 6. The version of the repository must match the version of CentOS or RHEL for the dependencies of the packages, the versions of the APIs used by the packages, etc. to be correct.

Check whether EPEL is required for the package in question

Older versions of CentOS and RHEL, particularly version 6, require the EPEL repository for fundamental dependencies of the Apache Guacamole stack like libwebp. On CentOS / RHEL 6, the EPEL repository must be installed before the packages that make up Keeper Connection Manager can be installed. Newer versions of CentOS and RHEL do not strictly require EPEL. For CentOS / RHEL 7, you will only need EPEL if you are installing support for telnet.

Web application reachability and behavior

Cannot connect to http://SERVER:8080/ after installation

Verify that the firewall is not blocking access

CentOS and RHEL come with the "firewalld" firewall by default, typically allowing inbound connections only to port 22 for SSH. If firewalld is enabled on your system, and you wish to access to port 8080, you will need to either temporarily disable the firewall (if you are only testing whether things work as expected) or allow direct access to port 8080 (if another server on your network will be providing SSL termination, and this server is not publicly visible).

To disable the firewall temporarily:

$ sudo systemctl stop firewalld

To allow direct access to port 8080:

$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
$ sudo firewall-cmd --reload

Verify that the server in question is reachable

If your server is on a private network, it may be the case that the machine you are testing from is simply unable to reach that network. You may need to move to a machine within the same network to perform your tests, or establish a temporary tunnel or bridge between the networks to cause the server to become reachable.

Verify that Tomcat is indeed running

The Apache Guacamole web application is run using Apache Tomcat. Installing Tomcat is part of the Keeper Connection Manager install procedures, and the Tomcat service must be running for the Guacamole web application installed as part of Keeper Connection Manager to become reachable. If unsure whether Tomcat is running, the easiest way to check is using systemctl:

$ sudo systemctl status tomcat

If Tomcat is not running, it will need to be started for the web application to be accessible via port 8080. The service should also be set to automatically start on boot, such that the service will come back online after a server restart.

To start Tomcat manually:

$ sudo systemctl start tomcat

To configure Tomcat to start automatically when the server next boots:

$ sudo systemctl enable tomcat

Verify that the web application (guacamole.war) is deployed

While we only strictly support Apache Tomcat, the packages provided by Keeper Connection Manager do not assume that you will be using Apache Tomcat. The file containing the web application, guacamole.war, therefore must be manually deployed after Tomcat is installed. If the web application is not deployed, Tomcat will accept connections to port 8080 but will report errors when you attempt to access Guacamole.

The web application is deployed by creating a symbolic link to /opt/keeper/share/guacamole/guacamole.war within /var/lib/tomcat/webapps, as documented by the installation instructions. If deployed correctly, a directory listing of /var/lib/tomcat/webapps should show a symbolic link to guacamole.war, even if the name of the link differs from the file it points to. For example, if deployed as "guacamole":

$ ls -l /var/lib/tomcat/webapps
lrwxrwxrwx. 1 root root 34 Mar 29 20:20 guacamole.war -> /opt/keeper/share/guacamole/guacamole.war
$

Or, if deployed to the root path:

$ ls -l /var/lib/tomcat/webapps
lrwxrwxrwx. 1 root root 34 Mar 29 20:20 ROOT.war -> /opt/keeper/share/guacamole/guacamole.war
$

Cannot connect to https://SERVER/ after setting up SSL termination

Verify that the firewall is not blocking access

CentOS and RHEL come with the "firewalld" firewall by default, typically allowing inbound connections only to port 22 for SSH. If firewalld is enabled on your system, and you are using the same system to provide SSL termination, you will need allow direct access to the standard HTTPS port (443). To allow direct access to port 443:

$ sudo firewall-cmd --zone=public --add-service=https --permanent
$ sudo firewall-cmd --reload

Note that there is no need to expose direct access to port 8080 if the server will be serving as SSL termination for your deployment. Port 8080 would need to be available only locally, to be used strictly internally by the proxy.

Check whether SELinux is denying proxy connections to Tomcat

By default, the SELinux system will block both the Apache HTTP server and Nginx from establishing outbound network connections, including TCP connections to an internal instance of Apache Tomcat. If this is the case, you may see AVC denials within the SELinux audit logs (/var/log/audit/audit.log), and SELinux must be configured to allow these connections by setting the httpd_can_network_connect boolean to "1":

$ sudo setsebool -P httpd_can_network_connect 1

Verify that the reverse proxy is running

Following packaging best practices, neither the packages providing the Apache HTTP server nor the packages providing Nginx will start their corresponding services by default. They must be manually started and manually configured to start automatically on boot. If this has not been done, there will be no service listening on port 443, and connections will either timeout or be refused entirely.

To start the Apache HTTP server and configure it to start automatically on boot:

$ sudo systemctl start httpd
$ sudo systemctl enable httpd

To start NGINX and configure it to start automatically on boot:

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Login page does not display

Verify that the "tomcat" user Is part of the "guacamole" group

The Keeper Connection Manager packages create a "guacamole" group for controlling access to files that should be readable only by the Apache Guacamole web application. Configuration files specific to Guacamole, like /etc/guacamole/guacamole.properties, have their permissions set such that only root and members of the "guacamole" group have read access. As it is Apache Tomcat which runs the Guacamole web application, and the Tomcat service runs as the "tomcat" user, the "tomcat" user must be a member of the "guacamole" group:

$ sudo usermod -aG guacamole tomcat

If this is not done, Guacamole will not be able to read its own configuration files, and web application startup will fail.

Check whether SELinux is denying access to the database

By default, the SELinux system will block Apache Tomcat from establishing outbound network connections to databases, including connections to local database instances. If this is the case, you may see AVC denials within the SELinux audit logs (/var/log/audit/audit.log), and SELinux must be configured to allow these connections by setting the tomcat_can_network_connect_db boolean to "1":

$ sudo setsebool -P tomcat_can_network_connect_db 1

The database initialization scripts may not have not been run

Apache Guacamole's database must be manually initialized using the SQL scripts provided. If these scripts have not been run, the tables required by Guacamole will not exist, and its attempts to query these tables will fail. If using MySQL, verify that you have indeed run the MySQL initialization scripts as documented. If using PostgreSQL, verify that you have run the PostgreSQL initialization scripts as documented, and that you did so prior to granting the required database permissions.

(If using PostgreSQL) Check whether PostgreSQL is configured to expect "Ident" authentication

If PostgreSQL has been installed locally, on the same server as Apache Guacamole, the default configuration of PostgreSQL will prevent Guacamole from authenticating with a username and password. The mechanisms used by PostgreSQL for authentication depend on the source of the database connection. By default, PostgreSQL is configured to expect "Ident" authentication rather than a username and password, which will result in Guacamole being unable to connect to PostgreSQL.

Check the contents of /var/lib/pgsql/data/pg_hba.conf, looking for one or more lines which associate IPv4 or IPv6 loopback addresses with "Ident":

host    all     all     127.0.0.1/32    ident
host    all     all     ::1/128         ident

If found, the keyword ident should be changed to md5 to allow username/password authentication from these addresses:

host    all     all     127.0.0.1/32    md5
host    all     all     ::1/128         md5

PostgreSQL will then need to be restarted to apply these changes:

$ sudo systemctl restart postgresql

(If using MySQL) Check whether MySQL is configured with default anonymous users

If MySQL or MariaDB are installed locally, on the same server as Apache Guacamole, the default configuration may prevent Guacamole from authenticating due to the way that MySQL and MariaDB handle authentication. If an anonymous user is defined for the same hostname/address, authentication using a non-anonymous user and password from the same hostname/address will fail.

This can be checked by querying the MySQL user table directly:

SELECT Host, User FROM mysql.user;

Any users with empty usernames in the results of the above query are anonymous users which may block authentication from succeeding:

+---------------------+----------------+
| Host                | User           |
+---------------------+----------------+
| %                   | guacamole_user |
| 127.0.0.1           | root           |
| ::1                 | root           |
| the.server.hostname |                |
| the.server.hostname | root           |
| localhost           |                |
| localhost           | root           |
+---------------------+----------------+

Dropping those users should allow non-anonymous authentication from those same hosts to succeed:

DROP USER ''@'localhost';
DROP USER ''@'the.server.hostname';

Verify the necessary database permissions have been granted to the database user

Apache Guacamole requires SELECT, INSERT, UPDATE, and DELETE privileges on all tables within its database. For PostgreSQL, it additionally requires SELECT and USAGE privileges on all sequences in its database.

  • If using MySQL, verify that you have indeed run the GRANT statement and FLUSH PRIVILEGES as documented. It is important to remember that MySQL caches database privileges and will not apply changes to privileges unless FLUSH PRIVILEGES is run.

  • If using PostgreSQL, verify that you have run both GRANT statements as documented, and that you did so prior to granting the required database permissions. It is important to remember that PostgreSQL can only grant permissions related to tables and sequences that exist. If GRANT statements are run before Guacamole's database tables exist, they will not have any effect.

Check for trailing whitespace after database-related properties

While the Java .properties files do not assign meaning to whitespace that occurs before a property value, everything after the first non-whitespace character of a property value is part of the property value, including further whitespace. If you are confident that all database-related properties within /etc/guacamole/guacamole.properties look correct, check that you have not accidentally inserted whitespace at the end of what otherwise appears to be a correct value.

Administration

LDAP users are not listed when integrating LDAP with a database

Check that your (administrative) Guacamole user account has permission to list LDAP users

Apache Guacamole's LDAP support will not bypass the permissions enforced by your LDAP directory. This means that your Guacamole user will only be able to see LDAP users within Guacamole's admin interface if your corresponding LDAP user has this permission to list these users, regardless of whether Guacamole's "search" LDAP user has permission and regardless of whether your database user has general permission to manage users.

If unsure whether your user has permission, a good way to check is to execute an LDAP query against your directory, binding using the DN and password associated with your LDAP account. The "ldapsearch" utility is a standard tool which can perform such a search:

$ ldapsearch -x -LLL -H ldap://YOUR_LDAP_SERVER -D "YOUR_LDAP_DN" -W -b USER_BASE_DN "(objectClass=*)"

where YOUR_LDAP_SERVER is the hostname or IP address of your LDAP server, YOUR_LDAP_DN is the full DN of your account within LDAP, and USER_BASE_DN is the base DN of all relevant users within your LDAP directory (as specified with the ldap-user-base-dn property in /etc/guacamole/guacamole.properties).

Check that you are using _LDAP** credentials to sign into Guacamole, not **database_** credentials**

If your user account within the database has an associated password, and you specify that password instead of the password associated with your LDAP account, you will successfully authenticate against the database only. This is a valid authentication result, but means that your session will lack access to LDAP objects. To be able to access objects within LDAP, including users, you must authenticate with credentials that your LDAP directory will accept.

Check for trailing whitespace after LDAP-related properties

While the Java .properties files do not assign meaning to whitespace that occurs before a property value, everything after the first non-whitespace character of a property value is part of the property value, including further whitespace. If you are confident that all LDAP-related properties within /etc/guacamole/guacamole.properties look correct, check that you have not accidentally inserted whitespace at the end of what otherwise appears to be a correct value. The presence of whitespace at the end of LDAP-related properties may result in queries failing and may cause Guacamole to incorrectly interpret the results of queries that appear to succeed.

The password for "guacadmin" (or the current user) cannot be changed

Use the "Preferences" interface for changing your own password, not the administrative user editor

Apache Guacamole has two mechanisms available for changing a user's password: the user editor, for changing the passwords of other users (without having to know their current passwords), and the "Preferences" screen, for changing your own password after verifying that you know your current password. As only the "Preferences" screen verifies that you know your current password, this is the only mechanism which Guacamole will allow if you are making changes to your own user. If you attempt to change your own password using the user editor, permission will be denied. For administrators, the "Preferences" screen can be accessed by going to "Settings" and then selecting "Preferences".

Check that the user in question has permission to change their own password

User accounts defined within the Apache Guacamole database do not necessarily have permission to change their own passwords. Permission to update your own password must be explicitly granted by the administrator. If you are an administrator and you want a newly-created user to be able to change their own password, check the box next to the "Change own password" permission within the user editor.

Remote desktop reachability and behavior

Cannot connect to any remote desktops

Verify that guacd is running

The Apache Guacamole web application relies upon a service called "guacd" to handle low-level communication with remote desktops, translation from native remote desktop protocols to the Guacamole protocol, and optimization. The guacd service must be running for the Guacamole web application installed as part of Keeper Connection Manager to be able to connect to remote desktops. If unsure whether guacd is running, the easiest way to check is using systemctl:

$ sudo systemctl status guacd

If guacd is not running, it will need to be started. The service should also be set to automatically start on boot, such that the service will come back online after a server restart.

To start guacd manually:

$ sudo systemctl start guacd

To configure guacd to start automatically when the server next boots:

$ sudo systemctl enable guacd

Verify that the remote desktops in question are indeed reachable

Apache Guacamole is a remote desktop gateway. As it is Guacamole (and, more specifically, guacd) which connects to remote desktops on each user's behalf, the Guacamole server itself must be able to reach these remote desktops. The user attempting to connect does not need direct network access to their remote desktops, but the Guacamole server must be able to reach them.

If connections are unexpectedly failing, check that the failing remote desktop(s) are reachable from the Guacamole server's network and that no firewall rules on the remote desktop(s) themselves are blocking this access.

Cannot connect to Windows using RDP

Try explicitly specifying the security method

Recent versions of Windows require NLA (Network Level Authentication) by default, an RDP-specific security method which uses higher-grade encryption and which enforces authentication before allocating desktop session resources. If connections to your Windows RDP servers are failing, try selecting the "NLA" or "TLS" security mode within the failing connection(s) parameters. If you do not also specify the username, password, and (if applicable) domain, Guacamole will prompt you for these details upon connecting.

Similarly, older versions of Windows may not support NLA or TLS by default, and Guacamole's initial security negotiation may fail unless the older "RDP" security method is explicitly selected. In older versions of Guacamole, the "RDP" security method was the default.

Try disabling validation of the RDP server certificate

Both the NLA (Network Level Authentication) and TLS security modes involve client verification of the RDP server's certificate. In the case of most Windows servers, this certificate will be self-signed and cannot be verified. Lacking the ability to verify the certificate against a known certificate authority, Guacamole will refuse to complete the RDP connection. Individual RDP connections can be configured to bypass this verification by checking the "Ignore server certificate" option within the connection parameters.

Check whether Windows firewall rules are blocking RDP connections from guacd

The Windows firewall may be configured to block inbound RDP connections, either locally or through GPOs. If the Windows machine in question has historically been accessed using RDP, it may still be the case that RDP access is blocked for all but a specific subnet in which the Guacamole server does not reside. If this is the case, the Windows firewall should be reconfigured to allow the Guacamole server (or its subnet) to connect via RDP. The Windows server does not need to be publicly accessible.

File transfer using RDP drive redirection is not working

Check that the drive path points to a directory that is writable by the "guacd" user or group

The Keeper Connection Manager packages create a "guacd" user and group for controlling access to files that should be accessible only by guacd. If you are configuring RDP drive redirection, and this user (or group) is not given write access to the directory chosen as the RDP drive path, guacd will not be able to read/write files within that directory as it emulates the redirected drive. Appropriate permissions and ownership should be assigned to any directory intended for use as an RDP connection's drive path:

$ sudo chown -R root:guacd /path/to/directory
$ sudo chmod 770 /path/to/directory

File Permission Errors

When the packages are installed, the folder /var/lib/guacamole will be created by default for each service.

The "guacd" service is run as the guacd user and the guacd user is the only user that needs read/write permission on the subfolders within the /var/lib/guacamole subfolders, such as the "recordings" and "drives" folder.

The "guacamole" process runs as "guacamole" user, and needs read access to the "recordings" subfolder and files.

MySQL

Advanced configuration of MySQL connection type

Support for the MySQL protocol within Keeper Connection Manager is provided by the kcm-libguac-client-mysql package. This package will be installed by default if the @kcm-guacamole package group was used during installation, and is already installed within the keeper/guacd Docker image. If this package has not yet been installed, MySQL connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

If such an error appears within the guacd logs, simply installing kcm-libguac-client-mysql is sufficient to resolve the issue:

The guacd service does not need to be restarted for installation of MySQL support to take effect.

Overview

The MySQL implementation in Keeper Connection Manager utilizes the MySQL client library as well as an internal terminal library which renders the user interface. Guacamole's MySQL support emulates a terminal on the server side, and draws the screen of this terminal remotely on the client.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

Network parameters

MySQL connections are established over TCP to a specific port and a specific hostname or IP address. The hostname/address must be specified for all MySQL connections, but you only need to specify a port if you are not using the standard MySQL port (3306).

Field header (web interface)
Parameter name
Description

Authentication parameters

Keeper Connection manager supports MySQL authentication through username and password parameters. Both fields are required to establish a connection.

Field header (web interface)
Parameter name
Description

Database parameters

The default database can be specified when establishing the connection. You can also disable the ability to perform CSV import and export of data.

Field header (web interface)
Parameter name
Description

Display settings

Guacamole's MySQL support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

If selecting a different font for a MySQL connection, the chosen font must be installed on the server running guacd. It is the server that will handle rendering of characters to the terminal display, not the client.

Field header (web interface)
Parameter name
Description

Custom color schemes

Custom color schemes may be provided for the terminal emulator used by MySQL connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

Legal color names are:

  • "foreground" - the default foreground color.

  • "background" - the default background color.

  • "colorN" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

  • "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "rgb:ff/00/00" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "rgb:f/8/0", "rgb:f0/80/00", and "rgb:f0f/808/00f" all refer to the same effective color.

  • "colorN" - the color currently assigned to index N within the Xterm 256-color palette. For example, "color9" specifies the color currently assigned to palette index 9. Note that the current color value is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.

  • "NAME" - the color with human-readable name "NAME", where "NAME" is one of the . These names generally correspond to the names standardized by the W3C for CSS.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for MySQL connections. This behavior can be overridden on a per-connection basis, restricting access to the clipboard.

Field header (web interface)
Parameter name
Description

Text session recording (typescripts)

The full, raw text content of MySQL sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "NAME" is the value provided for the typescript name, these files will be named "NAME" and "NAME.timing" respectively.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using scriptreplay (if installed). For example, to replay a typescript called "NAME", you would run:

Field header (web interface)
Parameter name
Description

Screen recording parameters

MySQL sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the hosted at (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment:

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the documentation page.

Field header (web interface)
Parameter name
Description

guacd[8]: WARNING: Support for protocol "mysql" is not installed
$ sudo yum install kcm-libguac-client-mysql

Hostname

hostname

REQUIRED: The hostname or IP address of the MySQL server Guacamole should connect to.

Port

port

The port the MySQL server is listening on. By default, the standard MySQL port of 3306 will be used.

Unix Socket

unix-socket

The socket name used for MySQL connections when running using the unix socket method. This is used if the host field is empty.

Username

username

REQUIRED: The username to authenticate as when connecting to the specified MySQL server.

Password

password

REQUIRED: The password to use when authenticating with the specified MySQL server.

Default Database

database

The database schema selected when connecting to the specified MySQL server.

Disable CSV Export

disable-csv-export

Set this value to "true" to disable CSV export of data when using the SQL statement "select ... into local outfile"

Disable CSV Import

disable-csv-import

Set this value to "true" to disable CSV import of data when using the SQL statement "load data local infile ... into table"

Theme

color-scheme

The color scheme to use for the terminal emulator used by SSH connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:

  • "black-white" - Black text over a white background

  • "gray-black" - Gray text over a black background (the default)

  • "green-black" - Green text over a black background

  • "white-black" - White text over a black background

  • A custom color scheme (as described below)

By default, Guacamole will render text as gray over a black background.

Font name

font-name

The name of the font to use. If not specified, the default of "monospace" will be used instead. This must be the name of a font installed on the server running guacd, and should be a monospaced font. If a non-monospaced font is used, individual glyphs may render incorrectly.

Font size

font-size

The size of the font to use, in points. By default, the size of rendered text will be 12 point.

Maximum scrollback size:

scrollback

The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

Disable copying from terminal:

disable-copy

If set to "true", text copied within the MySQL session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the MySQL session. By default, the user will be able to paste data from outside the browser within the MySQL session.

$ scriptreplay NAME.timing NAME

Typescript path

typescript-path

The directory in which typescript files should be created. If a typescript needs to be recorded, then this parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript name

typescript-name

The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.

Guacamole will never overwrite an existing typescript. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Automatically create typescript path

create-typescript-path

If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Recording path

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Network parameters
Authentication parameters
Database parameters
Display settings
Custom color schemes
Clipboard parameters
Terminal behavior parameters
Text session recording (typescripts)
Screen recording parameters
standard color names supported by X11
Glyptodon Enterprise Session Recording Player application
player.glyptodon.com
https://github.com/glyptodon/glyptodon-enterprise-player
Session Recording
Authentication Parameters
Display settings
Clipboard parameters
Typescript settings
custom color scheme
custom color scheme

Kubernetes

Advanced configuration of Kubernetes connection type

Within Keeper Connection Manager, support for attaching to the consoles of Kubernetes containers is provided by the kcm-libguac-client-kubernetes package. Support for Kubernetes is not installed by the @kcm package group, but is installed within the keeper/guacd Docker image. If this package has not yet been installed, Kubernetes connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

guacd[8]: WARNING: Support for protocol "kubernetes" is not installed

If such an error appears within the guacd logs, simply installing kcm-libguac-client-kubernetes is sufficient to resolve the issue:

$ sudo yum install kcm-libguac-client-kubernetes

The guacd service does not need to be restarted for installation of Kubernetes support to take effect.

Overview

Keeper's Kubernetes support takes the form of a protocol implementation which allows Guacamole to attach to the consoles of Kubernetes containers using Kubernetes' REST API. As with SSH and telnet, Guacamole's Kubernetes support emulates a terminal on the server side which renders to the Guacamole client's display.

Support for attaching to Kubernetes containers is controlled through the use of several parameters. When a database like MySQL or PostgreSQL is used, these parameters are presented in a convenient web interface. If defining connections through another mechanism, such as through encrypted JSON or LDAP schema modifications, parameters are specified using their internal parameter names.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

  • Network parameters

  • Container parameters

  • Authentication parameters

  • Display settings

    • Custom color schemes

  • Terminal behavior parameters

  • Text session recording (typescripts)

  • Screen recording parameters

Network parameters

Connecting to a Kubernetes server in order to attach to a container involves establishing a WebSocket connection with that server, and requires the server's hostname or IP address. Depending on the Kubernetes server, SSL/TLS may also be required for the connection.

Field header (web interface)
Parameter name
Description

Hostname:

hostname

REQUIRED: The hostname or IP address of the Kubernetes server Guacamole should connect to.

Port:

port

The port the Kubernetes server is listening on. By default, port 8080 will be used.

Use SSL/TLS:

use-ssl

If set to "true", SSL/TLS will be used to connect to the Kubernetes server. By default, SSL/TLS will not be used.

Ignore server certificate:

ignore-cert

If set to "true", the validity of the SSL/TLS certificate used by the Kubernetes server will be ignored if it cannot be validated. By default, SSL/TLS certificates are validated.

Certificate authority certificate:

ca-cert

The certificate of the certificate authority that signed the certificate of the Kubernetes server, in PEM format. If omitted, verification of the Kubernetes server certificate will use only .

Container parameters

Attaching to a particular Kubernetes container naturally required the name of the pod containing the container in question. By default, Guacamole will attach to the first container in the pod. If there are multiple containers in the pod, you may wish to also specify the container name.

Field header (web interface)
Parameter name
Description

Namespace:

namespace

The name of the Kubernetes namespace of the pod containing the container being attached to. If omitted, the namespace "default" will be used.

Pod name:

pod

REQUIRED: The name of the Kubernetes pod containing with the container being attached to.

Container name:

container

The name of the container to attach to. If omitted, the first container in the pod will be used.

Authentication parameters

If enabled, Kubernetes uses SSL/TLS for both encryption and authentication. Standard SSL/TLS client authentication requires both a client certificate and client key, which Guacamole will use to identify itself to the Kubernetes server.

Field header (web interface)
Parameter name
Description

Client certificate:

client-cert

The certificate to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. If omitted, SSL client authentication will not be performed.

Client key:

client-key

The key to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. If omitted, SSL client authentication will not be performed.

Display settings

Guacamole's Kubernetes support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

If selecting a different font for a Kubernetes connection, the chosen font must be installed on the server running guacd. It is the server that will handle rendering of characters to the terminal display, not the client.

Field header (web interface)
Parameter name
Description

Color scheme:

color-scheme

The color scheme to use for the terminal emulator used by Kubernetes connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:

  • "black-white" - Black text over a white background

  • "gray-black" - Gray text over a black background (the default)

  • "green-black" - Green text over a black background

  • "white-black" - White text over a black background

  • A custom color scheme (as described below)

By default, Guacamole will render text as gray over a black background.

Font name:

font-name

The name of the font to use. If not specified, the default of "monospace" will be used instead. This must be the name of a font installed on the server running guacd, and should be a monospaced font. If a non-monospaced font is used, individual glyphs may render incorrectly.

Font size:

font-size

The size of the font to use, in points. By default, the size of rendered text will be 12 point.

Maximum scrollback size:

scrollback

The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.

Custom color schemes

Custom color schemes may be provided for the terminal emulator used by Kubernetes connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

Legal color names are:

  • "foreground" - the default foreground color.

  • "background" - the default background color.

  • "colorN" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

  • "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "rgb:ff/00/00" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "rgb:f/8/0", "rgb:f0/80/00", and "rgb:f0f/808/00f" all refer to the same effective color.

  • "colorN" - the color currently assigned to index N within the Xterm 256-color palette. For example, "color9" specifies the color currently assigned to palette index 9. Note that the current color value is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.

  • "NAME" - the color with human-readable name "NAME", where "NAME" is one of the standard color names supported by X11. These names generally correspond to the names standardized by the W3C for CSS.

Terminal behavior parameters

In most cases, the default behavior of the Guacamole terminal emulator works without modification. However, when connecting to certain systems, the terminal behavior may need to be tweaked to allow it to operate properly. Guacamole's Kubernetes support provides parameters for controlling the control code sent for backspace.

Field header (web interface)
Parameter name
Description

Backspace key sends:

backspace

The integer value of the terminal control code that should be sent when backspace is pressed. Under most circumstances this should not need to be adjusted; however, if, when pressing the backspace key, you see control characters (often either ^? or ^H) instead of seeing the text erased, you may need to adjust this parameter. By default, the control code 127 (Delete) is sent.

Text session recording (typescripts)

The full, raw text content of Kubernetes sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "NAME" is the value provided for the typescript name, these files will be named "NAME" and "NAME.timing" respectively.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using scriptreplay (if installed). For example, to replay a typescript called "NAME", you would run:

$ scriptreplay NAME.timing NAME
Field header (web interface)
Parameter name
Description

Typescript path:

typescript-path

The directory in which typescript files should be created. If a typescript needs to be recorded, then this parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript name:

typescript-name

The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.

Guacamole will never overwrite an existing typescript. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Automatically create typescript path:

create-typescript-path

If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Screen recording parameters

Kubernetes sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the Glyptodon Enterprise Session Recording Player application hosted at player.glyptodon.com (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment: https://github.com/glyptodon/glyptodon-enterprise-player

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the Session Recording documentation page.

Field header (web interface)
Parameter name
Description

Recording path:

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name:

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams:

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse:

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events:

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path:

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

LDAP Configuration Properties

Advanced configuration properties for LDAP Authentication

The properties listed here are only applicable if LDAP authentication is being used. Support for LDAP authentication is installed using the kcm-guacamole-auth-ldap package. If using the keeper/guacamole Docker image, support for LDAP authentication is instead configured using environment variables.

  • TCP connection information

  • LDAP user / user DN description

  • LDAP user search DN

  • LDAP group / group DN description

  • Base DN for Guacamole connections (guacConfigGroup)

  • LDAP search result limits

  • LDAP user attributes

  • Custom LDAP search filters

  • LDAP aliases and referrals

TCP connection information

The TCP connection details of the LDAP server, as well as whether encryption should be used.

Property name ()

Property name ()

Default value

Description

ldap-hostname

hostname

localhost

The hostname/address of the LDAP server.

ldap-port

port

389, or 636 for LDAPS

The TCP port that the LDAP server is listening on.

ldap-encryption-method

encryption-method

none

The encryption method to use when communicating with the LDAP server. Valid encryption methods are:

  • none (for unencrypted LDAP)

  • ssl (for LDAP over SSL/TLS, also known as LDAPS)

  • starttls (for STARTTLS)

LDAP user / user DN description

The base DN of all Guacamole users within the LDAP directory, and the attribute which contains each user's username. If the username attribute is not part of the DN, a search DN will need to be provided, as well.

Property name ()

Property name ()

Default value

Description

ldap-user-base-dn

user-base-dn

N/A

The base DN beneath which all relevant LDAP users may be found. If not using a search DN, this DN must be the common portion of the DN shared by all users to which the username attribute can be added.

ldap-username-attribute

username-attribute

uid

The attribute which contains the user's username. For OpenLDAP, the default value of "uid" is usually correct. For Active Directory, the correct value is typically "sAMAccountName", and a search DN will be .

LDAP user search DN

The DN and password of the user to bind as when searching for the DN of each user attempting to log in. If omitted, the DN of each user will be derived directly using the user base DN and username attribute.

Property name ()

Property name ()

Description

ldap-search-bind-dn

search-bind-dn

The DN of the user that Guacamole should bind as when attempting to resolve the DN of an authenticating user (). If omitted, the DN of each user will be . Note that the permissions associated with this account do not affect whether a user can see objects within the LDAP directory. Users, connections, etc. will only be visible to LDAP users if those users are granted permission to see those objects within LDAP.

ldap-search-bind-password

search-bind-password

The password that should be provided when Guacamole binds with the given search DN in order to resolve the DN of an authenticating user.

LDAP group / group DN description

The base DN of all Guacamole user groups within the LDAP directory, and the attribute which contains each group's name. If storing connection information within LDAP, the provided base DN must also contain any groups that may be referenced within "guacConfigGroup" objects using the "seeAlso" attribute.

Property name ()

Property name ()

Default value

Description

ldap-group-base-dn

group-base-dn

N/A

The base DN beneath which all relevant LDAP groups may be found. This tree will be searched using the user's own credentials to determine their group memberships upon login.

If storing connection information within LDAP, this must also be the base DN of the LDAP directory subtree that should be searched for "guacConfigGroup" memberships specified using the "seeAlso" attribute.

ldap-group-name-attribute

group-name-attribute

cn

The attribute which contains the group's name. For most LDAP servers, including Active Directory, the default value of "cn" is usually correct.

Base DN for Guacamole connections (guacConfigGroup)

The base DN for all Guacamole connections defined directly within the LDAP directory using "guacConfigGroup" objects. The LDAP schema files for "guacConfigGroup" objects can be found within /usr/share/guacamole-auth-ldap/schema in both LDIF and .schema format. Note that storing connections directly within the LDAP directory is optional. If connections will not be stored within the directory, this base DN should not be provided.

Property name ()

Property name ()

Description

ldap-config-base-dn

config-base-dn

The base DN of the LDAP subtree that should be searched for connections stored directly within the directory ("guacConfigGroup" objects). If connections are not being stored within the LDAP directory (no schema changes have been applied), this property should not be specified.

LDAP search result limits

The maximum number of LDAP search results which can be returned by a single query. LDAP searches which exceed this limit will fail.

Property name ()

Property name ()

Default value

Description

ldap-max-search-results

max-search-results

1000

The maximum number of LDAP search results to retrieve via a single query. By default, LDAP searches are limited to returning a maximum of 1000 entries.

LDAP user attributes

Arbitrary LDAP user attributes may be used to dynamically affect the behavior of connections based on the user accessing them. When a user authenticates with LDAP and subsequently accesses a particular Guacamole connection, the values of these attributes will be made available as parameter tokens and applied to the parameters of the connection. If the attribute has no value for the current user, then the corresponding token is not applied. If the attribute has multiple values, then the first value of the attribute is used.

These attributes must be configured for use as parameter tokens ahead of time by being explicitly listed within /etc/guacamole/guacamole.properties. By default, no LDAP user attributes are made available as parameter tokens.

Property name ()

Property name ()

Description

ldap-user-attributes

user-attributes

The attribute or attributes to retrieve from the LDAP directory for users that authenticate using LDAP, separated by commas. If specified, the attributes listed here are retrieved from each authenticated user and dynamically applied to the parameters of that user's connections as parameter tokens with the prefix "LDAP_".

When converting an LDAP attribute name into a parameter token name, the name of the attribute is transformed into uppercase with each word separated by underscores, a naming convention referred to as "uppercase with underscores" or "screaming snake case". For example:

LDAP Attribute
Parameter Token

lowercase-with-dashes

${LDAP_LOWERCASE_WITH_DASHES}

CamelCase

${LDAP_CAMEL_CASE}

headlessCamelCase

${LDAP_HEADLESS_CAMEL_CASE}

lettersAndNumbers1234

${LDAP_LETTERS_AND_NUMBERS_1234}

aRANDOM_mixOf-3NAMINGConventions

${LDAP_A_RANDOM_MIX_OF_3_NAMING_CONVENTIONS}

Custom LDAP search filters

The search filter which should be used to retrieve lists of users or groups from the LDAP directory. By default, a filter which matches all objects is used, and the only restriction is given through the relevant base DN. If you need to narrow the lists of users or groups further, the default filter can be overridden.

If overriding a search filter, be sure that the filter is a valid LDAP filter. In particular, an LDAP filter must be enclosed in a matching pair of parenthesis. If unsure whether your filter is valid, or if seeing unexpected results, it can be helpful to verify your filter against your LDAP server using a command-line utility like "ldapsearch".

Property name ()

Property name ()

Default value

Description

ldap-user-search-filter

user-search-filter

(objectClass=*)

The search filter which should be used to retrieve the list of users from the LDAP directory. If a search DN is used (), this filter will also restrict the users that can log into Guacamole.

ldap-group-search-filter

group-search-filter

(objectClass=*)

The search filter which should be used to retrieve the list of groups that may be used by other extensions to define permissions.

LDAP aliases and referrals

Whether (and how) Guacamole should follow LDAP aliases or referrals when encountered during an LDAP query. By default, Guacamole will not dereference aliases and will not follow referrals.

Property name ()

Property name ()

Default value

Description

ldap-dereference-aliases

dereference-aliases

never

The method that Guacamole should use to dereference LDAP aliases, if at all. Legal alias dereferencing modes are:

  • never (do not dereference aliases at all)

  • searching (dereference aliases only after the search base has been found)

  • finding (dereference aliases only when finding the search base)

  • always (dereference aliases in all cases)

ldap-follow-referrals

follow-referrals

false

If set to "true", referrals received from the LDAP directory will be automatically followed. By default, referrals are not followed.

ldap-max-referral-hops

max-referral-hops

5

The maximum number of referrals to follow before aborting an LDAP query. This property only has an effect if LDAP referral following is enabled. If referral following is enabled, the following performed is limited to 5 hops by default.

Telnet

Advanced configuration of Telnet connection type

Support for the telnet protocol within Keeper Connection Manager is provided by the kcm-libguac-client-telnet package. Support for telnet is not installed by the @kcm package group, but is installed within the. If this package has not yet been installed, telnet connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

If such an error appears within the guacd logs, simply installing kcm-libguac-client-telnet is sufficient to resolve the issue:

The guacd service does not need to be restarted for installation of telnet support to take effect.

Overview

Telnet is a text protocol and provides similar functionality to. By nature, it is not encrypted, and does not provide support for file transfer. As far as graphics are concerned, Guacamole's telnet support works in the same manner as : it emulates a terminal on the server side which renders to the Guacamole client's display.

Keeper's support for the telnet protocol is controlled through the use of several parameters. When a database like or is used, these parameters are presented in a convenient web interface. If defining connections through another mechanism, such as through or , parameters are specified using their internal parameter names.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

Network parameters

Telnet connections are established over TCP to a specific port and a specific hostname or IP address. The hostname/address must be specified for all telnet connections, but you only need to specify a port if you are not using the standard telnet port (23).

Field header (web interface)
Parameter name
Description

Authentication parameters

Telnet does not actually provide any standard means of authentication. Authentication over telnet depends entirely on the login process running on the server and is interactive. To cope with this, Guacamole provides non-standard mechanisms for automatically passing the username and entering password. Whether these mechanisms work depends on specific login process used by your telnet server.

The de-facto method for passing the username automatically via telnet is to submit it via the USER environment variable, sent using telnet's "NEW-ENVIRON" option. This is the mechanism used by most telnet clients, typically by specifying -l on the command line.

Passwords cannot typically be sent automatically - at least not as reliably as the username. There is no PASSWORD environment variable, nor any similar mechanism for passing the password to the telnet login process, and most telnet clients provide no built-in support for automatically entering the password. The best that can be done is to heuristically detect the password prompt and type the password on behalf of the user if/when the prompt appears. The prescribed method for doing this with a traditional command-line telnet is to use a utility like expect. Guacamole provides similar functionality by searching for the password prompt with a regular expression. This same regular expression mechanism is also implemented as an option for handling the username prompt (if "NEW-ENVIRON" is unavailable), as well as for detecting login success/failure.

Field header (web interface)
Parameter name
Description

Display settings

Guacamole's telnet support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

If selecting a different font for a telnet connection, the chosen font must be installed on the server running guacd. It is the server that will handle rendering of characters to the terminal display, not the client.

Field header (web interface)
Parameter name
Description

Custom color schemes

Custom color schemes may be provided for the terminal emulator used by telnet connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

Legal color names are:

  • "foreground" - the default foreground color.

  • "background" - the default background color.

  • "colorN" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

  • "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "rgb:ff/00/00" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "rgb:f/8/0", "rgb:f0/80/00", and "rgb:f0f/808/00f" all refer to the same effective color.

  • "colorN" - the color currently assigned to index N within the Xterm 256-color palette. For example, "color9" specifies the color currently assigned to palette index 9. Note that the current color value is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.

  • "NAME" - the color with human-readable name "NAME", where "NAME" is one of the . These names generally correspond to the names standardized by the W3C for CSS.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for telnet connections. This behavior can be overridden on a per-connection basis, restricting access to the clipboard.

Field header (web interface)
Parameter name
Description

Terminal behavior parameters

In most cases, the default behavior of the Guacamole terminal emulator works without modification. However, when connecting to certain systems (particularly operating systems other than Linux), the terminal behavior may need to be tweaked to allow it to operate properly. Guacamole's telnet support provides parameters for controlling the control code sent for backspace, as well as the terminal type claimed via the TERM environment variable.

Field header (web interface)
Parameter name
Description

Text session recording (typescripts)

The full, raw text content of telnet sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "NAME" is the value provided for the typescript name, these files will be named "NAME" and "NAME.timing" respectively.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using scriptreplay (if installed). For example, to replay a typescript called "NAME", you would run:

Field header (web interface)
Parameter name
Description

Screen recording parameters

Telnet sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the hosted at (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Keeper Connection Manager Session Recording Player can be found on GitHub, along with instructions for local deployment:

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the documentation page.

Field header (web interface)
Parameter name
Description
guacamole.properties
ldap-servers.yml
guacamole.properties
ldap-servers.yml
needed due to indirect mapping of the username
guacamole.properties
ldap-servers.yml
indirect username mapping
derived directly from the base DN and username attribute
guacamole.properties
ldap-servers.yml
guacamole.properties
ldap-servers.yml
guacamole.properties
ldap-servers.yml
guacamole.properties
ldap-servers.yml
guacamole.properties
ldap-servers.yml
indirect user mapping
guacamole.properties
ldap-servers.yml
guacd[8]: WARNING: Support for protocol "telnet" is not installed
$ sudo yum install kcm-libguac-client-telnet

Hostname:

hostname

REQUIRED: The hostname or IP address of the telnet server Guacamole should connect to.

Port:

port

The port the telnet server is listening on. By default, the standard telnet port of 23 will be used.

Username:

username

The username to use to authenticate, if any. If not specified, or not supported by the telnet server, the login process on the telnet server will prompt you for your credentials. For this to work, your telnet server must either support the "NEW-ENVIRON" option (and pay attention to the USER environment variable) or provide a prompt which can be matched against a regular expression. Most telnet servers satisfy this criteria.

Password:

password

The password to use when attempting authentication, if any. If specified, your password will be typed on your behalf when the password prompt is detected.

Username regular expression:

username-regex

The regular expression to use to detect the username prompt when the username cannot be provided using "NEW-ENVIRON". If not specified, a reasonable default built into Guacamole will be used. Any regular expression provided must be written in the standard POSIX ERE dialect (the dialect used by egrep).

Password regular expression:

password-regex

The regular expression to use to detect the password prompt. If not specified, a reasonable default built into Guacamole will be used. Any regular expression provided must be written in the standard POSIX ERE dialect (the dialect used by egrep).

Login success regular expression:

login-success-regex

The regular expression to use when detecting that the login attempt has succeeded. If specified, the terminal display will not be shown to the user until text matching this regular expression has been received from the telnet server. Any regular expression provided must be written in the standard POSIX ERE dialect (the dialect used by egrep).

Login failure regular expression:

login-failure-regex

The regular expression to use when detecting that the login attempt has failed. If specified, the connection will be closed with an explicit login failure error if text matching this regular expression has been received from the telnet server. Any regular expression provided must be written in the standard POSIX ERE dialect (the dialect used by egrep).

Color scheme:

color-scheme

The color scheme to use for the terminal emulator used by telnet connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:

  • "black-white" - Black text over a white background

  • "gray-black" - Gray text over a black background (the default)

  • "green-black" - Green text over a black background

  • "white-black" - White text over a black background

  • A custom color scheme (as described below)

By default, Guacamole will render text as gray over a black background.

Font name:

font-name

The name of the font to use. If not specified, the default of "monospace" will be used instead. This must be the name of a font installed on the server running guacd, and should be a monospaced font. If a non-monospaced font is used, individual glyphs may render incorrectly.

Font size:

font-size

The size of the font to use, in points. By default, the size of rendered text will be 12 point.

Maximum scrollback size:

scrollback

The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

Disable copying from terminal:

disable-copy

If set to "true", text copied within the telnet session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the telnet session. By default, the user will be able to paste data from outside the browser within the telnet session.

Backspace key sends:

backspace

The integer value of the terminal control code that should be sent when backspace is pressed. Under most circumstances this should not need to be adjusted; however, if, when pressing the backspace key, you see control characters (often either ^? or ^H) instead of seeing the text erased, you may need to adjust this parameter. By default, the control code 127 (Delete) is sent.

Terminal type:

terminal-type

The terminal type string that should be passed to the telnet server. This value will typically be exposed within the telnet session as the TERM environment variable and will affect the control characters sent by applications. By default, the terminal type string "linux" is used.

$ scriptreplay NAME.timing NAME

Typescript path:

typescript-path

The directory in which typescript files should be created. If a typescript needs to be recorded, then this parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript name:

typescript-name

The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.

Guacamole will never overwrite an existing typescript. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Automatically create typescript path:

create-typescript-path

If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Recording path:

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name:

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams:

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse:

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events:

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path:

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

keeper/guacd Docker image
SSH
SSH
MySQL
PostgreSQL
encrypted JSON
LDAP schema modifications
Network parameters
Authentication parameters
Display settings
Custom color schemes
Clipboard parameters
Terminal behavior parameters
Text session recording (typescripts)
Screen recording parameters
standard color names supported by X11
Keeper Connection Manager Session Recording Player application
player.glyptodon.com
https://github.com/glyptodon/glyptodon-enterprise-player
Session Recording
system-wide certificate authorities

SSH

Advanced configuration of SSH Protocol connection type

Support for the SSH protocol within Keeper Connection Manager is provided by the kcm-libguac-client-ssh package. This package will be installed by default if the @kcm package group was used during installation, and is already installed within the keeper/guacd Docker image. If this package has not yet been installed, SSH connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

guacd[8]: WARNING: Support for protocol "ssh" is not installed

If such an error appears within the guacd logs, simply installing kcm-libguac-client-ssh is sufficient to resolve the issue:

$ sudo yum install kcm-libguac-client-ssh

The guacd service does not need to be restarted for installation of SSH support to take effect.

Overview

Unlike VNC or RDP, SSH is a text protocol. Its implementation in Guacamole is actually a combination of a terminal emulator and SSH client, because the SSH protocol isn't inherently graphical. Guacamole's SSH support emulates a terminal on the server side, and draws the screen of this terminal remotely on the client.

Keeper's support for the SSH protocol is controlled through the use of several parameters. When a database like MySQL or PostgreSQL is used, these parameters are presented in a convenient web interface. If defining connections through another mechanism, such as through encrypted JSON or LDAP schema modifications, parameters are specified using their internal parameter names.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

  • Network parameters

  • Authentication parameters

  • Display settings

    • Custom color schemes

  • Clipboard parameters

  • Session / Environment parameters

  • Terminal behavior parameters

  • Text session recording (typescripts)

  • Screen recording parameters

  • SFTP parameters (file transfer)

Network parameters

SSH connections are established over TCP to a specific port and a specific hostname or IP address. The hostname/address must be specified for all SSH connections, but you only need to specify a port if you are not using the standard SSH port (22).

Field header (web interface)
Parameter name
Description

Hostname:

hostname

REQUIRED: The hostname or IP address of the SSH server Guacamole should connect to.

Port:

port

The port the SSH server is listening on. By default, the standard SSH port of 22 will be used.

Public host key (Base64):

host-key

The known hosts entry for the SSH server, in the same format as would be specified within an OpenSSH known_hosts file. If not provided, no verification of host identity will be performed.

Authentication parameters

Guacamole supports keyboard-interactive, password, and public key authentication with SSH servers. To use public key authentication, it must have access to the private key and, if applicable, its passphrase. If the private key requires a passphrase, but no passphrase is provided, the user will be prompted for the passphrase upon connecting.

Field header (web interface)
Parameter name
Description

Username:

username

The username to authenticate as when connecting to the specified SSH server. If not provided, the user will be prompted to provide a username upon connecting.

Password:

password

The password to use when authenticating with the specified SSH server. If not provided, and no private key is used, the user will be prompted to provide a password upon connecting.

Private key:

private-key

The entire contents of the private key to use for public key authentication. If this parameter is not specified, public key authentication will not be used. The private key must be in OpenSSH format, as would be generated by the OpenSSH ssh-keygen utility.

Passphrase:

passphrase

The passphrase to use to decrypt the private key for use in public key authentication. This parameter is not needed if the private key does not require a passphrase.

Display settings

Guacamole's SSH support provides a display, but not in the same sense as a remote desktop protocol like VNC or RDP. The display is a terminal emulator, and thus provides options for configuring the font used and its size.

If selecting a different font for an SSH connection, the chosen font must be installed on the server running guacd. It is the server that will handle rendering of characters to the terminal display, not the client.

Field header (web interface)
Parameter name
Description

Color scheme:

color-scheme

The color scheme to use for the terminal emulator used by SSH connections. Each color scheme dictates the default foreground and background color for the terminal. Programs which specify colors when printing text will override these defaults. Legal values are:

  • "black-white" - Black text over a white background

  • "gray-black" - Gray text over a black background (the default)

  • "green-black" - Green text over a black background

  • "white-black" - White text over a black background

  • A (as described below)

By default, Guacamole will render text as gray over a black background.

Font name:

font-name

The name of the font to use. If not specified, the default of "monospace" will be used instead. This must be the name of a font installed on the server running guacd, and should be a monospaced font. If a non-monospaced font is used, individual glyphs may render incorrectly.

Font size:

font-size

The size of the font to use, in points. By default, the size of rendered text will be 12 point.

Maximum scrollback size:

scrollback

The maximum number of rows to allow within the terminal scrollback buffer. By default, the scrollback buffer will be limited to a maximum of 1000 rows.

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the terminal (or the application running within the terminal) but will be unable to interact.

Custom color schemes

Custom color schemes may be provided for the terminal emulator used by SSH connections. Custom schemes mimic the format used by Xterm and consist of a semicolon-separated series of name-value pairs. Each name-value pair is separated by a colon and assigns a value to a color in the terminal emulator palette.

For example, to use blue text on white background by default, and change the red color to a purple shade, you would specify:

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

Legal color names are:

  • "foreground" - the default foreground color.

  • "background" - the default background color.

  • "colorN" - the color at index N within the Xterm 256-color palette. For example, "color9" refers to the color at palette index 9, normally red.

Legal color values are:

  • "rgb:RR/GG/BB" - a color in RGB format, with each component in hexadecimal. For example, "rgb:ff/00/00" specifies the color red. Each hexadecimal component may be one to four digits, but the effective values are always zero-extended or truncated to two digits; for example, "rgb:f/8/0", "rgb:f0/80/00", and "rgb:f0f/808/00f" all refer to the same effective color.

  • "colorN" - the color currently assigned to index N within the Xterm 256-color palette. For example, "color9" specifies the color currently assigned to palette index 9. Note that the current color value is used rather than a reference to that color. If the referenced color is changed later in the color scheme configuration, that new color value will not be reflected in this assignment.

  • "NAME" - the color with human-readable name "NAME", where "NAME" is one of the standard color names supported by X11. These names generally correspond to the names standardized by the W3C for CSS.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for SSH connections. This behavior can be overridden on a per-connection basis, restricting access to the clipboard.

Field header (web interface)
Parameter name
Description

Disable copying from terminal:

disable-copy

If set to "true", text copied within the SSH session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the SSH session. By default, the user will be able to paste data from outside the browser within the SSH session.

Session / Environment parameters

By default, SSH sessions will start an interactive shell. The shell which will be used is determined by the SSH server, normally by reading the user's default shell previously set with chsh or within /etc/passwd. If you wish to override this and instead run a specific command, you can do so by specifying that command in the configuration of the Guacamole SSH connection.

Field header (web interface)
Parameter name
Description

Execute command:

command

The command to execute over the SSH session, if any. If not specified, the SSH session will use the user's default shell.

Language/Locale ($LANG):

locale

The specific locale to request for the SSH session. This may be any value accepted by the LANG environment variable of the SSH server. If not specified, the SSH server's default locale will be used.

As this parameter is sent to the SSH server using the LANG environment variable, the parameter will only have an effect if the SSH server allows the LANG environment variable to be set by SSH clients.

Time zone ($TZ):

timezone

The time zone to request for the SSH session. This may be any value accepted by the TZ environment variable of the SSH server, typically the standard names defined by the IANA time zone database. If not specified, the SSH server's default time zone will be used.

As this parameter is sent to the SSH server using the TZ environment variable, the parameter will only have an effect if the SSH server allows the TZ environment variable to be set by SSH clients.

Server keepalive interval:

server-alive-interval

The interval in seconds between which keepalive packets should be sent to the SSH server, where "0" indicates that no keepalive packets should be sent at all (the default behavior). The minimum legal value is "2".

Terminal behavior parameters

In most cases, the default behavior of the Guacamole terminal emulator works without modification. However, when connecting to certain systems (particularly operating systems other than Linux), the terminal behavior may need to be tweaked to allow it to operate properly. Guacamole's SSH support provides parameters for controlling the control code sent for backspace, as well as the terminal type claimed via the TERM environment variable.

Field header (web interface)
Parameter name
Description

Backspace key sends:

backspace

The integer value of the terminal control code that should be sent when backspace is pressed. Under most circumstances this should not need to be adjusted; however, if, when pressing the backspace key, you see control characters (often either ^? or ^H) instead of seeing the text erased, you may need to adjust this parameter. By default, the control code 127 (Delete) is sent.

Terminal type:

terminal-type

The terminal type string that should be passed to the SSH server. This value will typically be exposed within the SSH session as the TERM environment variable and will affect the control characters sent by applications. By default, the terminal type string "linux" is used.

Text session recording (typescripts)

The full, raw text content of SSH sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a "typescript", will be written to two files within the directory specified: one file contains the raw text data, and the other contains timing information. Where "NAME" is the value provided for the typescript name, these files will be named "NAME" and "NAME.timing" respectively.

This format is compatible with the format used by the standard UNIX script command, and can be replayed using scriptreplay (if installed). For example, to replay a typescript called "NAME", you would run:

$ scriptreplay NAME.timing NAME
Field header (web interface)
Parameter name
Description

Typescript path:

typescript-path

The directory in which typescript files should be created. If a typescript needs to be recorded, then this parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.

Typescript name:

typescript-name

The base filename to use for any created recordings. If omitted, the base filename "typescript" will be used.

Guacamole will never overwrite an existing typescript. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the base filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Automatically create typescript path:

create-typescript-path

If set to "true", the final directory within the specified typescript path will automatically be created if it does not yet exist. By default, no part of the typescript path will be automatically created, and any attempt to use a non-existent directory will result in the typescript not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the typescript will not be recorded, and an error will be logged.

This parameter only has an effect if typescript recording is enabled, which is controlled by specifying a typescript path. If the typescript path is not specified, recording of typescripts will not be enabled, and this parameter will be ignored.

Screen recording parameters

SSH sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the Glyptodon Enterprise Session Recording Player application hosted at player.glyptodon.com (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment: https://github.com/glyptodon/glyptodon-enterprise-player

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the Session Recording documentation page.

Field header (web interface)
Parameter name
Description

Recording path:

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name:

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams:

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse:

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events:

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path:

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

SFTP parameters (file transfer)

Guacamole provides support for file transfer over SSH using SFTP, the file transfer protocol built into most SSH servers. If SFTP is enabled on a Guacamole SSH connection, users will be able to upload and download files through that connection.

While it is always possible to download/upload files using the Guacamole menu accessed using Ctrl+Alt+Shift, it can be more convenient to use the guacctl utility. The guacctl utility is a shell script which allows control codes specific to the Guacamole terminal emulator to be sent. If placed within the path on the SSH server(s) being accessed, it can be used by users to initiate file downloads directly within the SSH session.

Field header (web interface)
Parameter name
Description

Enable SFTP:

enable-sftp

Whether file transfer should be enabled. If set to "true", the user will be allowed to upload or download files from the SSH server using SFTP.

File browser root directory:

sftp-root-directory

The directory to expose to connected users via Guacamole's file browser. If omitted, the root directory will be used by default.

VNC

Advanced configuration of VNC Protocol connection type

Support for the VNC protocol within Keeper Connection Manager is provided by the kcm-libguac-client-vnc package. This package will be installed by default if the @kcm package group was used during installation, and is already installed within the keeper/guacd Docker image. If this package has not yet been installed, VNC connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

guacd[8]: WARNING: Support for protocol "vnc" is not installed

If such an error appears within the guacd logs, simply installing kcm-libguac-client-vnc is sufficient to resolve the issue:

$ sudo yum install kcm-libguac-client-vnc

The guacd service does not need to be restarted for installation of VNC support to take effect.

Overview

Keeper's support for the VNC protocol is controlled through the use of several parameters. When a database like MySQL or PostgreSQL is used, these parameters are presented in a convenient web interface. If defining connections through another mechanism, such as through encrypted JSON or LDAP schema modifications, parameters are specified using their internal parameter names.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

  • Network parameters

  • Authentication parameters

  • Display settings

  • Clipboard parameters

  • VNC repeater parameters

  • Screen recording parameters

  • SFTP parameters (file transfer)

  • Audio parameters (PulseAudio)

    • Configuring PulseAudio to accept TCP connections

Some features provided by Guacamole's VNC support are implemented through additional protocols like SFTP and PulseAudio. This is done transparently. While additional network connections may be used between guacd and the remote desktop servers, everything between the user and Guacamole will still use only a single connection.

Network parameters

VNC connections are established over TCP to a specific port and a specific hostname or IP address. In general, each VNC server is associated with a display number, from which the appropriate port number is derived, though most VNC servers provide a means of overriding this default behavior. Both the hostname and port are required parameters for all VNC connections.

Field header (web interface)
Parameter name
Description

Hostname:

hostname

REQUIRED: The hostname or IP address of the VNC server that Guacamole should connect to.

Port:

port

REQUIRED: The TCP port that the VNC server is listening on.

This value is typically 5900 or 5900 + display number. For example, if your VNC server is serving display number 1 (sometimes written as ":1"), your port number here would be 5901.

Authentication parameters

The VNC standard defines only password based authentication, with other authentication mechanisms being non-standard or proprietary. Keeper Connection Manager currently supports only the password method.

Field header (web interface)
Parameter name
Description

Password:

password

The password to use when attempting authentication, if any.

Display settings

VNC servers do not allow the client to request particular display sizes, so you are at the mercy of your VNC server with respect to display width and height. However, to reduce bandwidth usage, you may request that the VNC server reduce its color depth. Guacamole will automatically detect 256-color images, but this can be guaranteed for absolutely all graphics sent over the connection by forcing the color depth to 8-bit. Color depth is otherwise dictated by the VNC server.

If you are noticing problems with your VNC display, such as the lack of a mouse cursor, the presence of multiple mouse cursors, or strange colors (such as blue colors appearing more like orange or red), these are typically the result of bugs or limitations within the VNC server, and additional parameters are available to work around such issues.

Field header (web interface)
Parameter name
Description

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will only see the desktop and whatever other users using that same desktop are doing.

Swap red/blue components:

swap-red-blue

If the colors of your display appear wrong (blues appear orange or red, etc.), it may be that your VNC server is sending image data incorrectly, and the red and blue components of each color are swapped. If this is the case, set this parameter to "true" to work around the problem.

Cursor:

cursor

If set to "remote", the mouse pointer will be rendered remotely, and the local position of the mouse pointer will be indicated by a small dot. A remote mouse cursor will feel slower than a local cursor, but may be necessary if the VNC server does not support sending the cursor image to the client.

Color depth:

color-depth

The color depth to request, in bits per pixel. Legal values are 8, 16, 24, or 32. Note that, regardless of what value is chosen here, Guacamole will always attempt to optimize image transmission, automatically using fewer bits per pixel if doing so will not visibly alter image quality.

Force lossless compression:

force-lossless

Whether this connection should use lossless compression only. If set to "true", all graphical updates will use lossless compression algorithms. By default, lossy compression will automatically be used when Guacamole detects that doing so would likely outperform lossless compression.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for VNC connections, and will automatically translate clipboard data from its native UTF-8 format into the ISO 8859-1 encoding required by the VNC standard. This behavior can be overridden on a per-connection basis, restricting access to the clipboard and/or forcing Guacamole to assume that the VNC server uses a non-standard encoding.

The only clipboard encoding guaranteed to be supported by VNC servers is ISO 8859-1. You should only override the clipboard encoding if you are absolutely positive that the VNC server supports and expects a different encoding.

Field header (web interface)
Parameter name
Description

Encoding:

clipboard-encoding

The encoding to assume for the VNC clipboard. By default, the standard encoding ISO 8859-1 will be used. Only use this parameter if you are sure your VNC server expects a different, non-standard encoding.

Possible values are:

  • "ISO8859-1" - The clipboard encoding mandated by the VNC standard.

  • "UTF-8"

  • "UTF-16"

  • "CP1252" - Code page 1252, a Windows-specific encoding for Latin characters which is mostly a superset of ISO 8859-1.

Disable copying from remote desktop:

disable-copy

If set to "true", text copied within the VNC session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the VNC session. By default, the user will be able to paste data from outside the browser within the VNC session.

VNC repeater parameters

There exist VNC repeaters, such as UltraVNC Repeater, which act as intermediaries or proxies, providing a single logical VNC connection which is then routed to another VNC server elsewhere. Additional parameters are required to select which VNC host behind the repeater will receive the connection.

Field header (web interface)
Parameter name
Description

Destination host:

dest-host

The destination host to request when connecting to a VNC proxy such as UltraVNC Repeater. This is only necessary if the VNC proxy in use requires the connecting user to specify which VNC server to connect to. If the VNC proxy automatically connects to a specific server, this parameter is not necessary.

Destination port:

dest-port

The destination port to request when connecting to a VNC proxy such as UltraVNC Repeater. This is only necessary if the VNC proxy in use requires the connecting user to specify which VNC server to connect to. If the VNC proxy automatically connects to a specific server, this parameter is not necessary.

Screen recording parameters

VNC sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the Glyptodon Enterprise Session Recording Player application hosted at player.glyptodon.com (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Glyptodon Enterprise Session Recording Player can be found on GitHub, along with instructions for local deployment: https://github.com/glyptodon/glyptodon-enterprise-player

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the Session Recording documentation page.

Field header (web interface)
Parameter name
Description

Recording path:

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name:

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams:

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse:

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events:

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path:

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

SFTP parameters (file transfer)

VNC does not normally support file transfer, but Guacamole can provide file transfer over SFTP even when the remote desktop is otherwise being accessed through VNC and not SSH.

Field header (web interface)
Parameter name
Description

Enable SFTP:

enable-sftp

Whether file transfer should be enabled. If set to "true", the user will be allowed to upload or download files from the specified server using SFTP. If omitted, SFTP will be disabled.

Hostname:

sftp-hostname

The hostname or IP address of the server hosting SFTP. If omitted, the specified hostname or address of the VNC server will be used.

Port:

sftp-port

The port the SSH server providing SFTP is listening on, usually 22. If omitted, the standard port of 22 will be used.

Public host key (Base64):

sftp-host-key

The known hosts entry for the SSH server providing SFTP, in the same format as would be specified within an OpenSSH known_hosts file. If not provided, no verification of host identity will be performed.

Username:

sftp-username

The username to authenticate as when connecting to the specified SSH server for SFTP. This parameter is required if SFTP is enabled.

Password:

sftp-password

The password to use when authenticating with the specified SSH server for SFTP.

Private key:

sftp-private-key

The entire contents of the private key to use for public key authentication. If this parameter is not specified, public key authentication will not be used. The private key must be in OpenSSH format, as would be generated by the OpenSSH ssh-keygen utility.

Passphrase:

sftp-passphrase

The passphrase to use to decrypt the private key for use in public key authentication. This parameter is not needed if the private key does not require a passphrase.

File browser upload directory:

sftp-root-directory

The directory to expose to connected users via Guacamole's file browser. If omitted, the root directory will be used by default.

Default upload directory:

sftp-directory

The directory to upload files to if they are simply dragged and dropped, and thus otherwise lack a specific upload location. If omitted, the default upload location of the SSH server providing SFTP will be used.

SFTP keepalive interval:

sftp-server-alive-interval

The interval in seconds between which keepalive packets should be sent to the SSH server for the SFTP connection, where "0" indicates that no keepalive packets should be sent at all (the default behavior). The minimum legal value is "2".

Audio parameters (PulseAudio)

VNC does not provide its own support for audio, but Guacamole's VNC support can obtain audio through a secondary network connection to a PulseAudio server running on the same machine as the VNC server.

Most Linux systems provide audio through a service called PulseAudio. This service is capable of communicating over the network, and if PulseAudio is configured to allow TCP connections, Guacamole can connect to your PulseAudio server and combine its audio with the graphics coming over VNC.

The following parameters are available for configuring the audio support for VNC:

Field header (web interface)
Parameter name
Description

Enable audio:

enable-audio

If set to "true", audio support will be enabled, and a second connection for PulseAudio will be made in addition to the VNC connection. By default, audio support within VNC is disabled.

Audio server name:

audio-servername

The name of the PulseAudio server to connect to. This will be the hostname or address of the computer providing audio for your connection via PulseAudio, most likely the same as the hostname/address of the VNC server.

If this parameter is omitted, the default PulseAudio device will be used, which will be the PulseAudio server running on the same machine as guacd.

Configuring PulseAudio to accept TCP connections

For PulseAudio to accept network connections, its TCP module must be loaded. The TCP module is not typically loaded by default, and must be manually loaded through an additional line within the PulseAudio configuration file (usually /etc/pulse/default.pa). The options specified for the module dictate exactly where these connections are allowed from, providing a degree of security. For example, to allow connections from only the 10.0.0.0/8 subnet:

load-module module-native-protocol-tcp auth-ip-acl=10.0.0.0/8 auth-anonymous=1

It is also possible to allow connections from absolutely anywhere, but beware that you should only do so if the nature of your network prevents unauthorized access:

load-module module-native-protocol-tcp auth-anonymous=1

Once the PulseAudio configuration file has been modified appropriately, restart the PulseAudio service. PulseAudio should then begin listening on port 4713 (the default PulseAudio port) for incoming TCP connections. You can verify this using a utility like netstat:

$ netstat -ln | grep 4713
tcp        0      0 0.0.0.0:4713            0.0.0.0:*                LISTEN
tcp6       0      0 :::4713                 :::*                     LISTEN
$

In all cases, the auth-anonymous=1 parameter is strictly required. Guacamole does not currently support the cookie-based authentication used by PulseAudio for non-anonymous connections. If this parameter is omitted, Guacamole will not be able to connect to PulseAudio.

custom color scheme

Linux RPM Installation

RPM installation of the Keeper Connection Manager components in Linux environments.

The Advanced Linux Install method requires knowledge of Linux environments and experience with yum package managers.

Overview

This method of installation requires one of the following operating systems:

  • Linux CentOS 7 or 8

  • RHEL 7 or 8

The Keeper Connection Manager packages have dependencies on various Apache Tomcat and Apache Guacamole packages. Once Guacamole and Tomcat have been set up, a production deployment will also require:

  • An instance of a supported database (MySQL / MariaDB, PostgreSQL, or SQL Server).

  • SSL termination using a reverse proxy (Apache HTTPD or Nginx).

If you do not already have a database server and reverse proxy ready, and are not experienced with setting up those services, instructions are also provided for installing a local instance of MariaDB, installing a local instance of PostgreSQL, and for installing Nginx to provide SSL termination.

Keeper Connection Manager is made up of multiple packaged components. The packages provide binary versions of the Apache Guacamole stack that can be updated automatically. The other components will come from your OS repository (CentOS / RHEL), from other services deployed on your network, or from third-party service providers, depending on your preferences.

A typical and minimal production deployment of Keeper Connection Manager will involve the following:

  • The Guacamole Web Application, served by Apache Tomcat.

  • SSL termination that sits in front of Apache Tomcat.

  • The "guacd" service, used internally by the Guacamole web application.

  • A database, used by the Guacamole web application for authentication and storage.

Advanced capabilities of the platform can be installed as packages, providing features such as:

  • SAML 2.0 / SSO Authentication

  • AD/LDAP Authentication

  • Keeper Secrets Manager integration

  • TOTP for Two-Factor Authentication

System Diagram

Installation of Keeper Connection Manager requires the following steps:

  1. Installing the Guacamole web application and its backend service, "guacd".

  2. Installing a database like MariaDB or PostgreSQL, if no such database is already deployed.

  3. Configuring Guacamole to use your database.

  4. Installing and configuring a reverse proxy to provide SSL termination, if no such proxy is already deployed.

This guide will walk through the installation of the core components of Keeper Connection Manager- the components necessary to see the web application in a browser and test some remote desktop connections.

Once the basic Keeper Connection Manager setup has been installed, you will still need to configure a database and deploy SSL termination before moving to production.

Additional guides are available which cover configuring Keeper Connection Manager to use your database of choice and configuring your reverse proxy to provide SSL termination. If you do not yet have a database or do not yet have a reverse proxy, additional guides covering installation of those required services are available.

Configure the Linux Machine

Before getting started, make sure that your Linux environment is fully up-to-date.

sudo yum update

To ensure that the linux machine is capable of generating enough entropy for random number generation, we recommend installing the haveged package.

These packages can be installed using the commands below:

sudo yum install epel-release
sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable haveged

Set up the YUM repository

So that YUM can find the various RPM packages which make up Keeper Connection Manager, a repository file needs to be created.

To use the 'yum' utility to automatically create this .repo file, use the following command:

sudo yum install "https://keepersecurity.com/kcm/2/`rpm -E%{suffix:%dist}`/kcm-release.rpm"

Install and deploy Apache Guacamole

Keeper Connection Manager provides a "@kcm" package group for convenience which installs all of the packages typically required for an Apache Guacamole deployment, and includes support for VNC, RDP, SSH, Telnet, MySQL and Kubernetes. This package group automatically deploys Apache Guacamole beneath a version of Apache Tomcat bundled and packaged by Keeper Connection Manager.

Install the @kcm package group

Installing "@kcm" will install the core packages required for Apache Guacamole and a bundled version of Apache Tomcat. The Guacamole web application will be automatically deployed beneath the bundled version of Tomcat:

$ sudo yum install @kcm

Start Guacamole and guacd

The full Apache Guacamole stack is made up of two services: the Guacamole web application (served by Tomcat) and its remote desktop proxy service, "guacd". Thus, both the "guacamole" and "guacd" services must be started for Guacamole to function, and should be configured to start automatically on boot:

$ sudo systemctl start guacd guacamole
$ sudo systemctl enable guacd guacamole

Congratulations! At this point, Keeper Connection Manager should be working, and a login screen should be visible if you visit http://HOSTNAME:8080/ with a web browser, where “HOSTNAME” is the hostname or IP address of your server.

Note that this environment will be missing all of the connection management screens. These features will become activated as soon as you configure a database in the next step.

Quick Connection Test

With the bare bones deployment running, you can move forward with testing your deployment using /etc/guacamole/user-mapping.xml (the built-in authentication method intended for testing). This allows you to manually test a remote connection and set up a sandbox user account.

Database Setup

To activate the full functionality of the platform, a database must be configured.

MySQL / MariaDB, PostgreSQL, and SQL Server are supported. If you do not already have a database deployed, or are unfamiliar with deploying databases, instructions are provided for installing a local instance of MariaDB and for installing a local instance of PostgreSQL.

SSL Termination

In a production environment, proper SSL termination is required. Apache HTTPD and Nginx are supported for this purpose. If you do not already have a reverse proxy in place, or are unfamiliar with installing and configuring a reverse proxy, instructions are provided for installing Nginx to provide SSL termination.

Protecting your Keeper Connection Manager Instance

During the initial testing and deployment phase, we recommend locking down access to the Keeper Connection Manager service with firewall rules. Port 80 or 443 should only be opened and restricted to specific users.

When activating the Lets Encrypt SSL certificates, you may need to open up the gateway for the generation and verification of the domain.

In a production environment, we recommend using SAML/SSO authentication with your preferred identity provider. Step by step guides are provided in this documentation.

Licensing and Open Source

Documentation

Portions of this documentation have been derived and/or modified from the documentation distributed with Apache Guacamole, in particular the Guacamole User's Guide. Apache Guacamole and its User's Guide are distributed by the Apache Software Foundation under the Apache License, version 2.0, with the following copyright notice:

Apache Guacamole
Copyright 2020 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Software

The licenses of bundled software for installed Keeper Connection Manager packages can be found beneath the /opt/keeper/share directory. Additionally, license information for installed packages may be queried using the "rpm" utility, as license information is included in the metadata of all provided packages.

The packages and Docker images provided withKeeper Connection Manager contain both proprietary and open source software. All software packages included with Glyptodon Enterprise, including those that bundle open source software, are provided under the terms of the Keeper Connection Manaer EULA. In addition to Apache Guacamole, other open source software and libraries are included with Keeper Connection Manager to ensure the software is consistent and stable across all supported platforms.

Bundled Software
License
Included in Package(s)

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole-auth-ldap

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole-auth-ldap

kcm-guacamole-auth-saml

kcm-guacamole-auth-ldap

kcm-guacamole-auth-ldap

kcm-guacamole-auth-saml

kcm-guacamole-auth-ldap

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacd

kcm-guaclog

kcm-libguac

kcm-libguac-client-kubernetes

kcm-libguac-client-rdp

kcm-libguac-client-ssh

kcm-libguac-client-telnet

kcm-libguac-client-vnc

kcm-guacamole-auth-ldap

kcm-guacamole-auth-saml

kcm-guacamole-standalon

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole

kcm-guacamole-auth-ldap

kcm-guacamole-auth-ldap

kcm-guacamole-auth-duo

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole

kcm-libfreerdp

kcm-guacamole kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole-auth-duo

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-json

kcm-guacamole-auth-ldap

kcm-guacamole-auth-openid

kcm-guacamole-auth-saml

kcm-guacamole-auth-totp

kcm-guacamole-auth-totp

kcm-guacamole

kcm-guacamole-auth-saml

kcm-guacamole-auth-openid

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-libssh2

kcm-libtelnet

kcm-libvncclient

kcm-libwebsockets

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-guacamole

kcm-mssql-jdbc

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole-auth-jdbc-mysql

kcm-guacamole-auth-jdbc-postgresql

kcm-guacamole-auth-jdbc-sqlserver

kcm-guacamole

kcm-guacamole-auth-saml

kcm-guacamole

("node-process")

kcm-guacamole

kcm-guacamole

kcm-guacamole-guacamole

kcm-guacamole-auth-ldap

kcm-guacamole-auth-json

kcm-guacamole-auth-json

kcm-guacamole-auth-totp

("node-util")

kcm

kcm-guacamole-auth-uds

kcm

kcm-guacamole-auth-saml

kcm-guacamole-auth-saml

kcm-guacamole-auth-ldap

kcm-guacamole-auth-totp

Creating Connections

Managing and creating connections to your infrastructure

About Connections

Connections specify the protocol and customizable parameters that define the authentication and customized behavior. Connections can be created from the Settings menu. Only users with "Create new connections" permission can create connections.

Administrators can define which connections are available for users and groups.

Use Cases

Connections can be created and utilized in several ways. Connections can be privileged (credentials hidden from the user) and the connections can support user-specified credentials. Additionally, the connections can pull credentials from one or more Keeper Vaults via the Keeper Secrets Manager integration.

Privileged Connections

When setting up a privileged connection, the authentication credentials to the target can be saved in the connection parameters, or in the designated Keeper Vault. When the credentials are stored directly to the connection or in the Keeper Vault, they are never exposed to the end-user. This allows you to create privileged sessions in which the user does not have access to the underlying credentials.

User-Specified Credentials

When setting up the connection, you can skip the authentication details parameters and Keeper Connection Manager will prompt the end-user for their authentication credentials on every login.

For example, with an RDP connection, simply remove the credentials from the connection parameters and the user will be prompted to authenticate.

Vault Credentials

KCM can connect to a Keeper Vault and search for the necessary credentials needed based on Host, User and Domain. See the section to learn more about this capability.

Create a New Connection

The New Connection form is separated into multiple sections each with multiple inputs. Connections have many different options and capabilities, depending on the protocol.

To begin, click Settings > Connections > New Connection which will open the new connection form.

Connection Details

Connection Name

The name of the connection, this is how it will appear in the connections list.

Location

The location of the new connection in the connections list. You can select "ROOT" to put the new connection at the top level of the connections list, or select a collection to place the new connection under an existing collection.

Protocol

Select the type of connection to create. The current available connection types are:

  • RDP

  • SSH

  • Kubernetes

  • Telnet

  • VNC

  • MySQL

  • PostgreSQL

  • Microsoft SQL Server

Other options in the connection form are affected by the protocol selection

For more information about connection types, see the .

Concurrency Limits

Max # of Connections

The maximum allowed number of concurrent sessions for this connections. If the maximum number is sessions are already in use, other users will not be able to connect to this connection.

Leave this input blank, or set it to 0 to allow unlimited concurrent sessions.

Max # of Connections per User

The maximum allowed number of concurrent sessions for this connection for each user. If the maximum number is sessions are already in use by a user, the user will not be able to open a new session for this connection.

Leave this input blank, or set it to 0 to allow unlimited concurrent sessions.

Load Balancing

Keeper Connection Manager can use load balancing among connections in a group to give multiple concurrent users the best experience.

Connection Weight

Enter a number to use as a multiplier of connection assignment. For example, if one connection in a group has a weight of 1, and another has a weight of 2, the second connection will be assigned twice as many concurrent users as the first.

Use for Failover Only

If checked, this connection will only be used if all other connections in the group fail

Guacamole Proxy Parameters

If you are establishing a connect through a guacd service which is operating on a separate server (other than localhost), you would specify the proxy parameters here. In most default installations, this section is not needed and should be left empty. For more information see the .

Hostname and Port

Hostname and port of the proxy

Encryption

Choose if the connection traffic should be encrypted. You can choose unencrypted or TLS/SSL encryption.

RDP Protocol Parameters

Details to facilitate the new RDP connection. Set network and authentication details.

Network

Hostname and Port

Enter the hostname and port of the RDP connection

Authentication

Enter the following connection fields for you RDP connection:

  • Username

  • Password

  • Domain

Security Mode

Select the security mode to use, the supported modes are:

  • Any

  • NLA (Network Level Authentication)

  • RDP Encryption

  • TLS Encryption

  • Hyper-V / VMConnect

If you would like users to be prompted for manual authentication, you may need to select "NLA" security mode and leave the authentication parameters empty.

Disable Authentication

Choose to turn off authentication for this RDP connection

Ignore Server Certificate

Choose to ignore the server certificate. In most cases, this is required to establish a connection.

Remote Desktop Gateway

Fill in the following details about the remote desktop gateway:

  • Hostname and Port

  • Username

  • Password

  • Domain

Basic Settings

Initial Program

Start a program on connection. Enter the location of the program to run

Client Name

Set a name for the computer this connection is connecting to

Keyboard Layout

Choose the type of keyboard to use with this RDP connection

Time Zone

Use the dropdown menus to select the timezone to use with this connection

Enable Multi-touch

Choose to allow multi-touch input for this RDP connection

Administrator Console

Choose to allow access to the Administrator Console for users connecting to this RDP connection

Appearance

Choose settings that affect how the new connection will look.

Width, Height and Resolution

Choose the dimensions and resolution of the screen in pixels (pixels per inch for resolution).

Color Depth

Choose the color depth of the screen over the RDP connection.

Force Lossless Compression

Use lossless compression. Check this option for better visual quality, but it may impact performance.

Resize Method

Choose what the connection should do if the window is resized. Keeper Connection Manager supports "Display Update" Visual channel for RDP 8.1 or higher. For older versions of RDP, use the reconnect method.

Read-Only

If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.

Clipboard

Disable Copying from Remote Desktop

If selected, users will not be able to copy from the connection

Disable Pasting from Client

If selected, users will not be able to paste values into the connection

Device Redirection

Choose options for connected devices

Support Audio in Console

Choose if audio is supported within the console

Disable Audio

Choose if audio from the connection should be disabled

Enable Audio Input (microphone)

Choose if the user's microphone can be used within the connection

Enable Printing

Choose if users can print from the connection

Redirected Printer Name

If allowing printing, choose the name of the printer to use

Enable Drive

If you would like to transfer files to this target with Drag and Drop, select this option. Along with this, make sure to fill out a "Drive Name", "Drive Path", and select "Automatically Create Drive".

Drive Name

If file transfer is enabled, the name of the drive to use. For example "My Drive".

Disable File Download

Choose if files can be downloaded to the connected drive

Drive Path

The path of the drive to use if enabled. A typical default Drive Path would be something like /var/lib/guacamole/drives/${GUAC_USERNAME}

Automatically Create Drive

If selected, Keeper Connection Manager will automatically create a drive to use with the connection

Static Channel Names

A comma-separated list of static channel names to open and expose as pipes. If you wish to communicate between an application running on the remote desktop and JavaScript, this is the best way to do it. KCM will open an outbound pipe with the name of the static channel. If JavaScript needs to communicate back in the other direction, it should respond by opening another pipe with the same name. KCM allows any number of static channels to be opened, but protocol restrictions of RDP limit the size of each channel name to 7 characters.

Performance

These options can be used to optimize the performance of the Windows Remote Desktop Connection.

Choose to enable or disable the following optional Windows features:

  • Enable Wallpaper

  • Enable Theming

  • Enable Font Smoothing (ClearType)

  • Enable Full-window Drag

  • Enable Desktop Composition (Aero)

  • Enable Menu Animations

  • Disable Bitmap Caching

  • Disable Off-screen Caching

  • Disable Glyph Caching

RemoteApp

Recent versions of Windows provide a feature called RemoteApp which allows individual applications to be used over RDP, without providing access to the full desktop environment. If your RDP server has this feature enabled and configured, you can configure KCM connections to use those individual applications.

Program

Specifies the RemoteApp to start on the remote desktop. If supported by your remote desktop server, this application, and only this application, will be visible to the user.

Windows requires a special notation for the names of remote applications. The names of remote applications must be prefixed with two vertical bars. For example, if you have created a remote application on your server for notepad.exe and have assigned it the name “notepad”, you would set this parameter to: “||notepad”.

Working Directory

The working directory, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.

Parameters

The command-line arguments, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.

Load Balancing

Keeper Connection Manager can use load balancing among connections in a group to give multiple concurrent users the best experience.

Connection Weight

Enter a number to use as a multiplier of connection assignment. For example, if one connection in a group has a weight of 1, and another has a weight of 2, the second connection will be assigned twice as many concurrent users as the first.

Use for Failover Only

If checked, this connection will only be used if all other connections in the group fail

Screen Recording

Options for recording of the screen. See the section for more information.

Recording Path

Enter the path to save the session recording. We recommend using the below value: ${HISTORY_PATH}/${HISTORY_UUID}

Recording Name

Enter the name of the recording file

Exclude Graphics/Streams

Choose to exclude graphics or streams from the recording

Exclude Mouse

Choose to exclude the mouse from the screen recording

Exclude Touch Events

Choose to exclude and touch events the user made from the recording

Include Key Events

If selected, include key events that would not otherwise be visible in the recording

Automatically Create Recording Path

If selected, Keeper Connection Manager will automatically create a path for the recording file

SFTP

Options for file transfers to the connection using SFTP. For more information see the section.

Enable SFTP

Choose to enable SFTP file transfers

If enabled, enter the following information to connect to and authenticate connection to your SFTP server:

  • Hostname Port

  • Public Host Key (Base64)

  • Username and Password

  • Private Key

  • Passphrase for the private key if applicable

File Browsing Root Directory

The root directory of the SFTP server to display within this connection

Default Upload Directory

If users upload a file from the connection, the directory that the file will go to by default

SFTP Keepalive Interval

Enter the keepalive interval as a number

Disable File Download

If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection

Disable File Upload

If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection

Wake-on-LAN (WoL)

Options to facilitate waking the connected device upon connection if supported.

Send WoL Packet

Enable Wake-on-Lan and send a signal from Keeper Connection Manager

Mac Address of the Remote Host

Identify the device to send the signal to by Mac Address

Broadcast Address for WoL Packet

Where to send the WoL signal

Host Boot Wait Time

How long to wait for the device to wake

SSH Protocol Parameters

Details to facilitate the new SSH connection. Set network and authentication details.

Network

Hostname and Port

Enter the hostname and port for the SSH connection

Public Host Key (Base64)

Enter the Public Key for this SSH connection in Base64 format

Authentication

Username and Password

The username and password (if required) for this SSH connection.

If you would like the user to be prompted for their password, leave the "password" field empty.

Private Key

The private key used for connecting to this SSH connection

Passphrase

The passphrase (if any) for the private key

Appearance

Choose settings that affect how the new connection will look.

Theme

Select a color theme for the terminal.

There are built in themes, and a .

Font Name

Enter the name of a font for the terminal to use

Font Size

Select the pixel size of the font

Maximum Scroll back Size

Select how far back a user can scroll through past commands. Leave blank for unlimited.

Read-Only

If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.

Clipboard

Disable Copying from Remote Desktop

If selected, users will not be able to copy from the connection

Disable Pasting from Client

If selected, users will not be able to paste values into the connection

Session/Environment

Settings for basic environment setup

Execute Command

Enter a command to execute on connection start

Language/Local($LANG)

Set the language/local for the connection, this sets the $LANG environment variable

Time Zone($TZ)

Set the time zone for the connection. This sets the $TZ environment variable

Server Keepalive Interval

Set an interval for a keepalive signal

Terminal Behavior

The Terminal Behavior section contains options about the terminal for applicable connections.

Backspace Key Sends

Choose what action is sent when you click the backspace key. The options are:

  • Delete

  • Backspace

Terminal Type

Choose the type of terminal to use. The options are:

  • ansi

  • linux

  • vt100

  • vt220

  • vterm

  • vterm-256color

Screen Recording

Options for recording of the screen. See the section for more information.

Recording Path

Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}

Recording Name

Enter the name of the recording file

Exclude Graphics/Streams

Choose to exclude graphics or streams from the recording

Exclude Mouse

Choose to exclude the mouse from the screen recording

Include Key Events

If selected, include key events that would not otherwise be visible in the recording

Automatically Create Recording Path

If selected, Keeper Connection Manager will automatically create a path for the recording file

SFTP

Options for file transfers to the connection using SFTP. For more information see the section.

Enable SFTP

Choose to enable SFTP file transfers

File Browsing Root Directory

The root directory of the SFTP server to display within this connection

Disable File Download

If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection

Disable File Upload

If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection

Wake-on-LAN (WoL)

Options to facilitate waking the connected device upon connection if supported.

Send WoL Packet

Enable Wake-on-Lan and send a signal from Keeper Connection Manager

Mac Address of the Remote Host

Identify the device to send the signal to by Mac Address

Broadcast Address for WoL Packet

Where to send the WoL signal

Host Boot Wait Time

How long to wait for the device to wake

VNC Protocol Parameters

Details to facilitate the new VNC connection. Set network and authentication details.

Network

Hostname and Port

Hostname and port information for the VNC connection

Encryption

Choose encryption method for connection traffic. The options are:

  • No Encryption

  • TLS/SSL Encryption

Authentication

Username and Password

Login credentials for the VNC connection. If you would like to prompt users for the password, leave this field empty.

Appearance

Choose settings that affect how the new connection will look.

Read-Only

If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.

Swap Red-Blue Channels

Choose if the red and blue channels should be swapped for this connection.

Cursor

Choose to use the cursor of the local machine, or of the remote machine.

Color Depth

Choose the color depth of the screen over the VNC connection.

Force Lossless Compression

Use lossless compression. Check this option for better visual quality, but it may impact performance.

Clipboard

Encoding

Choose which encoding to use when copying and pasting. The options are:

  • CP1252

  • ISO 8859-1

  • UTF-16

  • UTF-8

Disable Copying from Remote Desktop

If selected, users will not be able to copy from the connection

Disable Pasting from Client

If selected, users will not be able to paste values into the connection

VNC Repeater

There exist VNC repeaters, such as UltraVNC Repeater, which act as intermediaries or proxies, providing a single logical VNC connection which is then routed to another VNC server elsewhere. Additional parameters are required to select which VNC host behind the repeater will receive the connection.

Destination Host and Port

Set the host and port to use

Screen Recording

Options for recording of the screen. See the section for more information.

Recording Path

Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}

Recording Name

Enter the name of the recording file

Exclude Graphics/Streams

Choose to exclude graphics or streams from the recording

Exclude Mouse

Choose to exclude the mouse from the screen recording

Include Key Events

If selected, include key events that would not otherwise be visible in the recording

Automatically Create Recording Path

If selected, Keeper Connection Manager will automatically create a path for the recording file

SFTP

Options for file transfers to the connection using SFTP. For more information see the section.

Enable SFTP

Choose to enable SFTP file transfers

If enabled, enter the following information to connect to and authenticate connection to your SFTP server:

  • Hostname Port

  • Public Host Key (Base64)

  • Username and Password

  • Private Key

  • Passphrase for the private key if applicable

File Browsing Root Directory

The root directory of the SFTP server to display within this connection

Default Upload Directory

If users upload a file from the connection, the directory that the file will go to by default

SFTP Keepalive Interval

Enter the keepalive interval as a number

Disable File Download

If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection

Disable File Upload

If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection

Audio

Enable Audio

Choose to enable audio for the connection

Audio Server Name

Name of the audio server to use

Wake-on-LAN (WoL)

Options to facilitate waking the connected device upon connection if supported.

Send WoL Packet

Enable Wake-on-Lan and send a signal from Keeper Connection Manager

Mac Address of the Remote Host

Identify the device to send the signal to by Mac Address

Broadcast Address for WoL Packet

Where to send the WoL signal

Host Boot Wait Time

How long to wait for the device to wake

Telnet Protocol Parameters

Details to facilitate the new Telnet connection. Set network and authentication details.

Network

Hostname and Port

Hostname and port information for the Telnet connection.

Authentication

Username and Password

Authentication credentials for the Telnet connection. To prompt users for the password, leave this field empty.

Username Regular Expression

The regular expression to use when waiting for the username prompt. This parameter is optional. If not specified, a reasonable default built into KCM will be used. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep).

Password Regular Expression

The regular expression to use when waiting for the password prompt. This parameter is optional. If not specified, a reasonable default built into KCM will be used. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep).

Login Success Regular Expression

The regular expression to use when detecting that the login attempt has succeeded. This parameter is optional. If specified, the terminal display will not be shown to the user until text matching this regular expression has been received from the telnet server. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep).

Login Failure Regular Expression

The regular expression to use when detecting that the login attempt has failed. This parameter is optional. If specified, the connection will be closed with an explicit login failure error if text matching this regular expression has been received from the telnet server. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep).

Appearance

Choose settings that affect how the new connection will look.

Theme

Select a color theme for the terminal.

There are built in themes, and a .

Font Name

Enter the name of a font for the terminal to use

Font Size

Select the pixel size of the font

Maximum Scroll back Size

Select how far back a user can scroll through past commands. Leave blank for unlimited.

Read-Only

If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.

Clipboard

Disable Copying from Remote Desktop

If selected, users will not be able to copy from the connection

Disable Pasting from Client

If selected, users will not be able to paste values into the connection

Terminal Behavior

The Terminal Behavior section contains options about the terminal for applicable connections.

Backspace Key Sends

Choose what action is sent when you click the backspace key. The options are:

  • Delete

  • Backspace

Terminal Type

Choose the type of terminal to use. The options are:

  • ansi

  • linux

  • vt100

  • vt220

  • vterm

  • vterm-256color

Typescript (Text Session Recording)

Options for text recording. See the section for more details about session recording.

Typescript Path

Enter a file path location to save text session recordings to.

Typescript Name

Enter a name for the text session recording file

Automatically Create Typescript Path

Have Keeper Connection Manager automatically create the path location for the text session recording

Screen Recording

Options for recording of the screen. See the section for more information.

Recording Path

Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}

Recording Name

Enter the name of the recording file

Exclude Graphics/Streams

Choose to exclude graphics or streams from the recording

Exclude Mouse

Choose to exclude the mouse from the screen recording

Include Key Events

If selected, include key events that would not otherwise be visible in the recording

Automatically Create Recording Path

If selected, Keeper Connection Manager will automatically create a path for the recording file

Wake-on-LAN (WoL)

Options to facilitate waking the connected device upon connection if supported.

Send WoL Packet

Enable Wake-on-Lan and send a signal from Keeper Connection Manager

Mac Address of the Remote Host

Identify the device to send the signal to by Mac Address

Broadcast Address for WoL Packet

Where to send the WoL signal

Host Boot Wait Time

How long to wait for the device to wake

Kubernetes Protocol Parameters

Details to facilitate the new connection. Set network and authentication details.

Network

Hostname and Port

The hostname and port of the Kubernetes connection

Use SSL/TLS

Choose to use SSL/TLS encryption

Ignore Server Certificate

Choose to ignore the server certificate

Certificate Authority Certificate

Paste the Certificate Authority Certificate into this text box

Container

Fill in the following information about the Kubernetes container:

  • Namespace

  • Pod Name

  • Container Name

Authentication

Client Certificate

The certificate to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.

Client Key

The key to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.

Appearance

Choose settings that affect how the new connection will look.

Theme

Select a color theme for the terminal.

There are built in themes, and a .

Font Name

Enter the name of a font for the terminal to use

Font Size

Select the pixel size of the font

Maximum Scroll back Size

Select how far back a user can scroll through past commands. Leave blank for unlimited.

Read-Only

If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.

Terminal Behavior

The Terminal Behavior section contains options about the terminal for applicable connections.

Backspace Key Sends

Choose what action is sent when you click the backspace key. The options are:

  • Delete

  • Backspace

Typescript (Text Session Recording)

Options for text recording. See the section for more details about session recording.

Recording Path

Enter a file path location to save text session recordings to. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}

Recording Name

Enter a name for the session recording file.

Exclude Graphics/Streams

Choose to exclude graphics and streams that may appear on the terminal from the recording.

Include Key Events

Choose to include keys that are clicked in the session recording. Events like ctrl+c will be recorded.

Automatically Create Recording Path

Have Keeper Connection Manager automatically create the path location for the session recording

MySQL Protocol Parameters

Details to facilitate the new MySQL connection. Set network and authentication details.

Network

Hostname and Port

Enter the hostname and port for the MySQL connection

Unix Socket

Enter the socket name if a host is not present

Authentication

Username and Password

The username and password for this MySQL connection. To prompt users for the password, leave this field empty.

Database

Default Database

Specify the default database schema when establishing a connection.

Disable CSV Export

Disable the ability for users to export data through "select .. into local infile"

Disable CSV Import

Disable the ability for users to import data through "load data local infile..."

Appearance

Choose settings that affect how the new connection will look.

Theme

Select a color theme for the terminal.

There are built in themes, and a .

Font Name

Enter the name of a font for the terminal to use.

Font Size

Select the pixel size of the font.

Maximum Scroll back Size

Select how far back a user can scroll through past commands. Leave blank for unlimited.

Read-Only

If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.

Clipboard

Disable Copying from Remote Desktop

If selected, users will not be able to copy from the connection

Disable Pasting from Client

If selected, users will not be able to paste values into the connection

Session/Environment

Settings for basic environment setup

Language/Local($LANG)

Set the language/local for the connection, this sets the $LANG environment variable

Time Zone($TZ)

Set the time zone for the connection. This sets the $TZ environment variable

Server Keepalive Interval

Set an interval for a keepalive signal

Screen Recording

Options for recording of the screen. See the section for more information.

Recording Path

Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}

Recording Name

Enter the name of the recording file.

Exclude Graphics/Streams

Choose to exclude graphics or streams from the recording.

Exclude Mouse

Choose to exclude the mouse from the screen recording.

Include Key Events

If selected, include key events that would not otherwise be visible in the recording.

Automatically Create Recording Path

If selected, Keeper Connection Manager will automatically create a path for the recording file.

SFTP

Options for file transfers to the connection using SFTP. For more information see the section.

Enable SFTP

Choose to enable SFTP file transfers.

File Browsing Root Directory

The root directory of the SFTP server to display within this connection.

Disable File Download

If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection.

Disable File Upload

If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection.

Wake-on-LAN (WoL)

Options to facilitate waking the connected device upon connection if supported.

Send WoL Packet

Enable Wake-on-Lan and send a signal from Keeper Connection Manager.

Mac Address of the Remote Host

Identify the device to send the signal to by Mac Address.

Broadcast Address for WoL Packet

Where to send the WoL signal.

Host Boot Wait Time

How long to wait for the device to wake.

Creating a Custom Theme

Terminal based protocols (Kubernetes, SSH, MySQL and Telnet) allow for custom color themes. To use a custom theme first select "custom" from the Theme dropdown, this will open the custom theme builder.

To use the custom theme builder, click each color to select a new color to use in its place. The foreground and background colors are labeled, other colors represent the standard terminal colors.

For example: to replace all red highlighted text in the terminal with orange text, click the red color and choose orange in the color picker.

Usage History

If you are editing an existing connection, the usage history of the connection is shown in this section

The usage history table displays the username, date, duration of connection and remote IP address of users connecting to this connection.

Establishing Connection through Firewalls

If you would like to establish a connection to a target server with restricted Ingres connections, check out the documentation on .

AngularJS
MIT
angular-module-shim
MIT
angular-translate
MIT
Antlr v2
Public Domain
AOP Alliance
Public Domain
Apache Commons Codec
Apache License, version 2.0
Apache Commons Collections
Apache License, version 2.0
Apache Commons Lang
Apache License, version 2.0
Apache Commons Pool
Apache License, version 2.0
Apache Guacamole
Apache License, version 2.0
Apache Mina
Apache License, version 2.0
Apache Santuario
Apache License, version 2.0
Apache Tomcat
Apache License, version 2.0
assert
MIT
Blob.js
MIT
Carlito
SIL Open Font
Checker Framework qualifiers
MIT
css-loader
MIT
datalist-polyfill
MIT
Apache Directory LDAP API
Apache License, version 2.0
DOM4J
DOM4J License
DuoWeb Java SDK
BSD 3-clause
Error Prone
Apache License, version 2.0
FileSaver.js
MIT
FreeRDP
Apache License, version 2.0
JSR-305 Reference Implementation
BSD 3-clause
GlassFish HK2
Eclipse Public License v2.0
Guava: Google Core Libraries for Java
Apache License, version 2.0
Google Guice
Apache License, version 2.0
HK2 OSGi resource locator
Eclipse Public License v2.0
inherits
ISC
Java to Objective-C Annotations
Apache License, version 2.0
Jackson
Apache License, version 2.0
Java Advanced Imaging Image I/O
BSD 3-clause
Jakarta Activation
BSD 3-clause
Jakarta Annotations
Eclipse Public License v2.0
Jakarta XML Binding
BSD 3-clause
Jakarta Bean Validation API
Apache License, version 2.0
Jakarta RESTful Web Services
Eclipse Public License v2.0
Javassist
Apache License, version 2.0
JSR-330 / Dependency Injection for Java
Apache License, version 2.0
JCommander
Apache License, version 2.0
Jersey
Eclipse Public License v2.0
Joda-Time
Apache License, version 2.0
jose.4.j
Apache License, version 2.0
jQuery
MIT
JSR-250 Reference Implementation
Common Development and Distribution License 1.0
JSTZ
MIT
libssh2
BSD
libtelnet
Public Domain
LibVNCClient
GNU GPL version 2.0
Libwebsockets
BSD and MIT
Lodash
MIT
Logback
Eclipse Public License v1.0
make-plural
ISC
messageformat
MIT
Microsoft JDBC Driver for SQL Server
MIT
MyBatis
Apache License, version 2.0
MyBatis-Guice
Apache License, version 2.0
object-assign
MIT
Onelogin Java SAML Client
MIT
Pickr
MIT
process
MIT
reserved-words
MIT
Simple Logging Facade for Java
MIT
SnakeYAML
Apache License, version 2.0
Spring Framework
Apache License, version 2.0
Spring Security
Apache License, version 2.0
TOTP Reference Implementation
BSD 3-clause
util
MIT
UDS Integration Extension for Apache Guacamole
BSD 3-clause
Webpack
MIT
Woodstox Core
Apache License, version 2.0
Woodstox Stax2-API
BSD Simplified
Xml Pull Parser 3rd Edition
Indiana University Extreme! Lab License
ZXing Barcode Scanning Library
Apache License, version 2.0
Vault Integration
supported protocols section
guacd documentation
Session Recording
File Transfer
custom theme option
Session Recording
File Transfer
Session Recording
File Transfer
custom theme option
Session Recording
Session Recording
custom theme option
Session Recording
custom theme option
Session Recording
File Transfer
Creating Connections via reverse SSH tunnel
Privileged Connections
User-Specified Credentials
New Connection
New Connection form
Custom them builder
Usage History Table

RDP

Advanced configuration of Remote Desktop Protocol connection type

Support for the RDP protocol within Keeper Connection Manager is provided by the kcm-libguac-client-rdp package. This package will be installed by default if the @kcm package group was used during installation, and is already installed within the keeper/guacd Docker image. If this package has not yet been installed, RDP connections will not be functional, with guacd logging a warning noting the absence of needed protocol support:

guacd[8]: WARNING: Support for protocol "rdp" is not installed

If such an error appears within the guacd logs, simply installing kcm-libguac-client-rdp is sufficient to resolve the issue:

$ sudo yum install kcm-libguac-client-rdp

The guacd service does not need to be restarted for installation of RDP support to take effect.

Overview

Keeper's support for the RDP protocol is controlled through the use of several parameters. When a database like MySQL or PostgreSQL is used, these parameters are presented through the web interface. If defining connections through another mechanism, such as through encrypted JSON or LDAP schema modifications, parameters are specified using their internal parameter names.

This document is intended to cover all supported parameters, grouped in the same way they are grouped within the web interface. The field headings which would appear in the web interface are provided for each parameter, along with each parameter's internal name and a thorough description of the behavior and legal values for that parameter.

  • Network parameters

  • Authentication/security parameters

  • Remote desktop gateway parameters

  • Basic settings

  • Display parameters

  • Clipboard parameters

  • Device redirection parameters

  • Performance parameters / flags

  • RemoteApp parameters

  • Load balancing parameters (connection broker)

  • Preconnection PDU (Hyper-V)

  • Screen recording parameters

  • SFTP parameters (file transfer)

Network parameters

RDP connections are established over TCP to a specific port and a specific hostname or IP address. The hostname/address must be specified for all RDP connections, but you only need to specify a port if you are not using the standard RDP port (3389).

Field header (web interface)
Parameter name
Description

Hostname:

hostname

REQUIRED: The hostname or IP address of the RDP server Guacamole should connect to.

Port:

port

The port the RDP server is listening on. If this is not specified, the standard port for RDP (3389) or Hyper-V's default port for VMConnect (2179) will be used, depending on the security mode selected.

Authentication/security parameters

RDP provides authentication through the use of a username, password, and optional domain. All RDP connections are encrypted, with higher-grade encryption available in the form of TLS.

If the necessary username and password will be the same as the username and password used to log into Guacamole (due to integrating Guacamole with Active Directory using LDAP, for example), the Guacamole username and password can be passed through by specifying the ${GUAC_USERNAME} and ${GUAC_PASSWORD} tokens respectively.

Field header (web interface)
Parameter name
Description

Username:

username

The username to use to authenticate, if any.

Password:

password

The password to use when attempting authentication, if any.

Domain:

domain

The domain to use when attempting authentication, if any.

Security mode:

security

The security mode to use for the RDP connection. This mode dictates how data will be encrypted and what type of authentication will be performed, if any. By default, security mode negotiation is performed.

Legal values are:

  • "any" - Negotiate with the server, allowing the RDP server to choose its preferred security mode (the default).

  • "nla" - Network Level Authentication, sometimes also referred to as "hybrid" or CredSSP (the protocol that drives NLA) and uses TLS encryption.

  • "nla-ext" - Extended Network Level Authentication. This mode is identical to NLA except that an additional "" is required to be sent from the server to the client immediately after the NLA handshake is completed.

  • "tls" - Transport Layer Security.

  • "vmconnect" - Automatically select the security mode based on the security protocols supported by both the client and the server, limiting that negotiation to only the protocols known to be supported by Hyper-V / VMConnect. This security mode must be selected if connecting to the console of a Hyper-V virtual machine.

  • "rdp" - Standard RDP encryption. Newer Windows servers generally have this mode disabled by default, and instead require NLA.

Disable authentication:

disable-auth

If set to "true", authentication will be disabled. Note that this refers to authentication that takes place while connecting. Any authentication enforced by the server over the remote desktop session (such as a login dialog) will still take place. By default, authentication is enabled and only used when requested by the server.

If you are using NLA, authentication must be enabled by definition.

Ignore server certificate:

ignore-cert

If set to "true", the certificate returned by the server will be ignored, even if that certificate cannot be validated. This is useful if you universally trust the server and your connection to the server, and you know that the server's certificate cannot be validated (for example, if it is self-signed).

Remote desktop gateway parameters

Microsoft's remote desktop server provides an additional gateway service which allows external connections to be forwarded to internal RDP servers which are otherwise not accessible. If you will be using Guacamole to connect through such a gateway, you will need to provide additional parameters describing the connection to that gateway, as well as any required credentials.

Field header (web interface)
Parameter name
Description

Hostname:

gateway-hostname

The hostname of the remote desktop gateway that should be used as an intermediary for the remote desktop connection. If omitted, a gateway will not be used.

Port:

gateway-port

The port of the remote desktop gateway that should be used as an intermediary for the remote desktop connection. By default, port 443 will be used.

Username:

gateway-username

The username of the user authenticating with the remote desktop gateway, if a gateway is being used. This is not necessarily the same as the user actually using the remote desktop connection.

Password:

gateway-password

The password to provide when authenticating with the remote desktop gateway, if a gateway is being used.

Domain:

gateway-domain

The domain of the user authenticating with the remote desktop gateway, if a gateway is being used. This is not necessarily the same domain as the user actually using the remote desktop connection.

Basic settings

RDP sessions will typically involve the full desktop environment of a normal user. Alternatively, you can manually specify a program to use instead of the RDP server's default shell, or connect to the administrative console.

Although Guacamole is independent of keyboard layout, RDP is not. This is because Guacamole represents keys based on their identity ("press the Enter key"), while RDP uses identifiers based on the key's location ("press the rightmost key in the second row"). To translate between a Guacamole key event and an RDP key event, Guacamole must know ahead of time the keyboard layout of the RDP server.

By default, the US English qwerty keyboard will be used. If this does not match the keyboard layout of your RDP server, keys will not be properly translated, and you will need to explicitly choose a different layout in your connection settings. If your keyboard layout is not supported, please notify us by opening a support ticket through your account.

Field header (web interface)
Parameter name
Description

Initial program:

initial-program

The full path to the program to run immediately upon connecting.

Client name:

client-name

When connecting to the RDP server, Guacamole will normally provide its own hostname as the name of the client. If this parameter is specified, Guacamole will use its value instead.

On Windows RDP servers, this value is exposed within the session as the CLIENTNAME environment variable.

Keyboard layout:

server-layout

The keyboard layout that the RDP server will be using. Legal values are:

  • "da-dk-qwerty" - Danish

  • "de-ch-qwertz" - Swiss German

  • "de-de-qwertz" - German

  • "en-gb-qwerty" - UK English

  • "en-us-qwerty" - US English (the default)

  • "es-es-qwerty" - Spanish

  • "es-latam-qwerty" - Latin American

  • "fr-be-azerty" - Belgian French

  • "fr-ch-qwertz" - Swiss French

  • "fr-fr-azerty" - French

  • "hu-hu-qwertz" - Hungarian

  • "it-it-qwerty" - Italian

  • "ja-jp-qwerty" - Japanese

  • "pt-br-qwerty" - Portuguese Brazilian

  • "sv-se-qwerty" - Swedish

  • "tr-tr-qwerty" - Turkish-Q

  • "failsafe" - Force use of Unicode events rather than key events for all keys

This is the layout of the RDP server and has nothing to do with the keyboard layout in use on the client. The Guacamole client is independent of keyboard layout. The RDP protocol is not independent of keyboard layout, and Guacamole needs to know the keyboard layout of the server in order to send the proper keys when a user is typing.

If you require a keyboard layout that is not currently supported, please notify us by through your account.

Time zone:

timezone

The timezone that the client should send to the server for configuring the local time display of that server. The format of the timezone is in the standard IANA key zone format, which is the format used in UNIX/Linux. This will be converted by RDP into the correct format for Windows.

Support for forwarding the client timezone varies by RDP server implementation. For example, with Windows, support for forwarding timezones is only present in Windows Server with Remote Desktop Services (RDS, formerly known as Terminal Services) installed. Windows Server installations in admin mode, along with Windows workstation versions, do not allow the timezone to be forwarded. Other server implementations, such as XRDP, may not implement this feature at all. Consult the documentation for the RDP server to determine whether or not this feature is supported.

Enable multi-touch:

enable-touch

"true" if multi-touch support should be enabled for the RDP connection. Enabling RDP support for multi-touch allows touch events to be passed through to the remote desktop, and requires that the RDP server support the RDPEI channel.

This parameter does not control whether Guacamole itself supports touch events. Guacamole always supports touch events and will use any touch events to emulate a mouse by default. This parameter controls only whether touch events should be passed directly through to the RDP server instead of emulating a mouse.

Administrator console:

console

If set to "true", you will be connected to the console (admin) session of the RDP server.

Display parameters

Guacamole will automatically choose an appropriate display size for RDP connections based on the size of the browser window and the DPI of the device. The size of the display can be forced by specifying explicit width or height values. To reduce bandwidth usage, you may also request that the server reduce its color depth.

Field header (web interface)
Parameter name
Description

Width:

width

The width of the display to request, in pixels. If this value is not specified, the width of the connecting client display will be used instead.

Height:

height

The height of the display to request, in pixels. If this value is not specified, the height of the connecting client display will be used instead.

Resolution (DPI):

dpi

The desired effective resolution of the client display, in DPI. If this value is not specified, the resolution and size of the client display will be used together to determine, heuristically, an appropriate resolution for the RDP session.

Color depth:

color-depth

The color depth to request, in bits per pixel. Legal values 8, 16, or 24. Note that, regardless of what value is chosen here, Guacamole will always attempt to optimize image transmission, automatically using fewer bits per pixel if doing so will not visibly alter image quality.

Force lossless compression:

force-lossless

Whether this connection should use lossless compression only. If set to "true", all graphical updates will use lossless compression algorithms. By default, lossy compression will automatically be used when Guacamole detects that doing so would likely outperform lossless compression.

Resize method:

resize-method

The method to use to update the RDP server when the width or height of the client display changes. If this value is not specified, no action will be taken when the client display changes size.

Normally, the display size of an RDP session is constant and can only be changed when initially connecting. As of RDP 8.1, the "Display Update" channel can be used to request that the server change the display size. For older RDP servers, the only option is to disconnect and reconnect with the new size.

Legal values are:

  • "display-update" - Use the "Display Update" channel (added in RDP 8.1) to signal the server when display size has changed

  • "reconnect" - Automatically disconnect and reconnect the RDP session when the client display size has changed

Read-only:

read-only

Whether this connection should be read-only. If set to "true", no input will be accepted on the connection at all. Users will be able to see the desktop or application but will be unable to interact.

Clipboard parameters

Guacamole provides bidirectional access to the clipboard by default for RDP connections. This behavior can be overridden on a per-connection basis, restricting access to the clipboard.

Field header (web interface)
Parameter name
Description

Disable copying from remote desktop:

disable-copy

If set to "true", text copied within the RDP session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. By default, the user will be given access to the copied text.

Disable pasting from client:

disable-paste

If set to "true", text copied at the browser side of the Guacamole session will not be accessible within the RDP session. By default, the user will be able to paste data from outside the browser within the RDP session.

Device redirection parameters

Device redirection refers to the use of non-display devices over RDP. Guacamole's RDP support currently allows redirection of audio (both output and input), printing, and disk access, some of which require additional configuration in order to function properly:

  • Audio output is always enabled by default. Configuration changes for audio output need only be made if this should be disabled.

  • Audio input, if enabled, allows users to make use of their local microphone within the remote desktop session. Enabling this typically also requires additional configuration within Windows, as group policy is often configured to disable this. Older versions of Windows may lack support for audio input via remote desktop entirely.

  • Printing, if enabled, allows users to print arbitrary documents directly to PDF. When documents are printed to the redirected printer, the user will receive a PDF download of that document within their web browser.

  • File transfer, if enabled, is provided by emulating a virtual disk drive. This drive will persist on the Guacamole server, confined within the drive path specified.

Field header (web interface)
Parameter name
Description

Support audio in console:

console-audio

If set to "true", audio will be explicitly enabled in the console (admin) session of the RDP server. Setting this option to "true" only makes sense if the console parameter is also set to "true".

Disable audio:

disable-audio

Audio output is always enabled by default. If you are concerned about bandwidth usage, or audio is causing problems, you can explicitly disable audio output by setting this parameter to "true".

Enable audio input (microphone):

enable-audio-input

If set to "true", audio input support (microphone) will be enabled, leveraging the standard "AUDIO_INPUT" channel of RDP. By default, audio input support within RDP is disabled.

Enable printing:

enable-printing

If set to "true", a redirected printer will be made available within the RDP session that users can use to print to a PDF. The PDF is received and automatically downloaded by the user's browser. By default, printing is disabled.

Redirected printer name:

printer-name

The name of the redirected printer device that is passed through to the RDP session. This is the name that the user will see in their applications and within the Devices and Printers control panel. If printer redirection is not enabled, this parameter has no effect.

Enable drive:

enable-drive

If set to "true", a redirected drive will be made available within the RDP session that users can use to transfer files. The contents of the virtual drive are persisted on the Guacamole server in the directory specified by the "drive-path" parameter. By default, drive redirection is disabled.

Drive name:

drive-name

The name of the filesystem used when passed through to the RDP session. This is the name that users will see in their Computer/My Computer area along with client name, and is also the name of the share when accessing the special \\tsclient network location.

If drive redirection is not enabled, this parameter is ignored.

Drive path:

drive-path

The directory on the Guacamole server in which transferred files should be stored. This directory must be accessible by the

If drive redirection is not enabled, this parameter is ignored.

Automatically create drive:

create-drive-path

If set to "true", the final directory within the specified drive path will automatically be created if it does not yet exist. By default, no part of the drive path will be automatically created, and any attempt to use a non-existent directory will result in an error.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the will fail with an error.

If drive redirection is not enabled, this parameter is ignored.

Static channel names:

static-channels

A comma-separated list of static channel names to open and expose as pipes. If you wish to communicate between an application running on the remote desktop and JavaScript, this is the best way to do it. Guacamole will open an outbound pipe with the name of the static channel. If JavaScript needs to communicate back in the other direction, it should respond by opening another pipe with the same name.

Guacamole allows any number of static channels to be opened, but protocol restrictions of RDP limit the size of each channel name to 7 characters.

Performance parameters / flags

RDP provides several flags which control the availability of features that decrease performance and increase bandwidth for the sake of aesthetics, such as wallpaper, window theming, menu effects, and smooth fonts. These features are all disabled by default within Guacamole such that bandwidth usage is minimized, but you can manually re-enable them on a per-connection basis if desired.

Field header (web interface)
Parameter name
Description

Enable wallpaper:

enable-wallpaper

If set to "true", enables rendering of the desktop wallpaper. By default, wallpaper will be disabled, such that unnecessary bandwidth need not be spent redrawing the desktop.

Enable theming:

enable-theming

If set to "true", enables use of theming of windows and controls. By default, theming within RDP sessions is disabled.

Enable font smoothing (ClearType):

enable-font-smoothing

If set to "true", text will be rendered with smooth edges. Text over RDP is rendered with rough edges by default, as this reduces the number of colors used by text, and thus reduces the bandwidth required for the connection.

Enable full-window drag:

enable-full-window-drag

If set to "true", the contents of windows will be displayed as windows are moved. By default, the RDP server will only draw the window border while windows are being dragged.

Enable desktop composition (Aero):

enable-desktop-composition

If set to "true", graphical effects such as transparent windows and shadows will be allowed. By default, such effects, if available, are disabled.

Enable menu animations:

enable-menu-animations

If set to "true", menu open and close animations will be allowed. Menu animations are disabled by default.

Disable bitmap caching:

disable-bitmap-caching

If set to "true", the RDP bitmap cache will not be used. By default, caching of bitmaps is enabled.

This is generally only useful when dealing with an RDP server that has known bugs in its implementation of bitmap caching, and should remain enabled in most circumstances.

Disable off-screen caching:

disable-offscreen-caching

If set to "true," caching of regions of the screen that are not currently visible will be disabled. By default, caching of off-screen regions is enabled.

This is generally only useful when dealing with an RDP server that has known bugs in its implementation of off-screen caching, and should remain enabled in most circumstances.

Disable glyph caching:

disable-glyph-caching

If set to "true", the RDP glyph cache will not be used. By default, caching of glyphs is enabled.

This is generally only useful when dealing with an RDP server that has known bugs in its implementation of glyph caching, and should remain enabled in most circumstances.

RemoteApp parameters

Recent versions of Windows provide a feature called RemoteApp which allows individual applications to be used over RDP, without providing access to the full desktop environment. If your RDP server has this feature enabled and configured, you can configure Guacamole connections to use those individual applications.

Field header (web interface)
Parameter name
Description

Program:

remote-app

The RemoteApp to start on the remote desktop. If supported by your remote desktop server, this application, and only this application, will be visible to the user. For an application to be available, it must generally be explicitly listed as allowed ahead of time within Windows Server Manager.

Windows requires a special notation for the aliases of remote applications. When specifying the alias of a remote application, it must be prefixed with two vertical bars ("||"). For example, if you have created a remote application on your server for notepad.exe and have assigned it the alias "notepad", you would set this parameter to "||notepad".

Working directory:

remote-app-dir

The working directory of the remote application, if any. This parameter has no effect if RemoteApp is not in use.

Parameters:

remote-app-args

The command-line arguments to pass to the remote application, if any. This parameter has no effect if RemoteApp is not in use.

Load balancing parameters (connection broker)

If your remote desktop servers are behind a load balancer, sometimes referred to as a "connection broker" or "TS session broker", that balancer may require additional information during the connection process to determine how the incoming connection should be routed. RDP does not dictate the format of this information; it is specific to the balancer in use.

If you are using a load balancer and are unsure whether such information is required, you will need to check the documentation for your balancer. If your balancer provides .rdp files for convenience, look through the contents of those files for a string field called "loadbalanceinfo", as that field is where the required information/cookie would be specified.

Field header (web interface)
Parameter name
Description

Load balance info/cookie:

load-balance-info

The load balancing information or cookie which should be provided to the connection broker. If no connection broker is being used, this should be left blank.

Preconnection PDU (Hyper-V)

Some RDP servers host multiple logical RDP connections behind a single server listening on a single TCP port. To select between these logical connections, an RDP client must send the "preconnection PDU" - a message which contains values that uniquely identify the destination, referred to as the "RDP source". This mechanism is defined by the "Session Selection Extension" for the RDP protocol, and is implemented by Microsoft's Hyper-V hypervisor.

If you are using Hyper-V, you will need to specify the ID of the destination virtual machine as the "preconnection BLOB". This value can be determined using PowerShell:

PS C:\> Get-VM VirtualMachineName | Select-Object Id 

Id
--
ed272546-87bd-4db9-acba-e36e1a9ca20a


PS C:\> 

The preconnection PDU is intentionally generic. While its primary use is as a means for selecting virtual machines behind Hyper-V, other RDP servers may use it as well. It is up to the RDP server itself to determine whether the preconnection ID, BLOB, or both will be used, and what their values mean.

If you do intend to use Hyper-V, beware that its built-in RDP server uses slightly different parameters for both authentication and the port number, and Guacamole's defaults will not work. In most cases, you will need to do the following when connecting to Hyper-V:

  1. Specify both the username and password appropriately, and set the security mode to "vmconnect". Selecting the "vmconnect" security mode will configure Guacamole to automatically negotiate security modes known to be supported by Hyper-V, and will automatically select Hyper-V's default RDP port (2179).

  2. If necessary, ignore the TLS certificate used by Hyper-V, which may be self-signed.

Field header (web interface)
Parameter name
Description

RDP source ID:

preconnection-id

The numeric ID of the RDP source. This is a non-negative integer value dictating which of potentially several logical RDP connections should be used. This parameter is only required if the RDP server is documented as requiring it. If using Hyper-V, this should be left blank.

Preconnection BLOB (VM ID):

preconnection-blob

An arbitrary string which identifies the RDP source - one of potentially several logical RDP connections hosted by the same RDP server. This parameter is only required if the RDP server is documented as requiring it, such as Hyper-V. In all cases, the meaning of this parameter is opaque to the RDP protocol itself and is dictated by the RDP server. For Hyper-V, this will be the ID of the destination virtual machine.

Screen recording parameters

RDP sessions can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory. Recordings can be subsequently played back using the Keeper Connection Manager Session Recording Player application hosted at player.glyptodon.com (or using a local deployment of this application).

The player is a static web application, using only JavaScript to play back provided recordings. This functionality is implemented strictly locally; the recordings are not uploaded to a remote service for processing. If you would prefer to use your own deployment of this application, or would like to investigate the source, the full source of the Keeper Connection Manager Session Recording Player can be found on GitHub, along with instructions for local deployment: https://github.com/glyptodon/glyptodon-enterprise-player

The latest version of Keeper Connection Manager supports on-screen playback of recorded sessions. See the Session Recording documentation page.

Field header (web interface)
Parameter name
Description

Recording path:

recording-path

The directory in which screen recording files should be created. If a graphical recording needs to be created, then this parameter is required. Specifying this parameter enables graphical screen recording. If this parameter is omitted, no graphical recording will be created.

Recording name:

recording-name

The filename to use for any created recordings. If omitted, the filename of each recording will simply be "recording".

Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like ".1", ".2", ".3", etc. will be appended to the filename to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude graphics/streams:

recording-exclude-output

If set to "true", graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events. By default, graphical output will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude mouse:

recording-exclude-mouse

If set to "true", user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor. By default, mouse events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Exclude touch events:

recording-exclude-touch

If set to "true", user touch events will be excluded from the recording, producing a recording which lacks the exact details of touch interactions. This will not necessarily prevent touch events from being visible, as the remote desktop server may still choose to render touch interaction on its own. By default, touch events will be included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Include key events:

recording-include-keys

If set to "true", user key events will be included in the recording. The recording can subsequently be passed through the guaclog utility to produce a human-readable interpretation of the keys pressed during the session. By default, for privacy's sake, key events will be NOT included in the recording.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

Automatically create recording path:

create-recording-path

If set to "true", the final directory within the specified recording path will automatically be created if it does not yet exist. By default, no part of the recording path will be automatically created, and any attempt to use a non-existent directory will result in the session not being recorded and an error being logged.

Only the final directory in the path will be automatically created. If other directories earlier in the path do not exist, the session will not be recorded, and an error will be logged.

This parameter only has an effect if graphical recording is enabled, which is controlled by specifying a recording path. If the recording path is not specified, graphical session recording will not be enabled, and this parameter will be ignored.

SFTP parameters (file transfer)

Guacamole can provide file transfer over SFTP even when the remote desktop is otherwise being accessed through RDP and not SSH. This support is independent of the file transfer implemented through RDP's own "drive redirection" (RDPDR), and is particularly useful for RDP servers which do not support RDPDR.

Field header (web interface)
Parameter name
Description

Enable SFTP:

enable-sftp

Whether file transfer should be enabled. If set to "true", the user will be allowed to upload or download files from the specified server using SFTP. If omitted, SFTP will be disabled.

Hostname:

sftp-hostname

The hostname or IP address of the server hosting SFTP. If omitted, the specified hostname or address of the RDP server will be used.

Port:

sftp-port

The port the SSH server providing SFTP is listening on, usually 22. If omitted, the standard port of 22 will be used.

Public host key (Base64):

sftp-host-key

The known hosts entry for the SSH server providing SFTP, in the same format as would be specified within an OpenSSH known_hosts file. If not provided, no verification of host identity will be performed.

Username:

sftp-username

The username to authenticate as when connecting to the specified SSH server for SFTP. This parameter is required if SFTP is enabled.

Password:

sftp-password

The password to use when authenticating with the specified SSH server for SFTP.

Private key:

sftp-private-key

The entire contents of the private key to use for public key authentication. If this parameter is not specified, public key authentication will not be used. The private key must be in OpenSSH format, as would be generated by the OpenSSH ssh-keygen utility.

Passphrase:

sftp-passphrase

The passphrase to use to decrypt the private key for use in public key authentication. This parameter is not needed if the private key does not require a passphrase.

File browser upload directory:

sftp-root-directory

The directory to expose to connected users via Guacamole's file browser. If omitted, the root directory will be used by default.

Default upload directory:

sftp-directory

The directory to upload files to if they are simply dragged and dropped, and thus otherwise lack a specific upload location. If omitted, the default upload location of the SSH server providing SFTP will be used.

SFTP keepalive interval:

sftp-server-alive-interval

The interval in seconds between which keepalive packets should be sent to the SSH server for the SFTP connection, where "0" indicates that no keepalive packets should be sent at all (the default behavior). The minimum legal value is "2".

Early User Authorization Result
opening a support ticket
guacd service user or group.

Accessibility Conformance

Keeper Connection Manager 508 accessibility and ergonomics support

The reports in this page refer to older versions of Glyptodon before the Keeper Connection Manager branding. To remain as accurate as possible, the documentation below will refer to the product as Glyptodon when it is a version prior to 2.8.

VPAT® Version 2.1 – March 2018

Name of Product/Version: Glyptodon Enterprise (version 1.7)

Product Description: An HTML5 remote desktop gateway (Apache Guacamole 0.9.12-incubating with additional upstream changes/improvements backported) combined with corresponding support services and documentation.

Date: June 4, 2018

Contact Information: [email protected]

Notes: The components covered by this report are the Apache Guacamole web application, as packaged by Glyptodon. The accessibility of the systems and/or applications within remote desktops accessed using Guacamole are inherently independent of Guacamole and will need to be considered separately.

Evaluation Methods Used: Testing is based on general product knowledge.

"Voluntary Product Accessibility Template" and "VPAT" are registered service marks of the Information Technology Industry Council (ITI). "Glyptodon" is a trademark of Glyptodon, Inc. "Apache", "Guacamole", "Apache Guacamole", and the Guacamole logo are trademarks of the Apache Software Foundation.

Applicable Standards/Guidelines

This report covers the degree of conformance for the following accessibility standard/guidelines:

Standard/Guideline

Included In Report

Web Content Accessibility Guidelines 2.0, at

Level A - Yes

Level AA - Yes

Level AAA - Yes

as published by the U.S. Access Board in the Federal Register on January 18, 2017

as published by the US Access Board in the Federal Register on January 22, 2018

Yes

EN 301 549 Accessibility requirements suitable for public procurement of ICT products and services in Europe, - V1.1.2 (2015-04)

Yes

Terms

The terms used in the Conformance Level information are defined as follows:

  • Supports: The functionality of the product has at least one method that meets the criterion without known defects or meets with equivalent facilitation.

  • Supports with Exceptions: Some functionality of the product does not meet the criterion.

  • Does Not Support: The majority of product functionality does not meet the criterion.

  • Not Applicable: The criterion is not relevant to the product.

  • Not Evaluated: The product has not been evaluated against the criterion. This can be used only in WCAG 2.0 Level AAA.

WCAG 2.0 Report

Tables 1 and 2 also document conformance with:

  • EN 301 549: Chapter 9 - Web, Chapter 10 - Non-Web documents, Section 11.2.1- Non-Web Software (excluding closed functionality), and Section 11.2.2 - Non-Web Software (closed functionality).

  • Revised Section 508: Chapter 5 – 501.1 Scope, 504.2 Content Creation or Editing, and Chapter 6 – 602.3 Electronic Support Documentation.

Note: When reporting on conformance with the WCAG 2.0 Success Criteria, they are scoped for full pages, complete processes, and accessibility-supported ways of using technology as documented in the WCAG 2.0 Conformance Requirements.

Table 1: Success Criteria, Level A

Notes: This table covers the following components:

  • Web (Guacamole): The Apache Guacamole web application, as packaged within Glyptodon Enterprise.

  • Web (Docs): The Glyptodon Enterprise documentation hosted at https://enterprise.glyptodon.org/doc/ covering use of Glyptodon Enterprise and/or the version of Apache Guacamole packaged with Glyptodon Enterprise.

Criteria
Conformance Level
Remarks and Explanations

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.1 (Web)

  • 10.2.1 (non-web document)

  • 11.2.1.1 (Software)

  • 11.2.2.1 (Closed Functionality Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports with Exceptions

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): The expand/collapse (+/-) icon for connection groups does not have alternative text. All other images within Guacamole either have alternative text or are purely decorative.

Web (Docs): All non-text content within the documentation has alternative text or is purely decorative.

Web (Account): All non-text content within the account management / download interface provided to Glyptodon Enterprise subscribers has alternative text or is purely decorative.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.2 (Web)

  • 10.2.2 (non-web document)

  • 11.2.1.1 (Software)

  • 11.2.2.2.1 and 11.2.2.2.2 (Closed Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Not Applicable

Web (Docs): Supports

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain prerecorded content of any kind.

Web (Docs): The only prerecorded content within the Glyptodon Enterprise documentation are videos, which are provided as an alternative to the text documentation and are labeled as such.

Web (Account): There is no prerecorded content within the account management / download interface provided to Glyptodon Enterprise subscribers.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.3 (Web)

  • 10.2.3 (non-web document)

  • 11.2.1.3 (Software)

  • 11.2.2.3 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Not Applicable

Web (Docs): Supports

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain prerecorded content of any kind.

Web (Docs): The only prerecorded content within the Glyptodon Enterprise documentation are videos, and all such videos include captions.

Web (Account): There is no prerecorded content within the account management / download interface provided to Glyptodon Enterprise subscribers.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.4 (Web)

  • 10.2.4 (non-web document)

  • 11.2.1.4 (Software)

  • 11.2.2.4 (Closed Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Not Applicable

Web (Docs): Supports

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain prerecorded content of any kind.

Web (Docs): The only prerecorded content within the Glyptodon Enterprise documentation are videos, which are provided as an alternative to the text documentation and are labeled as such.

Web (Account): There is no prerecorded content within the account management / download interface provided to Glyptodon Enterprise subscribers.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.7 (Web)

  • 10.2.7 (non-web document)

  • 11.2.1.7 (Software)

  • 11.2.2.7 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): The relationships between presentation elements within Guacamole are always conveyed with corresponding text and semantic markup.

Web (Docs): The relationships between presentation elements within the Glyptodon Enterprise documentation are always conveyed with corresponding text and semantic markup.

Web (Account): The relationships between presentation elements within the Glyptodon Enterprise account / download interface are always conveyed with corresponding text and semantic markup.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.8 (Web)

  • 10.2.8 (non-web document)

  • 11.2.1.8 (Software)

  • 11.2.2.8 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Content which is related semantically is organized with appropriate header elements and/or nested structurally. Guacamole does not depend on nor assume any particular reading direction (RTL vs. LTR).

Web (Docs): The visual presentation of sections of the Glyptodon Enterprise documentation always exactly matches the programmatically determined order, with the exception of elements which do not affect the meaning of other elements (such as the navigation panel).

Web (Account): Where order has an effect on meaning, the visual presentation of sections of the Glyptodon Enterprise account / download interface always exactly matches the programmatically determined order.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.9 (Web)

  • 10.2.9 (non-web document)

  • 11.2.1.9 (Software)

  • 11.2.2.9 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports with Exceptions

Web (Docs): Supports with Exceptions

Web (Account): Supports

Web (Guacamole): The expand/collapse (+/-) icon for connection groups does not have alternative text. All other images within Guacamole either have alternative text or are purely decorative.

Web (Docs): The expand/collapse icon within the navigation panel does not have alternative text, however this icon is not necessary to expand/collapse groups within the panel, nor to determine whether a group is expanded. All other graphical elements within the Glyptodon Enterprise documentation either have alternative text or are purely decorative.

Web (Account): All images within the Glyptodon Enterprise account / download interface have alternative text or are purely decorative.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.10 (Web)

  • 10.2.10 (non-web document)

  • 11.2.1.10 (Software)

  • 11.2.2.10 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): All information conveyed with color is additionally conveyed with text.

Web (Docs): All information conveyed with color is additionally conveyed with text.

Web (Account): All information conveyed with color is additionally conveyed with text.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.11 (Web)

  • 10.2.11 (non-web document)

  • 11.2.1.11 (Software)

  • 11.2.2.11 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): The web application does not inherently provide audio controls, however the operating system of the remote desktop being accessed through Guacamole should provide such controls.

Web (Docs): There is no automatically playing content within the Glyptodon Enterprise documentation.

Web (Account): There is no automatically playing content within the Glyptodon Enterprise account / download interface.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.15 (Web)

  • 10.2.15 (non-web document)

  • 11.2.1.15 (Software)

  • 11.2.2.15 (Closed Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): Not all elements of the Guacamole interface can be accessed/focused using the "Tab" key.

Web (Docs): Within the Glyptodon Enterprise documentation, absolutely all links and elements capable of receiving keyboard focus can be accessed/focused using the "Tab" key.

Web (Account): While most elements within the Glyptodon Enterprise account / download interface can be accessed/focused using the "Tab" key, the account menu cannot. Accessing this menu is necessary to log out. Additionally, some user interface components do not fully support keyboard interaction, such as drop down menus within account information edit screens.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.16 (Web)

  • 10.2.16 (non-web document)

  • 11.2.1.16 (Software)

  • 11.2.2.16 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): To the extent allowed by the browser, Guacamole does take control of all keystrokes while a connection is in use, however users may manually return focus to the browser by pressing Ctrl+Alt+Shift to open the Guacamole menu.

Web (Docs): Nothing within the Glyptodon Enterprise documentation takes control of the keyboard in any way.

Web (Account): Nothing within the Glyptodon Enterprise account / download interfaces takes control of the keyboard in any way.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.17 (Web)

  • 10.2.17 (non-web document)

  • 11.2.1.17 (Software)

  • 11.2.2.17 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Not Applicable

Web (Account): Supports

Web (Guacamole): Session time limits are set by the system administrator and cannot be adjusted by users. By default, users will be automatically logged out after one hour of inactivity. Guacamole considers being connected to at least one connection to be activity, even if the user is not actively interacting with that connection.

Web (Docs): The Glyptodon Enterprise documentation is always available. No authentication is required to access the documentation and there are no time limits.

Web (Account): Users can elect to remain logged in to the Glyptodon Enterprise account / download interface by checking the "Remember me" box during login.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.18 (Web)

  • 10.2.18 (non-web document)

  • 11.2.1.18 (Software)

  • 11.2.2.18 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Not Applicable

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): The only moving/blinking/scrolling/auto-updating content within Guacamole is the remote desktop connection that a user is actively using. In such a case, the moving/blinking/scrolling/auto-updating is not only essential to the activity, it is the activity.

Web (Docs): The only moving/blinking/scrolling/auto-updating content within the Glyptodon Enterprise documentation are videos accompanying the text, and those videos do not automatically start.

Web (Account): There is no moving/blinking/scrolling/auto-updating content within the Glyptodon Enterprise account / download interface.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.19 (Web)

  • 10.2.19 (non-web document)

  • 11.2.1.19 (Software)

  • 11.2.2.19 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Guacamole’s interface does not contain anything that flashes.

Web (Docs): The Glyptodon Enterprise documentation does not contain anything that flashes.

Web (Account): The Glyptodon Enterprise account / download interface does not contain anything that flashes.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.20 (Web)

  • 10.2.20 (non-web document) – Does not apply

  • 11.2.1.20 (Software) – Does not apply

  • 11.2.2.20 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software) – Does not apply to non-web software

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs) – Does not apply to non-web docs

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Content is not repeated. In cases where a page contains multiple content areas, those areas have proper heading elements.

Web (Docs): The only repeated content within the Glyptodon Enterprise documentation is the navigation panel, which is properly identified with ARIA landmark roles. The main content section is also identified with an ARIA landmark role, and all sections within the content are identified with heading elements.

Web (Account): The only repeated content within the Glyptodon Enterprise account / download interface is the navigation menu, which is properly identified with semantic markup. All sections within the main content are identified with heading elements.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.21 (Web)

  • 10.2.21 (non-web document)

  • 11.2.1.21 (Software) - Does not apply

  • 11.2.2.21 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): For most pages, the name of the web application (Apache Guacamole) is used as the title without context. When accessing a connection, the name of the connection is used as the title.

Web (Docs): Each page within the Glyptodon Enterprise documentation has a title element containing the unique title of the page.

Web (Account): All pages within the Glyptodon Enterprise account / download interface are titled: "My Account - Glyptodon Enterprise".

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.22 (Web)

  • 10.2.22 (non-web document)

  • 11.2.1.22 (Software)

  • 11.2.2.22 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): Not all elements of the Guacamole interface can be accessed/focused using the "Tab" key.

Web (Docs): All elements within the Glyptodon Enterprise documentation that are capable of receiving focus can be accessed/focused in sequence using the "Tab" key.

Web (Account): While most elements within the Glyptodon Enterprise account / download interface can be accessed/focused using the "Tab" key, the account menu cannot. Accessing this menu is necessary to log out.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.23 (Web)

  • 10.2.23 (non-web document)

  • 11.2.1.23 (Software)

  • 11.2.2.23 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): All links have context and descriptive text.

Web (Docs): All links have context and descriptive text. Navigation links additionally have programmatically-determinable context through use of semantic elements and ARIA landmark roles.

Web (Account): All links have context and descriptive text. Navigation links additionally have programmatically-determinable context through use of semantic elements.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.27 (Web)

  • 10.2.27 (non-web document)

  • 11.2.1.27 (Software)

  • 11.2.2.27 (Closed Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): The language of each page is not exposed such that it can be programmatically determined.

Web (Docs): The language of each page is exposed using the "lang" attribute on the top-level "html" element.

Web (Account): The language of each page is exposed using the "lang" attribute on the top-level "html" element.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.29 (Web)

  • 10.2.29 (non-web document)

  • 11.2.1.29 (Software)

  • 11.2.2.29 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Simply receiving focus will not result in a change of context.

Web (Docs): Simply receiving focus will not result in a change of context.

Web (Account): Simply receiving focus will not result in a change of context.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.30 (Web)

  • 10.2.30 (non-web document)

  • 11.2.1.30 (Software)

  • 11.2.2.30 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports with Exceptions

Web (Docs): Supports with Exceptions

Web (Account): Supports

Web (Guacamole): Changing the display language or changing any setting within the Guacamole menu will take immediate effect. All other changes must be explicitly submitted to take effect.

Web (Docs): Changing the selected documentation version will immediately reload the page, replacing the current documentation with the version chosen (if available). The only other aspect of the interface which may receive input, the search box, must be manually submitted to have any effect.

Web (Account): Under no circumstances will user input have any effect unless explicitly submitted.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.33 (Web)

  • 10.2.33 (non-web document)

  • 11.2.1.33 (Software)

  • 11.2.2.33 (Closed Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): If a user submits invalid information, an error message is displayed describing the problem.

Web (Docs): In the event of an error, such as navigating to a non-existent page, an error page is displayed describing the problem.

Web (Account): In the event of an error due to invalid data, an error message is displayed describing the problem.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.34 (Web)

  • 10.2.34 (non-web document)

  • 11.2.1.34 (Software)

  • 11.2.2.34 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Labels and/or instructions are provided for absolutely all cases where user input is required.

Web (Docs): Labels are provided for absolutely all cases where user input is required.

Web (Account): Labels are provided for absolutely all cases where user input is required.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.37 (Web)

  • 10.2.37 (non-web document)

  • 11.2.1.37 (Software)

  • 11.2.2.37 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): All markup (HTML) within Guacamole is valid, having complete and matching start/end tags for all elements, with elements nested as specified by relevant standards.

Web (Docs): All markup (HTML) within the Glyptodon Enterprise documentation is valid, having complete and matching start/end tags for all elements, with elements nested as specified by relevant standards.

Web (Account): All markup (HTML) within the Glyptodon Enterprise account / download interface is valid, having complete and matching start/end tags for all elements, with elements nested as specified by relevant standards.

(Level A)

Also applies to:

EN 301 549 Criteria

  • 9.2.38 (Web)

  • 10.2.38 (non-web document)

  • 11.2.1.38 (Software)

  • 11.2.2.38 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Only standard HTML controls are used.

Web (Docs): Only standard HTML controls are used.

Web (Account): With the exception of drop down menus within account edit screens, only standard HTML controls are used. The non-standard drop down menus are backed by standard HTML controls and function correctly if programmatically modified.

Table 2: Success Criteria, Level AA

Notes: This table covers the following components:

  • Web (Guacamole): The Apache Guacamole web application, as packaged within Glyptodon Enterprise.

  • Web (Docs): The Glyptodon Enterprise documentation hosted at https://enterprise.glyptodon.org/doc/ covering use of Glyptodon Enterprise and/or the version of Apache Guacamole packaged with Glyptodon Enterprise.

  • Web (Account): The web interface provided to subscribers to retrieve Glyptodon Enterprise repository credentials, to make changes to payment information and the subscription, and to obtain support (https://enterprise.glyptodon.org/account/).

Criteria
Conformance Level
Remarks and Explanations

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.5 (Web)

  • 10.2.5 (non-web document)

  • 11.2.1.5 (Software)

  • 11.2.2.5 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Not Applicable

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): Providing captions is not relevant to the functionality of the web application. If users require captions from specific software or videos within the remote desktop, such responsibility would fall on those programs.

Web (Docs): There is no live content within the Glyptodon Enterprise documentation.

Web (Account): There is no live content within the Glyptodon Enterprise account / download interface.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.6 (Web)

  • 10.2.6 (non-web document)

  • 11.2.1.6 (Software)

  • 11.2.2.6 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Not Applicable

Web (Docs): Does Not Support

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain any prerecorded content.

Web (Docs): While included videos are narrated, the narration is not sufficient to capture all important visual details within the video.

Web (Account): The Glyptodon Enterprise account / download interface does not contain any prerecorded content.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.12 (Web)

  • 10.2.12 (non-web document)

  • 11.2.1.12 (Software)

  • 11.2.2.12 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports with Exceptions

Web (Account): Does Not Support

Web (Guacamole): All text is black over white background, where contrast ratio is 21:1.

Web (Docs): With the exception of the "GO" button in the search box, all text has a contrast ratio of at least 4.5:1.

Web (Account): While most text is dark gray over white background with a contrast ratio of 7.94:1, links are teal over white background with a contrast ratio below 4.5:1. Buttons and some callouts are also similarly low-contrast.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.13 (Web)

  • 10.2.13 (non-web document)

  • 11.2.1.13 (Software)

  • 11.2.2.13 (Closed Software)

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports with Exceptions

Web (Account): Supports

Web (Guacamole): The content of the web application may be resized to at least 200% via the built-in zoom function of the web browser without loss of functionality or content. Additionally, any active remote desktop connection may be magnified to at least 200% using the zoom function within the "Display" section of the Guacamole menu.

Web (Docs): All text within the Glyptodon Enterprise documentation may be resized to at least 200% via the built-in zoom function of the web browser without loss of functionality or content. The navigation panel may be hidden, depending on whether sufficient space remains to display the panel.

Web (Account): All text within the Glyptodon Enterprise account / download interface may be resized to at least 200% via the built-in zoom function of the web browser without loss of functionality or content.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.14 (Web)

  • 10.2.14 (non-web document)

  • 11.2.1.14 (Software)

  • 11.2.2.14 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Images of text are never used to convey information.

Web (Docs): Images of text are never used to convey information.

Web (Account): Images of text are never used to convey information.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.24 (Web)

  • 10.2.24 (non-web document) – Does not apply

  • 11.2.1.24 (Software) – Does not apply

  • 11.2.2.24 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software) – Does not apply to non-web software

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs) – Does not apply to non-web docs

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): Navigating between pages within Guacamole always involves navigation bars / menus / hierarchical lists, and there is generally only one way to navigate to a particular page in each instance.

Web (Docs): In addition to a navigation panel, the Glyptodon Enterprise documentation provides a search mechanism, links which move through the documentation sequentially, breadcrumbs, and general links between pages.

Web (Account): Navigating between pages within the Glyptodon Enterprise account / download interface always involves a common navigation bar.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.25 (Web)

  • 10.2.25 (non-web document)

  • 11.2.1.25 (Software)

  • 11.2.2.25 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports with Exceptions

Web (Guacamole): Descriptive headings and labels are used throughout the Guacamole interface.

Web (Docs): Descriptive headings are used throughout the Glyptodon Enterprise documentation. Descriptive labels are used in the few cases where user input is applicable (the search box / navigation panel).

Web (Account): Descriptive headings and labels are used throughout the Glyptodon Enterprise account / download interface, however some required fields on edit screens are marked as required using an asterisk ("*"), with no other programmatically-readable text indicating the field is required.

l (Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.26 (Web)

  • 10.2.26 (non-web document)

  • 11.2.1.26 (Software)

  • 11.2.2.26 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Guacamole does not override browser-default focus indicators.

Web (Docs): While the Glyptodon Enterprise documentation does include some styling which is conditional depending on focus, this is not done to such a degree that the browser-default focus indicators are absent.

Web (Account): The Glyptodon Enterprise account / download interface does not override browser-default focus indicators.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.28 (Web)

  • 10.2.28 (non-web document)

  • 11.2.1.28 (Software) – Does not apply

  • 11.2.2.28 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): The language of the parts of each page is not exposed such that it can be programmatically determined.

Web (Docs): Only a single language is used on all pages, and that language can be programmatically determined.

Web (Account): Only a single language is used on all pages, and that language can be programmatically determined.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.31 (Web)

  • 10.2.31 (non-web document) – Does not apply

  • 11.2.1.31 (Software) – Does not apply

  • 11.2.2.31 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software) – Does not apply to non-web software

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs) – Does not apply to non-web docs

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): The only repeated navigational mechanism within Guacamole is the user menu, the order and contents of which are consistent in all cases.

Web (Docs): The navigation panel, common to all pages within the Glyptodon Enterprise documentation, is consistently ordered. Breadcrumb links, also common to all pages, consistently contain the parent page(s) of the current page in increasing order or depth.

Web (Account): The navigation menu, common to all pages within the Glyptodon Enterprise account / download interface, consistently contains the same links in the same order.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.32 (Web)

  • 10.2.32 (non-web document) – Does not apply

  • 11.2.1.32 (Software) – Does not apply

  • 11.2.2.32 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software) – Does not apply to non-web software

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs) – Does not apply to non-web docs

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Components of the web application which appear repeatedly are consistently labeled and styled.

Web (Docs): Common/repeated content within the Glyptodon Enterprise documentation is consistently labeled and styled. If such content is non-text and is not purely decorative, consistent text alternatives for the content are always provided.

Web (Account): Common/repeated content within the Glyptodon Enterprise account / download interface is consistently labeled.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.35 (Web)

  • 10.2.35 (non-web document)

  • 11.2.1.35 (Software)

  • 11.2.2.35 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): Automatic guidance for correcting errors in user input is generally not provided. Only an explicit, descriptive error is displayed.

Web (Docs): If an error occurs while accessing the documentation, such as if a user visits a page that does not exist, guidance is provided which advises the user of possible steps to take to correct the problem.

Web (Account): Automatic guidance for correcting errors in user input is generally not provided. Only an explicit, descriptive error is displayed.

(Level AA)

Also applies to:

EN 301 549 Criteria

  • 9.2.36 (Web)

  • 10.2.36 (non-web document)

  • 11.2.1.36 (Software)

  • 11.2.2.36 (Closed Software) – Does not apply

  • 11.6.2 (Authoring Tool)

  • 12.1.2 (Product Docs)

  • 12.2.4 (Support Docs)

2017 Section 508

  • 501 (Web)(Software)

  • 504.2 (Authoring Tool)

  • 602.3 (Support Docs)

Web (Guacamole): Supports with Exceptions

Web (Docs): Not Applicable

Web (Account): Supports

Web (Guacamole): Destructive administrative tasks are explicitly confirmed before being allowed to take place. Modifications to connection configurations are applied immediately (without confirmation) if there are no errors preventing modification, however user input checking is not feasible given the broad, generic nature of connection parameters (virtually any value is conceivably valid).

Web (Docs): The Glyptodon Enterprise documentation does not allow the user to make changes to data, perform transactions, etc. It is purely a read-only, searchable documentation system.

Web (Account): User input checking is performed in all cases where data modification is allowed.

Table 3: Success Criteria, Level AAA

Notes: This table covers the following components:

  • Web (Guacamole): The Apache Guacamole web application, as packaged within Glyptodon Enterprise.

  • Web (Docs): The Glyptodon Enterprise documentation hosted at https://enterprise.glyptodon.org/doc/ covering use of Glyptodon Enterprise and/or the version of Apache Guacamole packaged with Glyptodon Enterprise.

  • Web (Account): The web interface provided to subscribers to retrieve Glyptodon Enterprise repository credentials, to make changes to payment information and the subscription, and to obtain support (https://enterprise.glyptodon.org/account/).

Criteria

Conformance Level

Remarks and Explanations

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Not Applicable

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain any prerecorded content.

Web (Docs): The only prerecorded content within the Glyptodon Enterprise documentation are videos, which are provided as an alternative to the text documentation and are labeled as such.

Web (Account): The Glyptodon Enterprise account / download interface does not contain any prerecorded content.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Not Applicable

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain any prerecorded content.

Web (Docs): The only prerecorded content within the Glyptodon Enterprise documentation are videos, which are provided as an alternative to the text documentation and are labeled as such.

Web (Account): The Glyptodon Enterprise account / download interface does not contain any prerecorded content.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Not Applicable

Web (Docs): Supports

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain any prerecorded content.

Web (Docs): Videos are included within the Glyptodon Enterprise documentation only when they are accompanied by full, equivalent text. Such videos are the only prerecorded content within the Glyptodon Enterprise documentation.

Web (Account): The Glyptodon Enterprise account / download interface does not contain any prerecorded content.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Not Applicable

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain any live, audio-only content.

Web (Docs): The Glyptodon Enterprise documentation does not contain any live, audio-only content.

Web (Account): The Glyptodon Enterprise account / download interface does not contain any live, audio-only content.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): The contrast ratio of text within the Guacamole interface is 21:1 (black text on white background).

Web (Docs): The contrast ratio of all text within the Glyptodon Enterprise documentation varies, but is always at least 7:1.

Web (Account): While most text is dark gray over white background with a contrast ratio of 7.94:1, links are teal over white background with a contrast ratio below 4.5:1. Some callouts are also similarly low-contrast.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Not Applicable

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): Guacamole does not contain any prerecorded content.

Web (Docs): The Glyptodon Enterprise documentation does not contain any prerecorded, audio-only content.

Web (Account): The Glyptodon Enterprise account / download interface does not contain any prerecorded, audio-only content.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Does Not Support

Web (Account): Does Not Support

Web (Guacamole): Foreground and background color for main content is explicitly specified via CSS.

Web (Docs): Foreground and background color for main content is explicitly specified via CSS.

Web (Account): Foreground and background color for main content is explicitly specified via CSS.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Images of text are never used to convey information.

Web (Docs): Images of text are never used to convey information. Screenshots may be used, and these screenshots may contain text, however such images are explicitly excluded from this criteria.

Web (Account): Images of text are never used to convey information.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): Not all elements of the Guacamole interface can be accessed/focused using the “Tab” key.

Web (Docs): Within the Glyptodon Enterprise documentation, absolutely all links and elements capable of receiving keyboard focus can be accessed/focused using the "Tab" key.

Web (Account): While most elements within the Glyptodon Enterprise account / download interface can be accessed/focused using the "Tab" key, the account menu cannot. Accessing this menu is necessary to log out. Additionally, some user interface components do not fully support keyboard interaction, such as drop down menus within account information edit screens.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Supports

Web (Account): Does Not Support

Web (Guacamole): Session time limits are set by the system administrator and cannot be adjusted by users. By default, users will be automatically logged out after one hour of inactivity. Guacamole considers being connected to at least one connection to be activity, even if the user is not actively interacting with that connection.

Web (Docs): The Glyptodon Enterprise documentation is always available. No authentication is required to access the documentation and there are no time limits.

Web (Account): A time limit applies to user sessions within the Glyptodon Enterprise account / download interface unless explicitly disabled by the user during login.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Not Applicable

Web (Account): Not Applicable

Web (Guacamole): Alerts are used only to communicate critical errors or changes in connection status.

Web (Docs): The Glyptodon Enterprise documentation does not use alerts/interruptions of any kind.

Web (Account): The Glyptodon Enterprise account / download interface does not use alerts/interruptions of any kind.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Not Applicable

Web (Account): Does Not Support

Web (Guacamole): State is lost upon session expiration.

Web (Docs): The Glyptodon Enterprise documentation is always available. No authentication is required to access the documentation and there are no time limits.

Web (Account): State is lost upon session expiration.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Guacamole’s interface does not contain anything that flashes.

Web (Docs): The Glyptodon Enterprise documentation does not contain anything that flashes.

Web (Account): The Glyptodon Enterprise account / download interface does not contain anything that flashes.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Pages within Guacamole are generally no more than one level deep. A link to the top-level page is always provided.

Web (Docs): The user's location within the documentation is indicated through both the navigation panel and breadcrumb links.

Web (Account): The user's location within the Glyptodon Enterprise account / download interface is indicated through style changes to the links within the navigation menu (the current page is highlighted).

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Link text is always descriptive.

Web (Docs): Link text is always descriptive.

Web (Account): Link text is always descriptive.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Section headings are used throughout the Guacamole interface, wherever distinct sections exist.

Web (Docs): Section headings are consistently used within the Glyptodon Enterprise documentation to organize content by topic, subtopic, etc.

Web (Account): Where distinct sections exist, section headings are always used to organize the content.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Does Not Support

Web (Account): Does Not Support

Web (Guacamole): Technical terms specific to remote desktop or Guacamole administration are not independently defined and do not link to definitions.

Web (Docs): While the documentation is intended to be explanatory, many technical terms are not independently defined and do not link to definitions.

Web (Account): Any technical terms present are not independently defined and do not link to definitions.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Does Not Support

Web (Account): Does Not Support

Web (Guacamole): Abbreviations are not used within the Guacamole interface, with the exception of protocol names (VNC, RDP, SSH), which are not independently defined and do not link to definitions.

Web (Docs): Abbreviations are generally not independently defined and do not link to definitions.

Web (Account): Abbreviations are generally not independently defined and do not link to definitions.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Does Not Support

Web (Account): Does Not Support

Web (Guacamole): No supplemental text at different reading levels is provided for any text within Guacamole.

Web (Docs): No supplemental text at different reading levels is provided for any text within the Glyptodon Enterprise documentation, which may be highly technical.

Web (Account): No supplemental text at different reading levels is provided for any text within the Glyptodon Enterprise account / download interface.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Does Not Support

Web (Account): Does Not Support

Web (Guacamole): No mechanism is provided to disambiguate words that differ in meaning solely by pronunciation.

Web (Docs): No mechanism is provided to disambiguate words that differ in meaning solely by pronunciation.

Web (Account): No mechanism is provided to disambiguate words that differ in meaning solely by pronunciation.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Changes of context occur only when initiated by user request.

Web (Docs): Changes of context occur only when initiated by user request.

Web (Account): Changes of context occur only when initiated by user request.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Does Not Support

Web (Docs): Does Not Support

Web (Account): Does Not Support

Web (Guacamole): With the exception of brief instructional paragraphs, no contextual help is provided.

Web (Docs): The interface of the Glyptodon Enterprise documentation does not include contextual help.

Web (Account): The Glyptodon Enterprise account / download interface does not include contextual help.

(Level AAA)

Also applies to:

EN 301 549 Criteria – Does not apply

2017 Section 508 – Does not apply

Web (Guacamole): Supports with Exceptions

Web (Docs): Supports

Web (Account): Supports

Web (Guacamole): Destructive administrative tasks are explicitly confirmed before being allowed to take place. Modifications to connection configurations are applied immediately (without confirmation) if there are no errors preventing modification.

Web (Docs): If a user submits invalid data when attempting to perform a search, the user is given the opportunity to correct their search terms.

Web (Account): Destructive administrative tasks are explicitly confirmed before being allowed to take place. Error checking is performed on input fields prior to accepting the user's submission.

2017 Section 508 Report

Chapter 3: Functional Performance Criteria (FPC)

Criteria
Conformance Level
Remarks and Explanations

302.1 Without Vision

Supports

No mode of operation requires vision, as text is always provided in a programmatically-readable form.

302.2 With Limited Vision

Supports with Exceptions

No mode of operation requires vision, as text is always provided in a programmatically-readable form. Guacamole and the Glyptodon Enterprise documentation additionally use high-contrast text. The Glyptodon Enterprise account / download interface contains some components with text that is relatively low-contrast.

302.3 Without Perception of Color

Supports

Color is never used as the sole means of indicating meaning. Text is always included which unambiguously describes the meaning of the content even if color is absent.

302.4 Without Hearing

Supports

Use of Guacamole and/or Glyptodon Enterprise does not depend on hearing.

302.5 With Limited Hearing

Supports

Use of Guacamole and/or Glyptodon Enterprise does not depend on hearing.

302.6 Without Speech

Supports

Use of Guacamole and/or Glyptodon Enterprise does not depend on speech.

302.7 With Limited Manipulation

Supports with Exceptions

Opening the Guacamole menu requires pressing three keys simultaneously (Ctrl+Alt+Shift). Some parts of the Guacamole interface are not reachable through keyboard interaction alone, and thus may require mouse interaction. Logging out from the Glyptodon Enterprise account / download interface requires opening a menu which can only be reached using the mouse.

302.8 With Limited Reach and Strength

Supports

Guacamole and/or Glyptodon Enterprise do not impose reach or strength requirements.

302.9 With Limited Language, Cognitive, and Learning Abilities

Does Not Support

The text within Guacamole and Glyptodon Enterprise contains technical jargon that is not defined and does not link to corresponding definitions.

Chapter 4: Hardware

Notes: Not Applicable

Chapter 5: Software

Criteria
Conformance Level
Remarks and Explanations

501.1 Scope – Incorporation of WCAG 2.0 AA

See WCAG 2.0 section

See information in the section.

502 Interoperability with Assistive Technology

Not Applicable

All components covered by this conformance report are web applications/services to which 502 and 503 do not apply, as no such component has access to platform accessibility services. From the text of Section 508:

EXCEPTION: Where Web applications do not have access to platform accessibility services and do not include components that have access to platform accessibility services, they shall not be required to conform to 502 or 503 provided that they conform to Level A and Level AA Success Criteria and Conformance Requirements in WCAG 2.0 (incorporated by reference, see 702.10.1).

503 Applications

Not Applicable

504 Authoring Tools

Not Applicable

No part of Guacamole or Glyptodon Enterprise constitutes an authoring tool.

Chapter 6: Support Documentation and Services

Notes: This table is specific to the documentation and support services provided as part of Glyptodon Enterprise. It does not apply to Apache Guacamole.

Criteria
Conformance Level
Remarks and Explanations

601.1 Scope

Heading cell – no response required

Heading cell – no response required

602 Support Documentation

Heading cell – no response required

Heading cell – no response required

602.2 Accessibility and Compatibility Features

Does Not Support

Specific documentation is not provided on the usage of Guacamole or Glyptodon Enterprise with accessibility technologies.

602.3 Electronic Support Documentation

See WCAG 2.0 section

See information in the WCAG 2.0 section.

602.4 Alternate Formats for Non-Electronic Support Documentation

Not Applicable

All support documentation is provided in an electronic format.

603 Support Services

Heading cell – no response required

Heading cell – no response required

603.2 Information on Accessibility and Compatibility Features

Supports

For Glyptodon Enterprise subscriptions which include support services, those services include at least all documented features within scope. This report is part of that documentation.

603.3 Accommodation of Communication Needs

Supports

For Glyptodon Enterprise subscriptions which include support services, those services are provided at a minimum through email and/or a text-based support desk. The support desk has been verified as accessible against WCAG 2.0.

EN 301 549 Report

Chapter 4: 4.2 Functional Performance Statements (FPS)

Criteria
Conformance Level
Remarks and Explanations

4.2.1 Usage without vision

Supports

No mode of operation requires vision, as text is always provided in a programmatically-readable form.

4.2.2 Usage with limited vision

Supports with Exceptions

No mode of operation requires vision, as text is always provided in a programmatically-readable form. Guacamole and the Glyptodon Enterprise documentation additionally use high-contrast text. The Glyptodon Enterprise account / download interface contains some components with text that is relatively low-contrast.

4.2.3 Usage without perception of colour

Supports

Color is never used as the sole means of indicating meaning. Text is always included which unambiguously describes the meaning of the content even if color is absent.

4.2.4 Usage without hearing

Supports

Use of Guacamole and/or Glyptodon Enterprise does not depend on hearing.

4.2.5 Usage with limited hearing

Supports

Use of Guacamole and/or Glyptodon Enterprise does not depend on hearing.

4.2.6 Usage without vocal capability

Supports

Use of Guacamole and/or Glyptodon Enterprise does not depend on speech.

4.2.7 Usage with limited manipulation or strength

Supports with Exceptions

Opening the Guacamole menu requires pressing three keys simultaneously (Ctrl+Alt+Shift). Some parts of the Guacamole interface are not reachable through keyboard interaction alone, and thus may require mouse interaction. Logging out from the Glyptodon Enterprise account / download interface requires opening a menu which can only be reached using the mouse.

4.2.8 Usage with limited reach

Supports

Guacamole and Glyptodon Enterprise do not impose reach requirements.

4.2.9 Minimize photosensitive seizure triggers

Supports

Guacamole and Glyptodon Enterprise do not contain anything that flashes.

4.2.10 Usage with limited cognition

Does Not Support

The text within Guacamole and Glyptodon Enterprise contains technical jargon that is not defined and does not link to corresponding definitions.

4.2.11 Privacy

Not Applicable

Any accessibility features with privacy implications, such as automatic audible echo of keys pressed, automatic reading of the screen, etc., are controlled by the browser and/or the platform on which the browser is running.

Chapter 5: Generic Requirements

Criteria
Conformance Level
Remarks and Explanations

5.1 Closed functionality

Not Applicable

All functionality within Guacamole and Glyptodon Enterprise is open to accessibility technologies. In the case of a remote desktop connection being accessed through Guacamole, such accessibility technologies will additionally need to be running remotely (within the remote desktop session).

5.2 Activation of accessibility features

Not Applicable

The accessibility features provided by Guacamole and Glyptodon Enterprise do not need to be activated. They are implemented through leveraging proper semantic elements, structure, and/or ARIA landmark roles, and are inherently always active.

5.3 Biometrics

Not Applicable

Neither Guacamole nor the various Glyptodon Enterprise services make use of biometrics.

5.4 Preservation of accessibility information during conversion

Not Applicable

No information or communication which is converted by Guacamole or Glyptodon Enterprise contains accessibility information.

5.5 Operable parts

Not Applicable

Neither Guacamole nor the various Glyptodon Enterprise services have operable parts. They are purely software.

5.6 Locking or toggle controls

Not Applicable

Neither Guacamole nor the various Glyptodon Enterprise services include physical locking or toggling components. They are purely software.

5.7 Key repeat

Does Not Support

Guacamole implements a 500 millisecond key repeat delay and 50 millisecond key repeat rate which affects typable keys used within a remote desktop session. There is no mechanism provided for configuring the key repeat delay nor the key repeat rate.

5.8 Double-strike key acceptance

Does Not Support

Guacamole does not provide a mechanism for filtering out double keystrokes.

5.9 Simultaneous user actions

Does Not Support

Opening the Guacamole menu requires pressing three keys simultaneously (Ctrl+Alt+Shift). There is effectively no other method of opening the menu.

Chapter 6: ICT with Two-Way Voice Communication

Notes: Not Applicable. Guacamole and Glyptodon Enterprise do not provide two-way voice communication.

Chapter 7: ICT with Video Capabilities

Criteria

Conformance Level

Remarks and Explanations

7.1 Caption processing technology

Heading cell – no response required

Heading cell – no response required

7.1.1 Captioning playback

Supports

Videos are included alongside the Glyptodon Enterprise documentation to complement equivalent text documents. Such videos include captioning which corresponds to the audio within the video.

7.1.2 Captioning synchronization

Supports

Captions within videos included alongside the Glyptodon Enterprise documentation preserve synchronization between audio and corresponding captions.

7.1.3 Preservation of captioning

Supports

Captioning information, if present, is inherently lost in transmission from the remote desktop to the Guacamole server, however the captions themselves are still graphically forwarded (just like any other content within the remote desktop session).

7.2.1 Audio description playback

Does Not Support

Audio descriptions are not provided for videos which accompany the Glyptodon Enterprise documentation.

7.2.2 Audio description synchronization

Does Not Support

Audio descriptions are not provided for videos which accompany the Glyptodon Enterprise documentation.

7.2.3 Preservation of audio description

Supports

Audio descriptions, if present within content in a remote desktop session, will be retransmitted by the Guacamole server just like any other audio within the remote desktop session.

7.3 User controls for captions and audio description

Not Applicable

Neither Guacamole nor Glyptodon Enterprise primarily display materials containing video with accompanying audio. Guacamole provides access to remote desktops (general applications and systems, not specifically video with accompanying audio), while Glyptodon Enterprise documentation and support services are primarily text-based.

Chapter 8: Hardware

Notes: Not Applicable. Guacamole and Glyptodon Enterprise are purely software/services. No hardware is provided.

Chapter 9: Web

Notes: See information in the WCAG 2.0 section.

Chapter 10: Non-web Documents

Notes: Not Applicable. All documentation provided via Glyptodon Enterprise is web-based.

Chapter 11: Software

Notes: Chapter 11 deals with software not already covered by Chapter 9. All components covered by this document are covered by Chapter 9. See information in the WCAG 2.0 section.

Chapter 12: Documentation and Support Services

Criteria
Conformance Level
Remarks and Explanations

12.1 Product documentation

Heading cell – no response required

Heading cell – no response required

12.1.1 Accessibility and compatibility features

Does Not Support

Specific documentation is not provided on the usage of Guacamole or Glyptodon Enterprise with accessibility technologies.

12.1.2 Accessible documentation

See WCAG 2.0 section

See information in WCAG section

12.2 Support Services

Heading cell – no response required

Heading cell – no response required

12.2.2 Information on accessibility and compatibility features

Supports

For Glyptodon Enterprise subscriptions which include support services, those services include at least all documented features within scope. This report is part of that documentation.

12.2.3 Effective communication

Supports

For Glyptodon Enterprise subscriptions which include support services, those services are provided at a minimum through email and/or a text-based support desk. The support desk has been verified as accessible against WCAG 2.0.

12.2.4 Accessible documentation

See WCAG 2.0 section

See information in WCAG section

Chapter 13: ICT Providing Relay or Emergency Service Access

Notes: Not Applicable. Relay / emergency service access is not provided by Guacamole or Glyptodon Enterprise.

http://www.w3.org/TR/2008/REC-WCAG20-20081211/
Revised Section 508 standards
Corrections to the ICT Final Rule
1.1.1 Non-text Content
1.2.1 Audio-only and Video-only (Prerecorded)
1.2.2 Captions (Prerecorded)
1.2.3 Audio Description or Media Alternative (Prerecorded)
1.3.1 Info and Relationships
1.3.2 Meaningful Sequence
1.3.3 Sensory Characteristics
1.4.1 Use of Color
1.4.2 Audio Control
2.1.1 Keyboard
2.1.2 No Keyboard Trap
2.2.1 Timing Adjustable
2.2.2 Pause, Stop, Hide
2.3.1 Three Flashes or Below Threshold
2.4.1 Bypass Blocks
2.4.2 Page Titled
2.4.3 Focus Order
2.4.4 Link Purpose (In Context)
3.1.1 Language of Page
3.2.1 On Focus
3.2.2 On Input
3.3.1 Error Identification
3.3.2 Labels or Instructions
4.1.1 Parsing
4.1.2 Name, Role, Value
1.2.4 Captions (Live)
1.2.5 Audio Description (Prerecorded)
1.4.3 Contrast (Minimum)
1.4.4 Resize text
1.4.5 Images of Text
2.4.5 Multiple Ways
2.4.6 Headings and Labels
2.4.7 Focus Visible
3.1.2 Language of Parts
3.2.3 Consistent Navigation
3.2.4 Consistent Identification
3.3.3 Error Suggestion
3.3.4 Error Prevention (Legal, Financial, Data)
1.2.6 Sign Language (Prerecorded)
1.2.7 Extended Audio Description (Prerecorded)
1.2.8 Media Alternative (Prerecorded)
1.2.9 Audio-only (Live)
1.4.6 Contrast Enhanced
1.4.7 Low or No Background Audio
1.4.8 Visual Presentation
1.4.9 Images of Text (No Exception)
2.1.3 Keyboard (No Exception)
2.2.3 No Timing
2.2.4 Interruptions
2.2.5 Re-authenticating
2.3.2 Three Flashes
2.4.8 Location
2.4.9 Link Purpose (Link Only)
2.4.10 Section Headings
3.1.3 Unusual Words
3.1.4 Abbreviations
3.1.5 Reading Level
3.1.6 Pronunciation
3.2.5 Change on Request
3.3.5 Help
3.3.6 Error Prevention (All)
WCAG 2.0