Skip to content

Commit 4d14707

Browse files
committed
Add SSO build instructions
1 parent 94b5e42 commit 4d14707

File tree

2 files changed

+94
-30
lines changed

2 files changed

+94
-30
lines changed

README.md

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,19 @@
1212

1313
## Introduction
1414

15-
This project allows you to easily set up a Guacamole jump-host for secure remote access.
16-
17-
This modular suite of build and management scripts makes provisioning a secure Guacamole jump server a breeze. It supports TLS reverse proxy (self-signed or Let's Encrypt), Active Directory integration, multi-factor authentication, Quick Connect & History Recording Storage UI enhancements, a custom UI theme creation tool & template (dark themed), auto database backup, email alerts, internal security hardening options, and a fail2ban policy for defence against brute force attacks. The suite also includes code for an enterprise deployment similar to [Amazon's Guacamole Bastion Cluster](http://netcubed-ami.s3-website-us-east-1.amazonaws.com/guaws/v2.3.1/cluster/).
15+
This project allows you to easily set up a Guacamole jump-host with optional TLS reverse proxy (self-signed or Let's Encrypt), Active Directory integration, multi-factor authentication, Quick Connect & History Recording Storage UI enhancements, a custom UI dark themed template, auto database backup, email alerts and internal hardening options including fail2ban for defence against brute force attacks. There are also options for enterprise deployments similar to [Amazon's Guacamole Bastion Cluster](http://netcubed-ami.s3-website-us-east-1.amazonaws.com/guaws/v2.3.1/cluster/).
1816

1917
## Automatic Installation
2018

21-
🚀 To start building your Guacamole appliance, paste the below link into a terminal & follow the prompts (**A secure build requires that you do NOT run this script as sudo or root, however the script will prompt for sudo as needed**):
19+
🚀 To start building your Guacamole appliance, paste the below link into a terminal & follow the prompts (**do NOT run as root, the script will prompt for sudo as needed**):
2220

2321
```shell
2422
wget https://raw.githubusercontent.com/itiligent/Guacamole-Install/main/1-setup.sh && chmod +x 1-setup.sh && ./1-setup.sh
2523
```
2624

2725
## Prerequisites
2826

29-
🔒 **Before diving in, make sure you have:**
30-
31-
- **A compatible OS:**
27+
🔒 **A Compatible OS:**
3228
- **Debian: 12.x or 11.x**
3329
- **Ubuntu LTS variants: 24.04, 23.04, 22.04**
3430
- **Raspbian Buster or Bullseye**
@@ -41,33 +37,33 @@ wget https://raw.githubusercontent.com/itiligent/Guacamole-Install/main/1-setup.
4137

4238
## Setup Script Menu
4339

44-
🔧 **The main 1-setup.sh script guides you through the installation options in the following steps:**
40+
🔧 **The main `1-setup.sh` script guides the installation with the following steps:**
4541

4642
1. Setup the system hostname & local DNS name (Local DNS must be consistent for TLS proxy).
4743
2. Select either a local MySQL install or use a pre-existing local or remote MySQL instance.
4844
3. Pick an authentication extension: DUO, TOTP, LDAP/Active Directory, or none.
4945
4. Select optional console features: Quick Connect & History Recorded Storage UI integrations.
5046
5. Select the Guacamole front end: Nginx reverse proxy (HTTP or HTTPS) or use the native Guacamole interface on port 8080.
5147
- If you opt to install Nginx with self-signed TLS:
52-
- New server & client browser certificates are saved to `$HOME/guac-setup/tls-certs/[date-time]`.
48+
- New server & client browser certificates are saved to `$HOME/guac-setup/tls-certs/[date-time]/`.
5349
- Optionally follow on-screen instructions for client certificate import to avoid https browser warnings.
5450

5551
## Custom Installation Instructions
5652

57-
⚙️ **To customize with the many available script options:**
53+
⚙️ **To customize the many available script options:**
5854

5955
- Exit `1-setup.sh` at the first prompt.
6056
- All configurable script options are noted at the start of `1-setup.sh` under **Silent setup options**. Re-run the edited setup script after making your changes. (Re-run script locally, do not re-run the automatic install web link).
6157
- Certain combinations of the **Silent setup options** will allow for a fully unattended install supporting mass deployment or highly customized docker builds.
6258

63-
**Other useful custom install notes:**
59+
**Other custom install notes:**
6460
- **Caution:** Re-running the auto-installer re-downloads the suite of scripts and this will overwrite all your script edits. You must therefore run 1-setup.sh LOCALLY after editing. If any other scripts are edited, their corresponding download links in the 1-setup.sh script must also be commented out.
65-
- Scripts are **automatically updated with your chosen installation settings at 1st install** to create a matched set for consistent future upgrades or feature additions. (Re-downloading from the auto install link will overwrite these updates.)
61+
- Upgrade scripts are **automatically customised with your specifc installation settings** for consistent future updates. (Re-downloading from the auto install link after install will overwrite all custom settings as above.)
6662
- Nginx reverse proxy is configured to default to at least TLS 1.2. For ancient systems, see commented sections of the `/etc/nginx/nginx.conf` file after install.
6763
- A daily MySQL backup job is automatically configured under the script owner's crontab.
68-
- **Security note:** The Quick Connect option brings some extra security implications, be aware of potential risks in your environment.
64+
- The Quick Connect option brings some extra security implications, be aware of potential risks in your environment.
6965

70-
**Post-install hardening script options available:**
66+
**Post-install manual hardening options:**
7167

7268
- `add-fail2ban.sh`: Adds a lockdown policy for Guacamole to guard against brute force password attacks.
7369
- `add-tls-guac-daemon.sh`: Wraps internal traffic between the guac server & guac application in TLS.
@@ -76,35 +72,29 @@ wget https://raw.githubusercontent.com/itiligent/Guacamole-Install/main/1-setup.
7672

7773
## Customise & Brand Your Guacamole Theme
7874

79-
🎨 **Want to give Guacamole your own personal touch? Follow the theme and branding instructions** [here](https://github.com/itiligent/Guacamole-Install/tree/main/guac-custom-theme-builder). To revert to the default theme, after install simply delete the branding.jar file from `/etc/guacamole/extensions`, clear your browser cache, then run:
80-
81-
```shell
82-
TOMCAT=$(ls /etc/ | grep tomcat) && sudo systemctl restart ${TOMCAT} && sudo systemctl restart guacd
83-
```
75+
🎨 **Follow the theme and branding instructions** [here](https://github.com/itiligent/Guacamole-Install/tree/main/guac-custom-theme-builder). To revert to the default theme, simply delete the branding.jar file from `/etc/guacamole/extensions`, clear your browser cache and restart.
8476

85-
## Managing Self-Signed TLS Certs with Nginx (the Easy Way!)
77+
## Managing Self-Signed TLS Certs with Nginx (the easy way!)
8678

8779
**To renew self-signed certificates or change the reverse proxy local DNS name/IP address:**
88-
- Re-run `4a-install-tls-self-signed-nginx.sh` to create a new certificate for Nginx (accompanying browser client certificates will also be updated). Refer to the script's comments for further command line options and always clear your browser cache after changing certificates.
80+
- Re-run `4a-install-tls-self-signed-nginx.sh` to create a new certificate for Nginx (accompanying browser client certificates will also be updated). Always clear your browser cache after changing certificates.
8981

9082
## Active Directory Integration
9183

92-
🔑 **Need help with Active Directory integration?** Check [here](https://github.com/itiligent/Guacamole-Install/blob/main/ACTIVE-DIRECTORY-HOW-TO.md).
84+
🔑 See [here](https://github.com/itiligent/Guacamole-Install/blob/main/ACTIVE-DIRECTORY-HOW-TO.md).
9385

94-
## For Radius or SS0 (Base, CAS, OpenID, SAML, Dist)
95-
🔑 See [here](https://github.com/itiligent/Guacamole-Installer/issues/66)
86+
## For SS0 Extensions (Radius, Base, CAS, OpenID, SAML, Dist)
87+
🔑 See [here](https://github.com/itiligent/Guacamole-Installer/blob/main/SSO-EXTENSIONS-HOW-TO.md)
9688

9789
## Upgrading Guacamole
9890

99-
🌐 **To upgrade Guacamole, edit `upgrade-guacamole.sh` to reflect the latest versions of Guacamole & MySQL connector/J before running.** This script will also automatically update TOTP, DUO, LDAP, Quick Connect, and History Recorded Storage extensions if present.
91+
🌐 To upgrade Guacamole, edit `upgrade-guacamole.sh` to reflect the latest versions of Guacamole & MySQL connector/J before running. This script will automatically update TOTP, DUO, LDAP, Quick Connect, and History Recorded Storage extensions if present.
10092

10193
## High Availability Deployment
10294

103-
👔 **Did you know that Guacamole can run in a load-balanced high availability farm with layered physical/virtual separation between front end, application, and database layers?**
104-
105-
- **For a separate DATABASE layer:** Use the `install-mysql-backend-only.sh` [here](https://github.com/itiligent/Guacamole-Install/tree/main/guac-enterprise-build) to install a standalone instance of the Guacamole MySQL database.
106-
- **For a separate APPLICATION layer:** Run 1-setup.sh and point new installations to your separate/remote backend database. Just say **no** to the "Install MySQL locally" option and any other local reverse proxy install options.
107-
- **For a separate WEB layer:** Use the included Nginx installer scripts to build the basis of a separate TLS front end layer, and then apply your preferred Nginx load balancing technique. There are too many load balancing strategies to list here, but as an example [HA Proxy](https://www.haproxy.org/) generally provides superior session persistence & affinity under load-balanced conditions [compared to Open Source Nginx](https://www.nginx.com/products/nginx/compare-models/).
95+
- 👔 **For a separate DATABASE layer:** Use the `install-mysql-backend-only.sh` [here](https://github.com/itiligent/Guacamole-Install/tree/main/guac-enterprise-build) to install a standalone instance of the Guacamole MySQL database.
96+
- 👔 **For a separate APPLICATION layer:** Run `1-setup.sh` and point new installations to your separate database instance. Just say **no** to the "Install MySQL locally" option and any other local reverse proxy install options.
97+
- 👔 **For a separate FRONT END layer:** Use the included Nginx installer scripts to build out a separate Nginx front end layer, and then apply your preferred TLS load balancing technique. Alternatively, AWS/Azure/GCP load balancers or [HA Proxy](https://www.haproxy.org/) may provide superior session persistence & affinity compared to [Open Source Nginx](https://www.nginx.com/products/nginx/compare-models/).
10898

10999
### Installer Script Download Manifest
110100

SSO-EXTENSIONS-HOW-TO.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
2+
3+
4+
### How to build all Guacamole client extensions:
5+
Licensing prevents some extensions being supplied in binary form, therefore these must be built from source. To achieve this, follow the exact order below on a fresh Linux system **WITHOUT JVM INSTALLED**.
6+
7+
#### 1. Obtain the specific JDK dependency
8+
Download jdk-8u411-linux-x64.tar.gz from [Oracle](https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html) (needs an Oracle sign in, select the Linux x64 compressed archive and copy it to your Linux home dir) A backup of this file is achived [here]( https://1drv.ms/u/s!Asccp3ag4RnQj-dAGYyfqwf-Rf5mTg?e=uRy1DM).
9+
10+
### 2. Install the JDK
11+
```
12+
sudo mkdir -p /usr/lib/jvm
13+
sudo tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/lib/jvm
14+
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_411/bin/java" 1
15+
sudo update-alternatives --set java /usr/lib/jvm/jdk1.8.0_411/bin/java
16+
```
17+
### 3. Clone Guacamole client source
18+
```sudo apt update && sudo apt -y install git
19+
git clone https://github.com/apache/guacamole-client.git
20+
cd guacamole-client
21+
git checkout 1.5.5 # or whatever version
22+
```
23+
### 4. Install Maven and build all the client binaries (with Radius support)
24+
```
25+
sudo apt -y install maven
26+
mvn clean package -Plgpl-extensions
27+
```
28+
Build output should show:
29+
```
30+
[INFO] Reactor Summary for guacamole-client 1.5.5:
31+
[INFO] guacamole-client ................................... SUCCESS [ 18.363 s]
32+
[INFO] guacamole-common ................................... SUCCESS [ 10.902 s]
33+
[INFO] guacamole-ext ...................................... SUCCESS [ 6.032 s]
34+
[INFO] guacamole-common-js ................................ SUCCESS [ 14.552 s]
35+
[INFO] guacamole .......................................... SUCCESS [01:04 min]
36+
[INFO] extensions ......................................... SUCCESS [ 0.132 s]
37+
[INFO] guacamole-auth-duo ................................. SUCCESS [ 5.207 s]
38+
[INFO] guacamole-auth-header .............................. SUCCESS [ 0.793 s]
39+
[INFO] guacamole-auth-jdbc ................................ SUCCESS [ 0.143 s]
40+
[INFO] guacamole-auth-jdbc-base ........................... SUCCESS [ 3.314 s]
41+
[INFO] guacamole-auth-jdbc-mysql .......................... SUCCESS [ 1.208 s]
42+
[INFO] guacamole-auth-jdbc-postgresql ..................... SUCCESS [ 1.008 s]
43+
[INFO] guacamole-auth-jdbc-sqlserver ...................... SUCCESS [ 1.004 s]
44+
[INFO] guacamole-auth-jdbc-dist ........................... SUCCESS [ 1.072 s]
45+
[INFO] guacamole-auth-json ................................ SUCCESS [ 2.648 s]
46+
[INFO] guacamole-auth-ldap ................................ SUCCESS [ 8.882 s]
47+
[INFO] guacamole-auth-quickconnect ........................ SUCCESS [ 1.704 s]
48+
[INFO] guacamole-auth-sso ................................. SUCCESS [ 0.132 s]
49+
[INFO] guacamole-auth-sso-base ............................ SUCCESS [ 0.667 s]
50+
[INFO] guacamole-auth-sso-cas ............................. SUCCESS [ 5.205 s]
51+
[INFO] guacamole-auth-sso-openid .......................... SUCCESS [ 1.237 s]
52+
[INFO] guacamole-auth-sso-saml ............................ SUCCESS [ 3.801 s]
53+
[INFO] guacamole-auth-sso-dist ............................ SUCCESS [ 1.312 s]
54+
[INFO] guacamole-auth-totp ................................ SUCCESS [ 2.780 s]
55+
[INFO] guacamole-history-recording-storage ................ SUCCESS [ 0.646 s]
56+
[INFO] guacamole-vault .................................... SUCCESS [ 0.117 s]
57+
[INFO] guacamole-vault-base ............................... SUCCESS [ 1.005 s]
58+
[INFO] guacamole-vault-ksm ................................ SUCCESS [ 5.242 s]
59+
[INFO] guacamole-vault-dist ............................... SUCCESS [ 1.050 s]
60+
[INFO] guacamole-auth-radius .............................. SUCCESS [ 11.777 s]
61+
[INFO] guacamole-example .................................. SUCCESS [ 2.080 s]
62+
[INFO] guacamole-playback-example ......................... SUCCESS [ 0.883 s]
63+
[INFO] ------------------------------------------------------------------------
64+
[INFO] BUILD SUCCESS
65+
[INFO] ------------------------------------------------------------------------
66+
[INFO] Total time: 02:59 min
67+
[INFO] Finished at: 2024-10-29T11:38:19+11:00
68+
[INFO] ------------------------------------------------------------------------
69+
```
70+
71+
### 5 Move your new extension to the Guacamole server
72+
1. As sudo, copy the new `extension.jar` file (found in `guacamole-client/extensions/guacamole-auth-radius/target/`) to `/etc/guacamole/extensions` on your Guacamole server.
73+
2. Adjust permissions on the new `extension.jar` file with `sudo chmod 664 /etc/guacamole/extensions/extension.jar`
74+
3. Restart and continue configuring the new extension as per the Guacmole official documentation [here](https://guacamole.apache.org/doc/gug/).

0 commit comments

Comments
 (0)