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 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.
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.
Please use the database platform's backup features, for example mysqladmin on MySQL backed installs.
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.
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.
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.licenseAfter adding the license key, restarting the service may be necessary.
sudo systemctl restart guacamole guacdInstructions 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.
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 WorkspaceInstantly access your infrastructure with zero-trust security.
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
The system architecture diagram is below.
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.
Ready to get started with Keeper Connection Manager? Proceed to the .
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.
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.
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:
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.
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.
Detailed list of system and operating system requirements for Keeper Connection Manger
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
The generalized formula for sizing Keeper Connection Manager is 1 CPU core and 2 GB of memory for every 25 concurrent users anticipated.
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.
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.
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.


Get your environment, network, and system ready and prepared.
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:
Create/Identify and establish root access to the server that will run the Keeper Connection Manager gateway
Decide if you want your KCM gateway to be public-facing (assign public IP), or internal-only (assign private IP)
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.
To check your that your linux system's entropy level is at least 1000, use the command:
$ cat /proc/sys/kernel/random/entropy_availTo 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 havegedsudo apt-get install havegedsudo yum install epel-release
sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable havegedIf Podman is installed, you must run the following two commands before installation:
sudo yum remove containerd
sudo yum remove runcKeeper 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.
For Advanced Linux Install with package installations and custom configurations, we support Red Hat Enterprise Linux 7/8 and CentOS 7.
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.
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.
Configuration of Keeper Connection Manager Authentication methods
Keeper Connection Manager supports multiple authentication mechanisms which can be enabled through installing additional packages.
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:
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.
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:
Important Note: MFA cannot be activated if the SAML authentication method is already active.
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
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.
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.
Before upgrading the Keeper Connection Manager packages, both Guacamole and guacd should be taken offline:
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.
yumOnce 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:
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 guacdsudo yum upgrade "kcm-*"sudo systemctl start guacamole guacd



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.
Keeper Connection Manager packages Guacamole’s Duo support within the kcm-guacamole-auth-duo package:
$ sudo yum install kcm-guacamole-auth-duoThe 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.
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.propertiesThe 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: 0123456789ABCDEF0123The 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: abcdefghijklmnopqrstuvwxyz0123456789ABCDGuacamole 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 guacamoleInstructions 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 .
Keeper Connection Manager packages Guacamole’s OpenId Connect support within the kcm-guacamole-auth-sso-openid package:
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.
Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:
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.
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:
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:
Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:
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:
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$ sudo yum install kcm-guacamole-auth-totpCode length
6 digits
Validity period
30 seconds
Hash algorithm
SHA-1
$ sudo systemctl restart guacamole$ sudo systemctl restart tomcatMySQL / MariaDB
PostgreSQL
SQL Server
How to manually configure Keeper Connection Manager SSL termination using Apache
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.
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.
After the above changes have been made, Apache must be reloaded to force rereading of its configuration files:
$ sudo systemctl reload httpdIf 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 1If 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.
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 tomcatKeeper Connection Manager user guide - home screen
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.
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.
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.
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.
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.
Logs out of Keeper Connection Manager completely, closing all current connections and ending the Keeper Connection Manager session.
Historical release changelog for Keeper Connection Manager
Release notes are published at Keeper's Release Notes portal.
Optional NGINX Client Certificate configuration for advanced protection
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.
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:
How to manually configure Keeper Connection Manager SSL termination using NGINX
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.
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.
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 .
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:
Created shared remote connections in Keeper Connection Manager
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.
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.
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.
Integrate Keeper Connection Manager with the Keeper Vault for protecting and retrieving session credentials
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, .
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
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.
Advanced configuration properties for Duo 2FA
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.
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.
Any random value containing at least 40 characters will suffice. To quickly grab 40 random characters from /dev/random:
Advanced configuration properties for Encrypted JSON Auth
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.
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:
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.
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:
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:
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).
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.
Data can be imported to a MySQL connection from a file on your machine, or exported and downloaded to you machine.
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.
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.
Data can be imported to a SQL Server connection from a file on your machine, or exported and downloaded to you machine.
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.
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.
Data can be imported to a PostgreSQL connection from a file on your machine, or exported and downloaded to you machine.
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.
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 HEADERlocation / {
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 tomcatuds-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.
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
$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.
$ sudo yum install mariadb-server$ sudo systemctl start mariadb
$ sudo systemctl enable mariadbSELECT 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;openssl genrsa -des3 -out ca.key 4096openssl req -new -x509 -days 365 -key ca.key -out ca.crtopenssl x509 -in ca.crt -noout -textopenssl genrsa -des3 -out client.key 4096openssl req -new -key client.key -out client.csropenssl x509 -req -days 365 -in client.csr \
-CA ca.crt -CAkey ca.key \
-set_serial 01 -out client.crtopenssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfxssl_client_certificate /etc/nginx/client_certs/ca.crt;
ssl_verify_client optional; if ($ssl_client_verify != SUCCESS) {
return 403;
}sudo systemctl restart nginxrestorecon ca.crt
















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.
guacConfigGroup object classWhen 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.ldifOnce 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=netTo 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"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.propertiesThe 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=netTo 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"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: cnChanges 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:
$ sudo systemctl restart guacamoleAs 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.
Use the following properties to change the login attempt settings
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



Keeper Connection Manager SAML configuration with Google Workspace
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:
Click Continue.
(3) Download the metadata.xml file
...and then click Continue
(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.
(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.
The Google Workspace side of the setup is complete. Note if you change anything, you need to re-download a new metadata.xml file.
If you have installed Keeper Connection Manager using the advanced linux install method, setting up SAML can be performed following the steps below.
Keeper Connection Manager packages Guacamole’s SAML support within the kcm-guacamole-auth-sso-saml package:
$ sudo yum install kcm-guacamole-auth-sso-samlGuacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the SAML installation:
$ sudo vi /etc/guacamole/guacamole.propertiesThe 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.comThe 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.comThe 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: trueGuacamole 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 guacamoleOnce 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, 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.
Keeper Connection Manager User Guide - Login Screen
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.
Users use their username to login to Keeper Connection Manager. This username is set when creating or importing users.
The user's password. Set when creating or importing the user. Passwords can also be reset by users if allowed.
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 OptionsAs 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.
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):
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
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.
user-mapping.xmlThe user-mapping.xml file consists of a main, root-level <user-mapping> element:
This <user-mapping> element may contain any number of <authorize> blocks, each describing a user and their corresponding password:
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.
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:
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 finished testing, you should prepare to move forward with adding the remaining layers normally required by a production deployment:
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.
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
Upgrading from older versions
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.
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:
(rather than 1.x)
(it may not automatically recognize the new guacamole.war as new)
If you are using a database:
If using SSL termination:
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.
.repo file within /etc/yum.repos.dEach 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:
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.
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:
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:
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:
server.xml to trust "X-Forwarded-For" from known proxiesFrom 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:
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.
Keeper Connection Manager SAML configuration with Microsoft Azure
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.
(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:
If you have installed Keeper Connection Manager using the advanced linux install method, setting up SAML can be performed following the steps below.
Keeper Connection Manager packages Guacamole’s SAML support within the kcm-guacamole-auth-sso-saml package:
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.
Guacamole will generally only load new extensions and reread guacamole.properties during the startup process. To apply the configuration changes, Guacamole must be restarted:
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:
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.
ldap-servers.ymlThe 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.
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:
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:
Using the integration between Connection Manager and Vault with static field lookups
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.
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:
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:
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.
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:
Advanced configuration properties for TOTP 2FA
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.
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.
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:
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:
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
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
$ sudo systemctl stop tomcat guacdsudo 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.sqlGRANT 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- 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\.nettotp-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.
$ sudo yum install postgresql-server$ sudo postgresql-setup initdb$ sudo systemctl start postgresql
$ sudo systemctl enable postgresqlhost all all 127.0.0.1/32 ident
host all all ::1/128 identhost all all 127.0.0.1/32 md5
host all all ::1/128 md5$ sudo systemctl restart postgresql$ 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













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/programsudo su
docker-compose up -dMY_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













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.
Keeper Connection Manager packages Guacamole’s LDAP support within the kcm-guacamole-auth-ldap package:
$ sudo yum install kcm-guacamole-auth-ldapUnlike 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.propertiesThe 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: noneBy 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.
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: uidThe 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.
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:
Prepend the username to the base DN using the “uid” attribute, producing the DN: “uid=someUser,ou=people,dc=example,dc=net”.
Attempt to bind using the DN “uid=someUser,ou=people,dc=example,dc=net” and the password provided by the user.
If the bind attempt succeeds, authentication is successful.
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_passwordWith the search DN and password configured, Guacamole will perform the following steps to authenticate a user:
Bind to the LDAP directory using the search DN and password.
Issue an LDAP query for objects within the subtree of the base DN that contain the user’s username within the defined username attribute.
If exactly one such object is found, attempt to bind using the DN of that object and the password provided by the user.
If the bind attempt succeeds, authentication is successful.
Access to connections within Guacamole may be dictated through LDAP user groups via either of two mechanisms:
Defining connections directly within LDAP using schema modifications and dictating group access using the "seeAlso" attribute.
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: cnGuacamole 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 guacamoleIf 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.
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.
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 = valueIf 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 commentThe 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.
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.
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.
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
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.
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.
Advanced configuration properties for SAML 2.0 SSO
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
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: samlPresenting 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: *, samlDynamic 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}".
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.
${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.
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.
${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}.
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".
${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.
Keeper Connection Manager SAML configuration with Okta
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.
(2) Give the Enterprise Application a name and upload the logo file linked below then click Next.
The image logo is here:
(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
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.
(5) Assign users and/or groups to the Keeper Connection Manager application, as you would normally do with any SAML connected app.
(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.
The Okta side of the setup is complete. Note if you change anything, you need to re-download a new metadata.xml file.
If you have installed Keeper Connection Manager using the advanced linux install method, setting up SAML can be performed following the steps below.
Keeper Connection Manager packages Guacamole’s SAML support within the kcm-guacamole-auth-sso-saml package:
$ sudo yum install kcm-guacamole-auth-sso-samlGuacamole’s main configuration file, /etc/guacamole/guacamole.properties, must be modified to point the SAML installation:
$ sudo vi /etc/guacamole/guacamole.propertiesThe 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.comThe 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.comThe 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: trueGuacamole 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 guacamoleOnce 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, 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.
Advanced features of the Keeper Vault integration
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.
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/passwordThe 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.
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 upgradeEdit 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/passwordThe 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:
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 -dTo 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/passwordThe 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 guacamoleIn docker installations, the parameter ADDITIONAL_GUACAMOLE_PROPERTIES_KSM can be used to move parameters from the guacamole.properties file into guacamole.properties.ksm.
Severity:
High
CVSS v3.1 base score:
8.7
CVSS v3.1 vector:
Glyptodon Enterprise 2.6 and older
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.
SAML support for Apache Guacamole is enabled.
A malicious user may assume the identity of another existing Guacamole user.
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.
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.
Keeper Connection Manager Security Advisories
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].
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
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.
None
0.0
Low
0.1 - 3.9
Medium
4.0 - 6.9
High
7.0 - 8.9
Critical
9.0 - 10.0
Severity:
Medium
CVSS v3.1 base score:
4.4
CVSS v3.1 vector:
Glyptodon Enterprise 1.15 and older
Glyptodon Enterprise 2.5 and older
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.
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.
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.
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.
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.
Integrate with multiple Keeper Vaults or multiple Shared Folders using Keeper Secrets Manager
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:
Connection Groups can be assigned to different secrets manager configurations. Any connection defined within a Connection Group will retrieve secrets from the group assignment.
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.
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.
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.
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.
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:
....
MYSQL_DATABASE: "guacamole_db"
MYSQL_USERNAME: "guacamole_user"
KSM_CONFIG: "XXX"
....
....
KSM_ALLOW_USER_CONFIG: "true"
....You must set the setting in the guacamole.properties file, or set the associate environment variable for the keeper/guacamole docker image.
guacamole.properties
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.
When creating or editing a connection, there is a field which appears called "Allow 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.
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.
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.
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:
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.
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:
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 .
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:
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:
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:
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.
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:
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”.
Advanced configuration properties for OpenID Connect Auth
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:
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:
Glyptodon Enterprise 1.12 and older
Glyptodon Enterprise 2.0
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.
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.
Resource access equivalent to that of the Guacamole administrator (the ability to control guacd).
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.
Severity:
Medium
CVSS v3.1 base score:
5.9
CVSS v3.1 vector:
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.
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.sqlCREATE 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 1Password:
guacadmin
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: openidextension-priority: *, openidkcm-libguac-client-vnc
kcm-libguac-client-rdp
kcm-libguac-client-ssh
kcm-libguac-client-telnet
kcm-libguac-client-kubernetes
kcm-libguac-client-mysql
kcm-libguac-client-postgres
kcm-libguac-client-sql-server
guacd[8]: WARNING: Support for protocol "rdp" is not installedvnc
rdp
ssh
telnet
kubernetes
mysql
postgresql
sqlserver





















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-releaseOnce 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 nginxAs 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 nginxBy 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:
/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).
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 nginxTo 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:
Let's Encrypt: A non-profit certificate authority that provides automated certificate issuance and renewal. Let's Encrypt certificates are free.
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 certbotThe 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 nginxThe 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/htmlThe 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;
}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 nginxBe 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/certbotThe certbot tool will then be automatically invoked at least once per day, renewing the certificate and reloading Nginx as needed.
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.
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.
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.
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.
The amount of time, in minutes, a Guacamole session may remain valid despite being inactive. By default, Guacamole sessions remain valid for 60 minutes.
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.
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.
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, .
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.
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.
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.
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.
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:
Provide alternative authentication methods and sources of connection/user data.
Provide event listeners that will be notified as Guacamole performs tasks such as authentication and tunnel connection.
Theme or brand the user interface through additional CSS files and static resources.
Extend KCM's JavaScript code by providing JavaScript that will be loaded automatically.
Add additional display languages, or alter the translation strings of existing languages.
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.
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 upgradeThat'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.
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.
The CSS files referenced in guac-manifest.json are appended to the application CSS when loaded, therefore they will override the CSS properties.
The Javascript files referenced in guac-manifest.json are appended to the application Javascript when loaded.
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.
If the page loads blank after applying the extension, check the logs. For example:
sudo ./kcm-setup.run logs -f guacamoleIf 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.
Retrieve Cloud Connector Secrets from KSM
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.
The feature must first be enabled using either the Docker environment variable or the guacamole properties.
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.
aws-discovery-ksm-config
false
Enable the use of Cloud Connect credentials from KSM connected vaults
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.
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.
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"
With the record created, attach the pem file.
Lastly, ensure that the new record is in a shared folder that is accessible to KCM via the Secrets Manager vault connection.
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.
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".
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.
The record is now complete, and will be picked up automatically by KCM if the feature is enabled.
Severity:
Low
CVSS v3.1 base score:
1.8
CVSS v3.1 vector:
Glyptodon Enterprise 1.12 and older
Glyptodon Enterprise 2.0
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.
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.
Non-directable access to information otherwise only available to the Guacamole administrator (information within the memory of guacd).
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.
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.
Severity:
Medium
CVSS v3.1 base score:
4.1
CVSS v3.1 vector:
Glyptodon Enterprise 1.13 and older
Glyptodon Enterprise 2.1 and older
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.
Multiple users that share access to the same connections.
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.
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.
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.
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 .
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:
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:
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:
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:
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:
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”.
Configure and view connection session recordings
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.
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.
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:
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.
The directory in which screen recording files should be created.
This parameter is required for graphical session recording to function.
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.
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.
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.
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.
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.
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.
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.
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.
Typescript session recording can be configured for each connection in the
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.
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.
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.
Recordings can be replayed using script. For example, to replay a typescript called “NAME”, you would run:
Recordings can be replayed using scriptreplay. For example, to replay a typescript called “NAME”, you would run:
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.
Files can be transferred between the local system and the remote connection through simple drag-and-drop.
Files can be transferred to the remote system through drag-and-drop. File transfer from remote system to local browser accomplished through helper script.
Files can be transferred via sftp to the remote system through drag-and-drop. The sftp endpoint is configured in the Connection Edit screen.
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.
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 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:
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 CSV data from SQL query using a new SELECT... INTO LOCAL OUTFILE command.
For example:
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
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.
Integrating Keeper Connection Manager with 3rd party software and applications
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,
allowed-languages: en, desudo mysql -u rootCREATE 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_dbmysql -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.sqlCREATE 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-mysqlsudo 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 1Password:
guacadmin
$ script -p NAME$ scriptreplay NAME.timing NAME





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";


























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.
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;
GOGuacamole 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:
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.sqlTo 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';
GOThe login must then be associated with a user specific to the Guacamole database:
CREATE USER guacamole_user;
GOTo 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;
GOKeeper 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-sqlserverOnce 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.propertiesThe 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: 1433The “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_passwordGuacamole 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 guacamoleTo 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:
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”.
Advanced configuration properties for SQL Server
Minimum password length and complexity
Minimum/maximum password age
Password reuse prevention
General connection concurrency limits
Per-user concurrency limits
Absolute concurrency limits
The TCP connection details for the SQL Server database.
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.
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.
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.
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.
Using the integration between Connection Manager and Vault with dynamic field lookups
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.
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...
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.
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
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:
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
The tokens below are applicable only to connection types that have gateway support (RDP).
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:
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
Advanced configuration properties for MySQL
Minimum password length and complexity
Minimum/maximum password age
Password reuse prevention
General connection concurrency limits
Per-user concurrency limits
Absolute concurrency limits
The TCP connection details for the MySQL / MariaDB database.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
Note that support is not provided for custom extensions with the following exceptions:
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:
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".
Copy the extension's .jar file to /etc/guacamole/extensions/.
Restart Tomcat
You may need to clear cache within browsers that have already visited your deployment.
Discover and connect to EC2 instances
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.
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
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.
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.
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.
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.
Connections can be configured using AWS EC2 tags assigned to each instance, in order to override and customize defaults and metadata.
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:organizeThe 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:recordFlag 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.
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
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.
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.
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.
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
....
MYSQL_DATABASE: "guacamole_db"
MYSQL_USERNAME: "guacamole_user"
KSM_CONFIG: "XXX"
....
....
KSM_STRIP_WINDOWS_DOMAINS: "true"
....








$ 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: YGHY7nWrvkzEzF0I2AuFfgsecrets-manager share add --app "Connection Manager Example" --secret zyMiCn8596yvMln4YwdEdAsecrets-manager client add --app "Connection Manager Example" --config-init b64 --name "KCM Device" --unlock-ip$ sudo yum install kcm-guacamole-vault-ksmsudo yum install epel-release
sudo yum install haveged
sudo systemctl start haveged
sudo systemctl enable havegedksm-config: eyJob3N0bm[...]1IzRTN2UVNTNkhsb0NZQW9nUmlPVlY5cjhvUT0ifQ==$ sudo systemctl restart guacamoleguacamole:
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








The configuration file for the Apache Guacamole proxy daemon, "guacd". This file and the guacd service are provided by the kcm-guacd package.
The configuration file for the Apache Guacamole web application. This file and the Guacamole web application are provided by the kcm package.
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.
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.
kcm-guacamole-auth-ldap
LDAP_*
kcm-guacamole-auth-duo
DUO_*
kcm-guacamole-auth-json
JSON_*
kcm-guacamole-auth-jdbc-mysql
MYSQL_*
kcm-guacamole-auth-jdbc-postgresql
POSTGRES_*
kcm-guacamole-auth-jdbc-sqlserver
SQLSERVER_*
kcm-guacamole-auth-totp
TOTP_*
kcm-guacamole-auth-saml
SAML_*
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.

{
"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-awssudo 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








Advanced configuration properties for PostgreSQL
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
The TCP connection details for the PostgreSQL database.
postgresql-hostname
localhost
The hostname of the database server.
postgresql-port
5432
The port of the PostgreSQL service running on the database server.
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.
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.
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.
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.
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.
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.
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.
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.
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..
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.
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.
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.
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
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.
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.
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.
The cursor can be moved to the beginning or the end of the current line.
This command is done with Ctrl-A or the Home key
Click Home or hold the Ctrl key and hit the a key
This command is done with Ctrl-E or the End key
Click End or hold the Ctrl key and hit the e key
See the complete list of available commands and shortcuts below.
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
Keeper Connection Manager security and encryption model
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.
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.
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.
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.
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.
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.
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:
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 .
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.
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.
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.
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).
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 .
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 .
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.
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.
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
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.
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:
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 .
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 .
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
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.
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.
Keeper has partnered with Bugcrowd to manage our vulnerability disclosure program.
Please submit reports through .
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.
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
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.
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.
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.
The cursor can be moved to the beginning or the end of the current line.
This command is done with Ctrl-A or the Home key
Click Home or hold the Ctrl key and hit the a key
This command is done with Ctrl-E or the End key
Click End or hold the Ctrl key and hit the e key
See the complete list of available commands and shortcuts below.
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
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
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.
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.
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.
The cursor can be moved to the beginning or the end of the current line.
This command is done with Ctrl-A or the Home key
Click Home or hold the Ctrl key and hit the a key
This command is done with Ctrl-E or the End key
Click End or hold the Ctrl key and hit the e key
See the complete list of available commands and shortcuts below.
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
$


Integrate Keeper Connection Manager with external data sources using Encrypted JSON Authentication
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.
The Dynamic Connections feature requires installation of the Encrypted JSON Authentication module for Keeper Connection Manager.
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-jsonConfiguring 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.propertiesAs 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: 4c0b569e4c96df157eee1b65dd0e4d41This 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/8Guacamole 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 guacamoleThe 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:
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:
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 .
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:
Generate JSON in the format described above
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.
Encrypt the result of (2) above using AES in CBC mode, with the initial vector (IV) set to all zero bytes.
Encode the encrypted result using base64.
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/tokensBe 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.
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.jsonFor 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.jsonYou 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 opensslCreating custom Docker images based on Keeper Connection Manager packages
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:
Copy a .repo file into /etc/yum.repos.d/ so the Docker image build has access to the Keeper Connection Manager packages.
Install any required packages for your use case.
Remove the .repo file so your image doesn't contain your repository credentials.
Apply any desired configuration (such as through a guacamole.properties.docker file).
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).
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:
guacamole.properties.dockerThe 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.
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:
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:
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:
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.
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.
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_PORTmysql-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" ]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:
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.
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:
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.
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.
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:
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.
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.
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.
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.
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:
Temporary access to the system(s) in question via SSH or Apache Guacamole
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.
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.
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.
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
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
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)
NGINX
1.3 or later release
Apache
2.4.5 or later release, with installed
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
OpenLDAP
Any actively-maintained release AND any release packaged with a supported OS
Microsoft Active Directory
Any release still supported by Microsoft
Duo
Web SDK
TOTP
Any authentication device supporting the TOTP standard (such as Google Authenticator)

Keeper Connection Manager user guide - launching connections
A connection can be launched by either clicking "Launch" or clicking on item from the list.
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.
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
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.
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.
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.
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:
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.
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.
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.
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:
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.
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:
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.
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.
While transferring files, a dialog on the lower right will display the status.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
































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 installedIf 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-postgresThe guacd service does not need to be restarted for installation of PostgreSQL support to take effect.
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.
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).
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.
Keeper Connection manager supports PostgreSQL authentication through username and password parameters. Both fields are required to establish a connection.
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.
The default database can be specified when establishing the connection. You can also disable the ability to perform CSV import and export of data.
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..."
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.
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 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/80Legal 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.
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.
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.
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 NAMETypescript 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.
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
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.
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 installedIf 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-serverThe guacd service does not need to be restarted for installation of SQL Server support to take effect.
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.
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).
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.
Keeper Connection manager supports SQL Server authentication through username and password parameters. Both fields are required to establish a connection.
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.
The default database can be specified when establishing the connection. You can also disable the ability to perform CSV import and export of data.
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..."
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.
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 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/80Legal 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.
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.
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.
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 NAMETypescript 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.
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
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.
Common troubleshooting and log inspection
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.
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).
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 guacamoleOnce 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.txtkcm-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 tomcatOnce 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.txtThe 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 guacdOnce 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.txtIf 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 havegedVerify 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.
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.
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 firewalldTo allow direct access to port 8080:
$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
$ sudo firewall-cmd --reloadVerify 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 tomcatIf 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 tomcatTo configure Tomcat to start automatically when the server next boots:
$ sudo systemctl enable tomcatVerify 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
$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 --reloadNote 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 1Verify 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 httpdTo start NGINX and configure it to start automatically on boot:
$ sudo systemctl start nginx
$ sudo systemctl enable nginxVerify 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 tomcatIf 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 1The 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 identIf 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 md5PostgreSQL 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.
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.
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.
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 guacdIf 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 guacdTo configure guacd to start automatically when the server next boots:
$ sudo systemctl enable guacdVerify 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.
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.
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/directoryWhen 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.
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.
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.
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).
Keeper Connection manager supports MySQL authentication through username and password parameters. Both fields are required to establish a connection.
The default database can be specified when establishing the connection. You can also disable the ability to perform CSV import and export of data.
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.
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.
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.
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:
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:
guacd[8]: WARNING: Support for protocol "mysql" is not installed$ sudo yum install kcm-libguac-client-mysqlHostname
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/80Disable 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 NAMETypescript 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.

























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 installedIf 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-kubernetesThe guacd service does not need to be restarted for installation of Kubernetes support to take effect.
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.
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.
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 .
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.
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.
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.
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.
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.
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 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/80Legal 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.
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.
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.
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 NAMETypescript 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.
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
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.
Advanced configuration properties for LDAP Authentication
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)
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 .
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.
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.
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.
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.
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:
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}
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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:
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:
guacd[8]: WARNING: Support for protocol "telnet" is not installed$ sudo yum install kcm-libguac-client-telnetHostname:
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/80Disable 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 NAMETypescript 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














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 installedIf 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-sshThe guacd service does not need to be restarted for installation of SSH support to take effect.
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.
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).
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.
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.
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.
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.
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 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/80Legal 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.
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.
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.
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.
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".
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.
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.
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 NAMETypescript 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.
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
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.
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.
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.
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 installedIf 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-vncThe guacd service does not need to be restarted for installation of VNC support to take effect.
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.
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.
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.
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.
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.
Password:
password
The password to use when attempting authentication, if any.
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.
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.
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.
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.
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:
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.
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
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.
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.
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".
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:
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.
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=1It 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=1Once 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.



















RPM installation of the Keeper Connection Manager components in Linux environments.
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
Installation of Keeper Connection Manager requires the following steps:
Installing the Guacamole web application and its backend service, "guacd".
Installing a database like MariaDB or PostgreSQL, if no such database is already deployed.
Configuring Guacamole to use your database.
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.
Before getting started, make sure that your Linux environment is fully up-to-date.
sudo yum updateTo 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 havegedSo 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"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.
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 @kcmThe 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 guacamoleCongratulations! 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.
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.
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.
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.
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.

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/).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.
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
Managing and creating connections to your infrastructure
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.
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.
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.
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.
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.
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.
The name of the connection, this is how it will appear in the connections list.
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.
Select the type of connection to create. The current available connection types are:
RDP
SSH
Kubernetes
Telnet
VNC
MySQL
PostgreSQL
Microsoft SQL Server
For more information about connection types, see the .
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.
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.
Keeper Connection Manager can use load balancing among connections in a group to give multiple concurrent users the best experience.
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.
If checked, this connection will only be used if all other connections in the group fail
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 of the proxy
Choose if the connection traffic should be encrypted. You can choose unencrypted or TLS/SSL encryption.
Details to facilitate the new RDP connection. Set network and authentication details.
Enter the hostname and port of the RDP connection
Enter the following connection fields for you RDP connection:
Username
Password
Domain
Select the security mode to use, the supported modes are:
Any
NLA (Network Level Authentication)
RDP Encryption
TLS Encryption
Hyper-V / VMConnect
Choose to turn off authentication for this RDP connection
Choose to ignore the server certificate. In most cases, this is required to establish a connection.
Fill in the following details about the remote desktop gateway:
Hostname and Port
Username
Password
Domain
Start a program on connection. Enter the location of the program to run
Set a name for the computer this connection is connecting to
Choose the type of keyboard to use with this RDP connection
Use the dropdown menus to select the timezone to use with this connection
Choose to allow multi-touch input for this RDP connection
Choose to allow access to the Administrator Console for users connecting to this RDP connection
Choose settings that affect how the new connection will look.
Choose the dimensions and resolution of the screen in pixels (pixels per inch for resolution).
Choose the color depth of the screen over the RDP connection.
Use lossless compression. Check this option for better visual quality, but it may impact performance.
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.
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.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
Choose options for connected devices
Choose if audio is supported within the console
Choose if audio from the connection should be disabled
Choose if the user's microphone can be used within the connection
Choose if users can print from the connection
If allowing printing, choose the name of the printer to use
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".
If file transfer is enabled, the name of the drive to use. For example "My Drive".
Choose if files can be downloaded to the connected drive
The path of the drive to use if enabled. A typical default Drive Path would be something like /var/lib/guacamole/drives/${GUAC_USERNAME}
If selected, Keeper Connection Manager will automatically create a drive to use with the connection
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.
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
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.
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”.
The working directory, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
The command-line arguments, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
Keeper Connection Manager can use load balancing among connections in a group to give multiple concurrent users the best experience.
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.
If checked, this connection will only be used if all other connections in the group fail
Options for recording of the screen. See the section for more information.
Enter the path to save the session recording. We recommend using the below value:
${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
Choose to exclude and touch events the user made from the recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options for file transfers to the connection using SFTP. For more information see the section.
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
The root directory of the SFTP server to display within this connection
If users upload a file from the connection, the directory that the file will go to by default
Enter the keepalive interval as a number
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new SSH connection. Set network and authentication details.
Enter the hostname and port for the SSH connection
Enter the Public Key for this SSH connection in Base64 format
The username and password (if required) for this SSH connection.
The private key used for connecting to this SSH connection
The passphrase (if any) for the private key
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a .
Enter the name of a font for the terminal to use
Select the pixel size of the font
Select how far back a user can scroll through past commands. Leave blank for unlimited.
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.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
Settings for basic environment setup
Enter a command to execute on connection start
Set the language/local for the connection, this sets the $LANG environment variable
Set the time zone for the connection. This sets the $TZ environment variable
Set an interval for a keepalive signal
The Terminal Behavior section contains options about the terminal for applicable connections.
Choose what action is sent when you click the backspace key. The options are:
Delete
Backspace
Choose the type of terminal to use. The options are:
ansi
linux
vt100
vt220
vterm
vterm-256color
Options for recording of the screen. See the section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options for file transfers to the connection using SFTP. For more information see the section.
Choose to enable SFTP file transfers
The root directory of the SFTP server to display within this connection
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new VNC connection. Set network and authentication details.
Hostname and port information for the VNC connection
Choose encryption method for connection traffic. The options are:
No Encryption
TLS/SSL Encryption
Login credentials for the VNC connection. If you would like to prompt users for the password, leave this field empty.
Choose settings that affect how the new connection will look.
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.
Choose if the red and blue channels should be swapped for this connection.
Choose to use the cursor of the local machine, or of the remote machine.
Choose the color depth of the screen over the VNC connection.
Use lossless compression. Check this option for better visual quality, but it may impact performance.
Choose which encoding to use when copying and pasting. The options are:
CP1252
ISO 8859-1
UTF-16
UTF-8
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
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.
Set the host and port to use
Options for recording of the screen. See the section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options for file transfers to the connection using SFTP. For more information see the section.
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
The root directory of the SFTP server to display within this connection
If users upload a file from the connection, the directory that the file will go to by default
Enter the keepalive interval as a number
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection
Choose to enable audio for the connection
Name of the audio server to use
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new Telnet connection. Set network and authentication details.
Hostname and port information for the Telnet connection.
Authentication credentials for the Telnet connection. To prompt users for the password, leave this field empty.
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).
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).
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).
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).
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a .
Enter the name of a font for the terminal to use
Select the pixel size of the font
Select how far back a user can scroll through past commands. Leave blank for unlimited.
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.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
The Terminal Behavior section contains options about the terminal for applicable connections.
Choose what action is sent when you click the backspace key. The options are:
Delete
Backspace
Choose the type of terminal to use. The options are:
ansi
linux
vt100
vt220
vterm
vterm-256color
Options for text recording. See the section for more details about session recording.
Enter a file path location to save text session recordings to.
Enter a name for the text session recording file
Have Keeper Connection Manager automatically create the path location for the text session recording
Options for recording of the screen. See the section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new connection. Set network and authentication details.
The hostname and port of the Kubernetes connection
Choose to use SSL/TLS encryption
Choose to ignore the server certificate
Paste the Certificate Authority Certificate into this text box
Fill in the following information about the Kubernetes container:
Namespace
Pod Name
Container Name
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.
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.
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a .
Enter the name of a font for the terminal to use
Select the pixel size of the font
Select how far back a user can scroll through past commands. Leave blank for unlimited.
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.
The Terminal Behavior section contains options about the terminal for applicable connections.
Choose what action is sent when you click the backspace key. The options are:
Delete
Backspace
Options for text recording. See the section for more details about session recording.
Enter a file path location to save text session recordings to. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter a name for the session recording file.
Choose to exclude graphics and streams that may appear on the terminal from the recording.
Choose to include keys that are clicked in the session recording. Events like ctrl+c will be recorded.
Have Keeper Connection Manager automatically create the path location for the session recording
Details to facilitate the new MySQL connection. Set network and authentication details.
Enter the hostname and port for the MySQL connection
Unix Socket
Enter the socket name if a host is not present
The username and password for this MySQL connection. To prompt users for the password, leave this field empty.
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..."
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a .
Enter the name of a font for the terminal to use.
Select the pixel size of the font.
Select how far back a user can scroll through past commands. Leave blank for unlimited.
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.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
Settings for basic environment setup
Set the language/local for the connection, this sets the $LANG environment variable
Set the time zone for the connection. This sets the $TZ environment variable
Set an interval for a keepalive signal
Options for recording of the screen. See the section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file.
Choose to exclude graphics or streams from the recording.
Choose to exclude the mouse from the screen recording.
If selected, include key events that would not otherwise be visible in the recording.
If selected, Keeper Connection Manager will automatically create a path for the recording file.
Options for file transfers to the connection using SFTP. For more information see the section.
Choose to enable SFTP file transfers.
The root directory of the SFTP server to display within this connection.
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection.
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection.
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager.
Identify the device to send the signal to by Mac Address.
Where to send the WoL signal.
How long to wait for the device to wake.
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.
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.
If you would like to establish a connection to a target server with restricted Ingres connections, check out the documentation on .








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 installedIf 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-rdpThe guacd service does not need to be restarted for installation of RDP support to take effect.
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.
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).
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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:
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).
If necessary, ignore the TLS certificate used by Hyper-V, which may be self-signed.
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.
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
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.
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.
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".














Keeper Connection Manager 508 accessibility and ergonomics support
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.
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
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.
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.
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.
(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.
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/).
(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.
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.
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.
Notes: Not Applicable
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.
Notes: This table is specific to the documentation and support services provided as part of Glyptodon Enterprise. It does not apply to Apache Guacamole.
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.
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.
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.
Notes: Not Applicable. Guacamole and Glyptodon Enterprise do not provide two-way voice communication.
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.
Notes: Not Applicable. Guacamole and Glyptodon Enterprise are purely software/services. No hardware is provided.
Notes: See information in the WCAG 2.0 section.
Notes: Not Applicable. All documentation provided via Glyptodon Enterprise is web-based.
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.
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
Notes: Not Applicable. Relay / emergency service access is not provided by Guacamole or Glyptodon Enterprise.
