Torna agli aggiornamenti
New releaseAug 20, 2026

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.

Condividi

Build CodeQL License Java Built with Claude Code Website

Bastillion

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:

  1. 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).

  2. 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

Più terminali che trasmettono lo stesso comando a tre host contemporaneamente

Tre sessioni SSH reali e indipendenti — un comando, digitato una volta, eseguito ovunque.


Contenuti


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.

Gestisci Sistemi — tre host registrati, tutti con stato Successo

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.

Assegnazione di tre sistemi a un profilo di Produzione

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.

Un comando di health-check trasmesso a tre terminali simultaneamente, stessa forma di output su tutti e tre

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.

Gestisci chiavi SSH con profilo, impronta, data di creazione e azioni di eliminazione

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.

Sessioni di audit elencate con filtri per utente e sistema


🚀 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.

  1. 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 .lic automaticamente.
  2. Apri il file .lic e copiane il contenuto (una riga).
  3. 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:

  1. 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/.

  1. 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
  2. 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=false

authorized_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 (o SAML_SP_ENTITY_ID se 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.

Schermata di accesso Bastillion

Configurazione della Verifica in Due Passaggi

Scansiona il codice QR con Authy, Google Authenticator o un'altra app compatibile.

Schermata di configurazione della verifica in due passaggi Bastillion

Gestione degli Accessi — navigazione, profili e utenti

Gli strumenti disponibili sono limitati ai permessi dell'utente connesso.

Menu principale Bastillion

Gestisci Profili

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

Schermata di gestione dei profili Bastillion

Gestisci Utenti

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

Schermata di gestione degli utenti Bastillion

Terminali & Automazione — avvia sessioni ed esegui script salvati

Terminali

Seleziona uno o più sistemi, opzionalmente filtrati per profilo, e aprili simultaneamente.

Schermata di selezione dei terminali Bastillion

Script Compositi

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

Schermata di gestione degli script compositi Bastillion

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.

Schermata delle impostazioni utente Bastillion


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

[email protected]

Categorie