
Bastillion v5.2.0
Bastillion ti offre un modo pulito, basato su browser, per gestire l'accesso SSH su tutti i tuoi sistemi—come un bastion host con una dashboard amichevole.
Bastillion
Uno strumento moderno e basato sul web per console SSH e gestione delle chiavi SSH.
Bastillion ti offre un modo pulito e basato sul browser per gestire l'accesso SSH su tutti i tuoi sistemi — come un bastion host con una dashboard intuitiva. Fa due cose:
-
Terminale SSH basato sul web — una volta registrato un host, gli utenti autorizzati possono aprire una o più sessioni di terminale live direttamente dal browser, con comandi che possono essere trasmessi opzionalmente a tutte le sessioni aperte contemporaneamente (pensa ai riquadri sincronizzati di tmux, ma per una flotta di host remoti invece che riquadri locali).
-
Gestione delle chiavi SSH — Bastillion detiene la propria coppia di chiavi SSH e distribuisce/ruota le chiavi pubbliche sugli host che registri, così i singoli utenti non devono mai detenere o gestire chiavi a lunga durata verso quei sistemi.
- Accedi con autenticazione a due fattori (Authy o Google Authenticator)
- Gestisci e distribuisci chiavi pubbliche SSH, e disattivale/ruotale centralmente
- Avvia shell web multi-sessione sicure e condividi comandi tra le sessioni
- Registra ogni sessione e riproducila su richiesta — prove pronte per l'audit per qualsiasi framework di conformità
- Raggruppa i sistemi in Profili e controlla esattamente chi può raggiungere cosa
- Salva e riesegui Script Compositi su un'intera flotta in una volta sola
- Impila TLS/SSL su SSH per una protezione extra

Tre sessioni SSH reali e indipendenti — un comando, digitato una volta, eseguito ovunque.
Contenuti
- Come Funziona
- Novità
- Licenze
- Opzioni di Installazione
- Prerequisiti
- Download ed Esecuzione
- Compilazione dal Sorgente
- TLS / HTTPS
- Configurazione
- Altre Schermate
- Licenza
Come Funziona
Bastillion si posiziona tra i tuoi utenti e i sistemi che devono raggiungere, agendo come una terza parte fidata piuttosto che un semplice vault di password. Ecco l'intero ciclo di vita, dall'inizio alla fine.
1. Bastillion genera la propria coppia di chiavi SSH
Al primo avvio, prima di qualsiasi altra cosa, Bastillion genera una coppia di chiavi Ed25519 per se stesso — questa è l'unica chiave che verrà mai distribuita ai tuoi host. Viene mostrata nell'output della console ed è sempre visibile sotto Impostazioni.
2. Registra un sistema
Un amministratore aggiunge un host sotto Gestisci → Sistemi (utente, host, porta e il percorso del file
authorized_keys di quell'host). Bastillion autentica una volta con una password o
passphrase che fornisci, poi distribuisce la propria chiave pubblica nel file authorized_keys di quell'host.
Da quel momento si connette usando quella chiave — nessuna password memorizzata, mai. Lo stato passa a
Successo nel momento in cui la chiave è al suo posto.

3. Raggruppa i sistemi in Profili, assegna gli Utenti
I sistemi vengono raggruppati in Profili nominati — pensa a "Produzione," "Staging," "Livello Database." Gli utenti vengono poi collegati ai profili sotto Gestisci → Utenti, che è l'unica cosa che controlla chi può raggiungere cosa. Revoca un'assegnazione di profilo e quell'accesso sparisce immediatamente, senza bisogno di rotazione delle chiavi.

4. Apri terminali — e trasmetti a tutti contemporaneamente
Gli utenti assegnati aprono Secure Shell → Terminali, selezionano uno o più sistemi e ottengono terminali live, ridimensionabili e basati su xterm nel browser, affiancati. Digita una volta e il comando va a ogni terminale marcato come attivo — la stessa sequenza di tasti, lo stesso comando, la stessa forma di output, su quanti host hai selezionato.

5. Ruota o revoca le chiavi centralmente
Poiché ogni host si fida della stessa chiave applicativa (non una chiave per utente), disattivarla una volta sotto Gestisci Chiavi SSH revoca l'accesso ovunque immediatamente — nessun bisogno di toccare i sistemi target manualmente, nessuna caccia al server che ha quale chiave obsoleta.

6. Ogni sessione è registrata — audit e riproduzione
Tutto ciò che viene digitato e ogni byte restituito in quei terminali viene registrato automaticamente. I manager aprono Sessioni di Audit, filtrano per utente o sistema e riproducono qualsiasi sessione — affiancate per sessioni che hanno coinvolto più host, con un filtro di testo per saltare direttamente alle righe che contano. L'output scorre nella pagina mentre viene caricato, quindi anche una sessione che ha scaricato centinaia di megabyte di log viene riprodotta senza sforzo.
Se devi mostrare a un revisore chi ha eseguito cosa, dove e quando — questa è quella prova,
catturata out of the box. Praticamente ogni framework di conformità ha un requisito di audit trail per
l'accesso privilegiato da qualche parte (PCI DSS, HIPAA, SOC 2, ISO 27001 — scegli tu), e
questo soddisfa quel requisito senza un prodotto PAM commerciale. Le sessioni vengono conservate per 90 giorni di
default (deleteAuditLogAfter), e la registrazione può essere disattivata con
ENABLE_INTERNAL_AUDIT=false — vedi Audit.

🚀 Novità
- SSO SAML 2.0 — accedi tramite un IdP aziendale (Entra ID, Okta, ADFS e altri) — vedi Configurazione
- Licenze — gratuito fino a 8 sistemi, livelli a pagamento disponibili su loophole.company/pricing.html (vedi Licenze sotto)
- Audit e riproduzione delle sessioni, attivi di default — ogni sessione di terminale viene registrata e può essere riprodotta sotto Sessioni di Audit, trasmessa al browser così anche sessioni enormi si caricano all'istante
- Funziona come jar autonomo (
java -jar) con HTTPS out of the box — vedi Download ed Esecuzione - Aggiornato a Java 21, Jetty 12 e Jakarta EE 10
- Supporto completo per chiavi SSH Ed25519 (default) ed Ed448
- Strumento di migrazione v4 → v5 per portare utenti, sistemi, chiavi e log di audit da un'istanza esistente — vedi
tools/migrate - Rafforzato con un filtro CSRF e header di sicurezza a livello di app
Licenze
Bastillion funziona senza licenza fino a 8 sistemi registrati — abbastanza per provarlo davvero prima di acquistare. Una licenza alza quel limite.
- Acquista una licenza su loophole.company/pricing.html
(Starter/Team/Business — prezzata in base al numero di sistemi). Il pagamento reindirizza indietro e scarica un
file
.licautomaticamente. - Apri il file
.lice copiane il contenuto (una riga). - Impostala tramite la variabile d'ambiente
LICENSE_KEY: ```bash export LICENSE_KEY=
oppure incollalo in licenseKey in BastillionConfig.properties — la variabile
d'ambiente ha precedenza se entrambe sono impostate.
4. Riavvia Bastillion. Settings mostra il licenziatario, il limite di sistema e la scadenza, con un
avviso che inizia 90 giorni prima della scadenza.
Le licenze sono annuali e non si rinnovano automaticamente — nessuna carta salvata. Acquista di nuovo dalla stessa pagina dei prezzi quando ricevi l'avviso di scadenza.
Opzioni di Installazione
Gratuito: https://github.com/bastillion-io/Bastillion/releases
Prerequisiti
Java 21 (OpenJDK)```bash
apt-get install openjdk-21-jdk
### Authenticator (per la 2FA)
| Applicazione | Android | iOS |
|--------------|----------|-----|
| **Authy** | [Google Play](https://play.google.com/store/apps/details?id=com.authy.authy) | [iTunes](https://itunes.apple.com/us/app/authy/id494168017) |
| **Google Authenticator** | [Google Play](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) | [iTunes](https://itunes.apple.com/us/app/google-authenticator/id388497605) |
---
## Download ed Esecuzione
Scarica l'ultimo jar da [Releases](https://github.com/bastillion-io/Bastillion/releases):```bash
java -jar bastillion-<version>.jar
Accesso nel browser: https://<server-ip>:8443 — vedi TLS / HTTPS qui sotto per il
certificato autofirmato che Bastillion genera al primo avvio.
Credenziali predefinite:``` username: admin password: changeme
Esegue in primo piano; interrompi con Ctrl+C. Per l'operazione in background/daemon usa ciò che la tua
piattaforma normalmente utilizza per un processo Java a lunga esecuzione — `nohup java -jar ... &`, un'unità
systemd, un container, ecc.
---
## Compilazione dal sorgente
Installa Maven 3+:```bash
apt-get install maven
Build and run (crea un jar autonomo con un server Jetty integrato — vedi
io.bastillion.Main — e lo esegue):```bash
mvn package
java -jar target/bastillion-5.0.0-SNAPSHOT.jar
Oppure per lo sviluppo locale senza ricompattare a ogni modifica:```bash
mvn compile exec:java
Ascolta su https://localhost:8443 per impostazione predefinita, come la release scaricata sopra — vedi
TLS / HTTPS più sotto per come viene configurato quel certificato e come usarne
uno tuo al suo posto.
TLS / HTTPS
Bastillion genera il proprio certificato autofirmato al primo avvio e serve HTTPS —
non c'è nulla da configurare. I browser mostreranno un avviso una volta (è autofirmato, non emesso da una
CA); clicca per superarlo, come faresti per qualsiasi altro appliance self-hosted. Il
certificato e la sua password persistono tra i riavvii (keystore/bastillion.p12 sotto
CONFIG_DIR, password archiviata con lo stesso metodo di cifratura della password
del database).
Usa il tuo certificato firmato da una CA invece di quello autofirmato predefinito — ad es. uno gratuito da Let's Encrypt:
- Emetti il certificato con certbot (richiede un nome DNS reale
che punti a questo host, e la porta 80 raggiungibile per la sfida HTTP-01): ```bash
sudo certbot certonly --standalone -d bastillion.example.com
This writes fullchain.pem and privkey.pem to
/etc/letsencrypt/live/bastillion.example.com/.
- Convert the cert/key pair to PKCS12, the keystore format Bastillion expects: ```bash
openssl pkcs12 -export
-in /etc/letsencrypt/live/bastillion.example.com/fullchain.pem
-inkey /etc/letsencrypt/live/bastillion.example.com/privkey.pem
-out bastillion.p12 -name bastillion -passout pass:changeit - Punta Bastillion su di esso e riavvia: ```bash
export KEYSTORE_PATH=/path/to/bastillion.p12
export KEYSTORE_PASSWORD=changeit
I browser ora considerano attendibile la connessione senza alcun avviso. I certificati Let's Encrypt scadono ogni 90 giorni — certbot renew seguito dal rieseguire i passaggi 2–3 (e un riavvio) lo mantiene aggiornato; certbot renew --deploy-hook può automatizzare il processo.
Dietro un reverse proxy o un load balancer che termina già TLS (nginx, Cloud Run, ecc.) — disabilita l'HTTPS di Bastillion e lascia che serva semplice HTTP:```bash export TLS_ENABLED=false
Di default, in questa modalità viene usata la porta 8080; imposta `PORT` per cambiarla.
---
## Configurazione
Ogni impostazione di seguito può essere definita come **variabile d'ambiente**: prendi il nome della proprietà, inserisci un trattino basso prima di ogni lettera maiuscola e poi convertilo in maiuscolo: `licenseKey` → `LICENSE_KEY`, `dbUser` → `DB_USER`, `sshKeyType` → `SSH_KEY_TYPE`. Questo è il metodo consigliato per configurare Bastillion, soprattutto nei container — nessun file da montare o includere.
`BastillionConfig.properties` funziona ancora come fallback (le variabili d'ambiente hanno sempre la precedenza se entrambe sono impostate), ed è il punto in cui viene salvato qualsiasi valore che Bastillion genera al primo avvio — come una password DB casuale. Consulta `src/main/resources/BastillionConfig.properties` per l'elenco completo delle impostazioni e dei relativi valori predefiniti.
**Consolidare tutto in un'unica directory** (ad es. un singolo volume Docker montato): `CONFIG_DIR` è l'impostazione da usare. Tutto ciò che Bastillion persiste — `BastillionConfig.properties`, il keystore TLS autofirmato (`keystore/bastillion.p12`), il database H2 e la coppia di chiavi host SSH (entrambi sotto `keydb/`) e `bastillion.jceks` — risiede per impostazione predefinita in quella directory, quindi puntare `CONFIG_DIR` a un'unica posizione sposta tutto quanto:```bash
export CONFIG_DIR=/data/bastillion/
KEYSTORE_PATH e DB_CONNECTION_URL esistono ancora per puntare solo uno di questi a una
posizione diversa in modo autonomo (un certificato reale, un DB remoto) — vedi TLS / HTTPS e
la sezione "Database Settings" qui sotto — ma nessuno dei due è necessario solo per consolidare tutto
in CONFIG_DIR.
CONFIG_DIR stesso ha come valore predefinito ./config relativo alla directory di lavoro. Stai aggiornando
un'istanza esistente che non l'ha mai impostato? Le versioni precedenti memorizzavano lo stato direttamente nella
directory di lavoro invece che in ./config — Bastillion lo rileva al primo avvio con questa versione
e lo sposta automaticamente in ./config (o in CONFIG_DIR, se ora ne hai impostato uno).
Gestione delle chiavi SSH
```bash # Disable key management (append instead of overwrite) export KEY_MANAGEMENT_ENABLED=falseauthorized_keys refresh interval in minutes (no refresh for <=0)
export AUTH_KEYS_REFRESH_INTERVAL=120
Force user key generation and strong passphrases
export FORCE_USER_KEY_GENERATION=false
</details>
<details>
<summary><strong>Coppia di Chiavi SSH Personalizzata</strong></summary>
Per impostazione predefinita, Bastillion genera la propria coppia di chiavi Ed25519 al primo avvio. Per utilizzarne una propria,
il modo più semplice è tramite l'interfaccia: **Impostazioni → Sostituisci Chiave SSH dell'Applicazione**
(solo account manager) — incolla una chiave privata, una chiave pubblica e una passphrase se presente,
e l'effetto è immediato, senza bisogno di riavvio.
⚠️ Questa operazione sostituisce l'*unica* chiave di cui ogni sistema registrato si fida. È pensata come un passaggio da eseguire una sola volta
durante la configurazione iniziale di Bastillion, **prima** di registrare qualsiasi sistema — se hai già
sistemi registrati, Bastillion perde l'accesso SSH a tutti loro nell'istante in cui sostituisci
la chiave, a meno che questa chiave esatta non sia già presente in `authorized_keys` su ciascuno di essi
prima. La pagina Impostazioni richiede una casella di conferma aggiuntiva una volta che hai sistemi
registrati, proprio per questo motivo.
**Hai già sistemi registrati e devi comunque ruotare la chiave?** Pre-distribuisci la nuova chiave
tramite Bastillion stesso invece di modificare `authorized_keys` manualmente ovunque:
1. Imposta `FORCE_USER_KEY_GENERATION=false` così che **Gestisci Chiavi SSH → Aggiungi Chiave SSH** ti permetta di incollare
una chiave pubblica esistente invece di generarne solo una nuova.
2. Aggiungi lì la nuova chiave su un profilo che copra tutti i tuoi sistemi e conferma (sotto
Gestisci Chiavi SSH, o nello stato di ciascun sistema) che sia effettivamente distribuita ovunque — tieni presente
`AUTH_KEYS_REFRESH_INTERVAL`, poiché è ciò che la propaga.
3. Solo quando sei certo che sia su ogni sistema, sostituisci la chiave dell'applicazione nelle Impostazioni.
4. Riporta `FORCE_USER_KEY_GENERATION` al suo valore precedente, poi una volta confermato
che la nuova chiave dell'applicazione si è propagata a ogni sistema (di nuovo, considera
`AUTH_KEYS_REFRESH_INTERVAL`), rimuovi la chiave aggiunta al punto 2 da Gestisci Chiavi SSH —
era solo in staging lì per pre-popolare `authorized_keys` e non serve più in futuro.
Per configurazioni scriptate/senza interfaccia, la stessa operazione può essere eseguita tramite variabili d'ambiente e un
riavvio invece:```bash
# Regenerate and import SSH keys
export RESET_APPLICATION_SSH_KEY=true
# Private key
export PRIVATE_KEY=/Users/you/.ssh/id_rsa
# Public key
export PUBLIC_KEY=/Users/you/.ssh/id_rsa.pub
# Passphrase (leave blank if none)
export DEFAULT_SSH_PASSPHRASE=myPa$$w0rd
Una volta registrata, puoi rimuoverla: la coppia di chiavi è già memorizzata nel database.
SSH_KEY_TYPE (rsa, ecdsa, ed25519 o ed448) conta solo quando Bastillion
genera una nuova chiave, non quando ne importa una: il tipo di una chiave importata viene letto
dalla chiave stessa:```bash
SSH key type ('rsa', 'ecdsa', 'ed25519', or 'ed448')
Supported options:
rsa - Classic, widely compatible (configurable length, default 4096)
ecdsa - Faster, smaller keys (P-256/384/521 curves)
ed25519 - Default and recommended (≈ RSA-4096, secure and fast)
ed448 - Extra-strong (≈ RSA-8192, slower and less supported)
export SSH_KEY_TYPE=ed25519
</details>
<details>
<summary><strong>Impostazioni del Database</strong></summary>
Esempio H2 integrato:```bash
export DB_USER=bastillion
export DB_PASSWORD=p@$$w0rd!!
export DB_DRIVER=org.h2.Driver
export DB_CONNECTION_URL=jdbc:h2:file:keydb/bastillion;CIPHER=AES;
Remote H2 example:```bash export DB_CONNECTION_URL=jdbc:h2:tcp://:/~/bastillion;CIPHER=AES;
</details>
<details>
<summary><strong>Autenticazione Esterna (LDAP / JAAS)</strong></summary>
Autentica tramite un server LDAP/Active Directory esistente invece delle (o in aggiunta alle) password
locali. Per abilitarla:```bash
export JAAS_MODULE=ldap-ol
Configura jaas.conf:```
ldap-ol {
com.sun.security.auth.module.LdapLoginModule SUFFICIENT
userProvider="ldap://hostname:389/ou=example,dc=bastillion,dc=com"
userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
authzIdentity="{cn}"
useSSL=false
debug=false;
};
Per mappare i ruoli LDAP ai profili Bastillion:```
ldap-ol-with-roles {
org.eclipse.jetty.security.jaas.spi.LdapLoginModule required
debug="false"
useLdaps="false"
contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
hostname="<SERVER>"
port="389"
bindDn="<BIND-DN>"
bindPassword="<BIND-DN PASSWORD>"
authenticationMethod="simple"
forceBindingLogin="true"
userBaseDn="ou=users,dc=bastillion,dc=com"
userRdnAttribute="uid"
userIdAttribute="uid"
userPasswordAttribute="userPassword"
userObjectClass="inetOrgPerson"
roleBaseDn="ou=groups,dc=bastillion,dc=com"
roleNameAttribute="cn"
roleMemberAttribute="member"
roleObjectClass="groupOfNames";
};
Gli amministratori vengono aggiunti al primo accesso e possono ricevere profili di sistema.
Come funziona realmente il mapping dei ruoli: ogni gruppo LDAP a cui appartiene un utente (in base a roleBaseDn/
roleMemberAttribute sopra) diventa un "nome di ruolo" - il valore dell'attributo roleNameAttribute di quel gruppo
(cn nell'esempio sopra). A ogni accesso, Bastillion confronta ciascuno di
quei nomi di ruolo, mediante corrispondenza testuale esatta, con i nomi dei Profili che hai creato
in Gestisci → Profili. Una corrispondenza assegna l'utente a quel profilo; nessuna corrispondenza, nessun accesso a
quel profilo. Quindi, se un utente è membro del gruppo LDAP cn=admins,ou=groups,..., ti serve
un profilo Bastillion letteralmente chiamato admins (a parte le maiuscole - il confronto è
case-insensitive, l'ortografia no) affinché quell'appartenenza significhi qualcosa in Bastillion. Non
esiste un passaggio di mapping separato né un'interfaccia per questo - i nomi devono semplicemente coincidere.
Un utente i cui ruoli non corrispondono ad alcun profilo Bastillion viene rifiutato all'accesso (gli account Manager sono
l'unica eccezione; non sono limitati ai profili). Imposta defaultProfileForLdap su un nome di profilo
per assegnare automaticamente ogni utente LDAP a esso, garantendo che tutti possano accedere indipendentemente dalla
corrispondenza dei ruoli - utile come rete di sicurezza mentre stai ancora allineando i nomi dei profili con
i nomi dei gruppi della tua directory:```bash
export DEFAULT_PROFILE_FOR_LDAP=everyone
</details>
<details>
<summary><strong>Single Sign-On (SAML 2.0)</strong></summary>
Autentica tramite un provider di identità aziendale - Microsoft Entra ID, Okta, ADFS o qualsiasi
IdP SAML 2.0 - invece di (o in aggiunta a) password locali o LDAP. Un pulsante **Accedi con SSO**
appare nella pagina di login una volta configurato. Abilitalo:```bash
export SAML_BASE_URL=https://bastillion.example.com
export SAML_IDP_METADATA_URL=https://login.microsoftonline.com/<tenant-id>/federationmetadata/2007-06/federationmetadata.xml?appid=<app-id>
In Entra ID (o nel tuo IdP di tua scelta), registra Bastillion come Enterprise Application / Service Provider con:
- Identifier (Entity ID):
https://bastillion.example.com(oSAML_SP_ENTITY_IDse impostato - vedi sotto) - Reply URL (Assertion Consumer Service URL):
https://bastillion.example.com/saml/acs
Non hai a portata di mano l'URL dei metadati dell'IdP? Configura invece l'IdP manualmente - in quel caso tutti e tre sono richiesti insieme:```bash export SAML_IDP_ENTITY_ID=https://sts.windows.net// export SAML_IDP_SSO_URL=https://login.microsoftonline.com//saml2 export SAML_IDP_CERT=
Solo necessario se l'Entity ID registrato sul lato IdP non può corrispondere esattamente a `SAML_BASE_URL`:```bash
export SAML_SP_ENTITY_ID=https://bastillion.example.com
Per mappare i claim di gruppo/ruolo di Entra ai profili di Bastillion (vedi "Come funziona realmente il mapping dei ruoli" di seguito prima di modificare SAML_ROLE_ATTRIBUTE dal suo valore predefinito):```bash
export SAML_ROLE_ATTRIBUTE=http://schemas.microsoft.com/ws/2008/06/identity/claims/groups
export DEFAULT_PROFILE_FOR_SAML=everyone
Gli amministratori vengono aggiunti al primo accesso SSO e possono ricevere profili di sistema.
**Nome utente mostrato in Bastillion:** il SAML NameID diventa il nome utente. Entra invia
`user.userprincipalname` per impostazione predefinita, il che va bene per i membri regolari del tenant ma produce un
UPN ospite poco elegante come `alice_gmail.com#EXT#@yourtenant.onmicrosoft.com` per gli ospiti B2B (chiunque
abbia effettuato l'accesso con un'email personale o esterna aggiunta come ospite). Per un nome utente più pulito, vai su
*Single sign-on* dell'Enterprise Application → SAML → *Attributes & Claims*, modifica **Unique
User Identifier (Name ID)** e cambia il suo *Source attribute* da `user.userprincipalname`
a `user.mail`.
**Come funziona realmente il mapping dei ruoli - stesso meccanismo dell'LDAP sopra:** `SAML_ROLE_ATTRIBUTE`
indica *quale* attributo dell'asserzione trasporta i gruppi/ruoli dell'utente; qualunque *valore* quell'attributo
contenga in un dato accesso viene confrontato, **per corrispondenza testuale esatta**, con i nomi dei
Profili che hai creato sotto **Manage → Profiles**. Un valore che corrisponde a un nome di profilo
assegna l'utente a quel profilo; nient'altro dell'asserzione conta. Quindi un profilo Bastillion deve essere
denominato esattamente come la stringa che l'asserzione invia - non esiste un passaggio di mapping separato
né un'interfaccia, i nomi devono semplicemente coincidere.
Questa è la parte che più spesso crea problemi con Entra ID in particolare: per
impostazione predefinita, l'asserzione dei gruppi di Entra può emettere ogni gruppo come **Object ID** (un GUID) piuttosto che come nome
visualizzato, a meno che la configurazione del token dell'Enterprise Application non sia impostata esplicitamente per emettere i **nomi** dei gruppi. Se i tuoi profili Bastillion sono denominati
come `admins`/`everyone` ma Entra sta inviando GUID, non corrisponderà mai nulla. Controlla il valore effettivo dell'asserzione in un'asserzione reale (o
la configurazione del token di Entra per l'app) prima di presumere che il mapping sia rotto - di solito è
questo, non un problema lato Bastillion. Tre modi per risolverlo, in ordine di ciò che consigliamo:
1. **Usa Entra App Roles invece delle asserzioni di gruppo (il più pulito).** Sotto la registrazione dell'app →
App roles, definisci ruoli con esattamente i valori che desideri (`admins`, `everyone`, ...), poi
assegna utenti/gruppi a quei ruoli sotto *Users and groups* dell'Enterprise Application.
Configura il token SAML per emettere l'asserzione `roles` e punta `SAML_ROLE_ATTRIBUTE` a quell'asserzione
URI invece dell'asserzione dei gruppi. Scegli tu la stringa esatta che Entra invia - nessun problema
di GUID, ed è comunque un modello di autorizzazione più pulito che riutilizzare i gruppi AD.
2. **Cambia l'attributo sorgente dell'asserzione dei gruppi.** Enterprise Application → Single sign-on →
SAML → *Attributes & Claims* → modifica l'asserzione Groups → c'è un menu a tendina *Source attribute*,
normalmente impostato su Group ID. A seconda del tuo tenant e se i gruppi
sono solo cloud o sincronizzati da AD locale, potresti poterlo cambiare in `sAMAccountName`
o un'opzione di nome visualizzato - le scelte esatte variano in base al tenant e alla versione del portale Entra, quindi controlla
cosa viene effettivamente offerto piuttosto che presumere un'etichetta specifica.
3. **Oppure non combatterlo - denomina il profilo Bastillion in base a ciò che Entra invia effettivamente.** Se
Entra insiste nell'inviare il GUID, crea un profilo Bastillion letteralmente denominato con quel GUID.
Più brutto, ma richiede zero riconfigurazione lato Entra.
Un utente le cui asserzioni non corrispondono a nessun profilo Bastillion viene rifiutato all'accesso (gli account **Manager** sono
l'unica eccezione; non sono limitati ai profili) - esattamente come con LDAP, quindi
`DEFAULT_PROFILE_FOR_SAML` sopra vale la pena impostarlo per lo stesso motivo per cui
`DEFAULT_PROFILE_FOR_LDAP` lo è: una rete di sicurezza mentre stai ancora allineando i nomi dei profili con
i valori delle asserzioni del tuo IdP.
Il controllo della password monouso di Bastillion viene saltato per gli accessi SSO - ci si aspetta che l'IdP
applichi la propria politica MFA/Conditional Access. La registrazione iniziale dell'OTP viene comunque
offerta così gli utenti SAML hanno una credenziale di fallback locale disponibile se SSO viene mai disabilitato.
**Richieste firmate e asserzioni crittografate:** Bastillion genera il proprio certificato di firma SAML
automaticamente (self-signed, allo stesso modo in cui genera il suo certificato TLS) la
prima volta che serve, e firma ogni AuthnRequest in uscita con esso da quel momento in poi - nessuna
configurazione richiesta, e innocuo anche se il tuo IdP non lo verifica. Recupera
`https://bastillion.example.com/saml/metadata` per ottenere quel certificato in formato standard
SP metadata e consegnalo all'amministratore del tuo IdP se devono verificare le richieste firmate di Bastillion,
o se devono crittografare le asserzioni per Bastillion - la maggior parte degli IdP può importare un URL SP metadata
direttamente invece di incollare un certificato grezzo. Se preferisci usare una coppia di chiavi reale (es.
emessa da CA) invece di quella auto-generata, punta `SAML_SP_KEYSTORE_PATH`/
`SAML_SP_KEYSTORE_PASSWORD` a un keystore PKCS12 che la contiene. Per *richiedere* asserzioni
crittografate (disattivato per impostazione predefinita - attivalo solo una volta che il tuo IdP è effettivamente configurato per
crittografare per il certificato di Bastillion, o ogni accesso inizierà a fallire):```bash
export SAML_WANT_ENCRYPTED_ASSERTIONS=true
Non supportato attualmente: Single Logout (SLO) - il logout rimane solo locale e non informa l'IdP né alcun'altra applicazione a cui si è effettuato l'accesso tramite la stessa sessione SSO. SAML SSO può essere abilitato insieme a LDAP; entrambi vengono valutati in modo indipendente e ciascuno può creare nuovi utenti al primo accesso.
Auditing
L'auditing delle sessioni è abilitato per impostazione predefinita: l'output del terminale viene archiviato nel database di Bastillion
e può essere consultato in Audit Sessions (solo account manager). L'output viene trasmesso in streaming
al browser, quindi anche le sessioni con quantità molto elevate di output del terminale possono essere riprodotte.
La cronologia degli audit viene conservata per deleteAuditLogAfter giorni (90 per impostazione predefinita). Disattivala con:```bash
export ENABLE_INTERNAL_AUDIT=false
È inoltre disponibile un log di audit basato su file, disabilitato per impostazione predefinita. Abilitalo in **log4j2.xml** rimuovendo il commento da:
- `io.bastillion.manage.util.SystemAudit`
- `audit-appender`
> https://github.com/bastillion-io/Bastillion/blob/main/src/main/resources/log4j2.xml#L19-L22
</details>
<details>
<summary><strong>Migrazione da v4</strong></summary>
Stai effettuando l'upgrade da una vecchia installazione di Bastillion v4 e vuoi mantenere i tuoi utenti, sistemi, profili, script e (soprattutto) la coppia di chiavi SSH esistente dell'applicazione invece di ricominciare da zero? `tools/migrate/` contiene uno strumento di migrazione autonomo progettato esattamente per questo: esporta ogni tabella dal vecchio database H2 (decrittando le colonne crittografate a livello di applicazione con il keystore della vecchia istanza) in un file JSON, quindi lo importa in una nuova istanza v5 (ricrittando con il keystore della NUOVA istanza). Gli utenti esistenti possono accedere con le loro password attuali immediatamente dopo, senza reimpostazioni forzate.```bash
cd tools/migrate
# 1. Export the old database
./migrate.sh export /opt/Bastillion-jetty/jetty/bastillion/WEB-INF/classes/ ~/bastillion-export.json
# 2. Start the new v5 instance once against the config dir you're migrating into, then
# stop it (Ctrl+C) once it's finished booting - this creates the schema, jceks, and
# default admin user.
cd ../..
java -DCONFIG_DIR=/data/bastillion/ -jar target/bastillion-5.0.0-SNAPSHOT.jar
# 3. Import into the new database (full replace of all 12 tables)
cd tools/migrate
./migrate.sh import /data/bastillion/ ~/bastillion-export.json --yes-replace-all-data
# 4. Delete the export file - it contains decrypted secrets
rm ~/bastillion-export.json
Vedi tools/migrate/README.md per tutti i dettagli — trovare la directory di configurazione della tua vecchia installazione, cosa viene migrato esattamente e le note di sicurezza sul file di esportazione in testo semplice.
Altre Schermate
Il flusso di lavoro principale è mostrato in Come Funziona. Espandi un gruppo qui sotto per esplorare il resto dell'interfaccia.
Autenticazione — accesso e registrazione della verifica in due passaggi
Accesso
Accedi con nome utente e password, più un codice di accesso OTP opzionale.

Configurazione della Verifica in Due Passaggi
Scansiona il codice QR con Authy, Google Authenticator o un'altra app compatibile.

Gestione degli Accessi — navigazione, profili e utenti
Menu Principale
Gli strumenti disponibili sono limitati ai permessi dell'utente connesso.

Gestisci Profili
Raggruppa i sistemi in profili nominati che controllano l'accesso.

Gestisci Utenti
Crea account, scegli i ruoli utente e concedi l'accesso ai sistemi tramite i profili.

Terminali & Automazione — avvia sessioni ed esegui script salvati
Terminali
Seleziona uno o più sistemi, opzionalmente filtrati per profilo, e aprili simultaneamente.

Script Compositi
Salva uno script una volta ed eseguilo su ogni terminale selezionato.

Impostazioni — aspetto dell'account e autenticazione dell'applicazione
Impostazioni Utente
Cambia la tua password, scegli l'aspetto dell'interfaccia e del terminale e gestisci la chiave pubblica che Bastillion usa per autenticarsi sui sistemi registrati.

Licenza
Bastillion è disponibile sotto la Prosperity Public License.
Elenco completo delle dipendenze di terze parti e delle loro licenze in 3rdPartyLicenses.md.
Loophole, LLC — Sean Kavanagh