Documentation · v0.13.0
Documentation de Gná
Installer, configurer et utiliser le bastion d'accès SSH, RDP et VNC.
Présentation #
Gná est un bastion d'accès multi-protocole. Les utilisateurs ouvrent leurs terminaux SSH et leurs bureaux RDP et VNC depuis le navigateur ou depuis l'application Gná (Windows, Linux, Android). Ils ne se connectent jamais directement aux machines.
- Le navigateur ne parle qu'à Gná. C'est Gná qui ouvre les connexions vers les cibles et relaie le flux par WebSocket.
- Les identifiants des cibles (mots de passe, clés privées) sont chiffrés en base et ne sont jamais envoyés au navigateur.
- Chaque accès passe par une MFA, est contrôlé par des droits, inscrit dans un journal d'audit et, par défaut, enregistré.
Gná tourne en natif : un binaire, un service systemd durci, un utilisateur système dédié et PostgreSQL en local. Aucun conteneur.
Installation #
Systèmes pris en charge : Debian 13 et Ubuntu 24.04 (x86-64).
Avec le paquet .deb recommandé
# installe aussi PostgreSQL si besoin
sudo apt install ./gna_0.13.0_amd64.deb
sudo -u gna gna user add admin --admin
Le paquet crée l'utilisateur gna, la base et le service, puis démarre le service. Il crée aussi /etc/gna/gna.env, avec une clé maître neuve générée une seule fois. Une installation faite auparavant avec install.sh est reprise automatiquement.
Pour construire le paquet vous-même (Go 1.23+, make, dpkg-deb) : make deb. Le fichier est créé dans dist/.
Depuis les sources
# récupère les dépendances et compile bin/gna
make build
# PostgreSQL si besoin, utilisateur gna, base, config, service
sudo ./deploy/install.sh
sudo -u gna gna user add admin --admin
make build compile la passerelle RDP si Rust ≥ 1.89 est installé (rustup). Sinon, il utilise le binaire précompilé fourni dans deploy/prebuilt/. install.sh peut être relancé sans risque : il ne touche ni à une configuration ni à une base existantes.
Ce qui est installé
| Élément | Emplacement |
|---|---|
| Binaires | /usr/bin/gna et /usr/bin/gna-rdp (paquet), ou /usr/local/bin/ (install.sh) |
| Configuration | /etc/gna/gna.env, droits root:gna 640. Contient la clé maître. |
| Service | gna.service : utilisateur gna, sans privilèges, système en lecture seule |
| Certificat HTTPS | /var/lib/gna/tls/, créé au premier démarrage |
| Enregistrements | /var/lib/gna/recordings (chiffrés) |
| Base | PostgreSQL local, base gna, socket Unix sans mot de passe (authentification peer) |
GNA_MASTER_KEY chiffre les secrets des cibles, les secrets TOTP et les enregistrements. Sans elle, ils sont perdus.
Vérifier un téléchargement #
Avant d'installer un paquet, vérifiez qu'il n'a pas été altéré. Téléchargez SHA256SUMS dans le même dossier que les paquets, puis :
sha256sum -c --ignore-missing SHA256SUMS
# attendu : gna_0.13.0_amd64.deb: OK
| Fichier | SHA-256 |
|---|---|
gna_0.13.0_amd64.deb | 1f572d5565744a33f94bdf69a8829248523a59d6bed12c3cb615a21be51d07ed |
gna-app_0.13.0_amd64.deb | 6593b0f372e8cb36c9c05694131f4ed55606acffa7c2f7732e39eef68175c42c |
Premier démarrage #
- Sur le serveur, notez l'empreinte du certificat :
sudo -u gna gna tls info. - Ouvrez
https://<ip-du-serveur>:8443. Le navigateur affiche un avertissement, car le certificat est auto-signé. Comparez l'empreinte avec celle notée, puis acceptez. - Connectez-vous avec le compte admin créé à l'installation.
- Scannez le QR code avec une application TOTP (Aegis, 2FAS, Bitwarden, Google Authenticator…), puis saisissez le code pour confirmer.
Commandes utiles :
systemctl status gna
journalctl -u gna -f
# après une modification de /etc/gna/gna.env
sudo systemctl restart gna
Réseau et HTTPS #
Par défaut, Gná écoute sur toutes les interfaces (0.0.0.0:8443) en HTTPS uniquement. Le certificat auto-signé couvre le nom de la machine et ses adresses IP. Gná refuse d'écouter en HTTP en clair ailleurs que sur 127.0.0.1 : les mots de passe et les codes TOTP circuleraient en clair.
- L'adresse IP du serveur a changé :
sudo -u gna gna tls regen && sudo systemctl restart gna - Vrai certificat (Let's Encrypt, PKI interne) :
GNA_TLS_SELF_SIGNED=false, puis renseignezGNA_TLS_CERTetGNA_TLS_KEY. Les fichiers doivent être lisibles par l'utilisateurgna. - Accès réservé à la machine elle-même :
GNA_LISTEN=127.0.0.1:8443 - Derrière un reverse proxy : Gná sur
127.0.0.1etGNA_TRUST_PROXY=true, pour lire l'IP du client dansX-Forwarded-For.
Configuration #
Gná lit /etc/gna/gna.env, ou le fichier indiqué par GNA_CONFIG. Les variables d'environnement ont priorité sur le fichier. Gná refuse de démarrer si ce fichier est lisible par tous les utilisateurs.
Général
| Variable | Défaut | Rôle |
|---|---|---|
GNA_DATABASE_URL | obligatoire | URL PostgreSQL |
GNA_MASTER_KEY | obligatoire | Clé de chiffrement, 32 octets en base64 |
GNA_LISTEN | :8080 | Adresse d'écoute (0.0.0.0:8443 dans la config installée) |
GNA_TLS_SELF_SIGNED | false | HTTPS avec certificat auto-signé (true dans la config installée) |
GNA_TLS_CERT / GNA_TLS_KEY | — | HTTPS avec un certificat fourni (PEM) |
GNA_DATA_DIR | /var/lib/gna | Données locales |
GNA_ALLOW_PLAIN_HTTP | false | HTTP en clair hors localhost (déconseillé) |
GNA_COOKIE_SECURE | true | Cookie réservé au HTTPS |
GNA_TRUST_PROXY | false | Lire l'IP client dans X-Forwarded-For |
Sessions et authentification
| Variable | Défaut | Rôle |
|---|---|---|
GNA_SESSION_TTL | 12h | Durée maximale d'une session |
GNA_IDLE_TIMEOUT | 30m | Déconnexion après inactivité |
GNA_MAX_FAILURES | 5 | Échecs avant verrouillage du compte |
GNA_LOCK_DURATION | 15m | Durée du verrouillage |
GNA_ISSUER | Gná | Nom affiché dans l'application TOTP |
Enregistrement
| Variable | Défaut | Rôle |
|---|---|---|
GNA_RECORD_SESSIONS | true | Enregistrer les sessions SSH |
GNA_RECORD_VNC | = GNA_RECORD_SESSIONS | Enregistrer les sessions VNC et RDP |
GNA_RECORD_INPUT | false | Enregistrer aussi les frappes clavier (inclut les mots de passe tapés) |
GNA_RECORDING_RETENTION_DAYS | 90 | Durée de conservation (0 = illimitée) |
Bureaux à distance
| Variable | Défaut | Rôle |
|---|---|---|
GNA_RDP_BRIDGE | à côté de gna, puis /usr/local/bin/gna-rdp | Chemin de la passerelle RDP |
GNA_CLIPBOARD | true | Copier-coller dans les bureaux à distance |
GNA_FILE_TRANSFER | true | Transfert de fichiers (SFTP et lecteur RDP « Gna ») |
GNA_TRANSFER_MAX_MB | 1024 | Taille maximale du dossier de transfert d'une session RDP |
Commandes #
Les commandes d'administration se lancent sous l'utilisateur gna, pour pouvoir lire la configuration : sudo -u gna gna user list.
| Commande | Rôle |
|---|---|
gna serve | Démarre le serveur (applique les migrations) |
gna migrate | Applique les migrations seules |
gna version | Affiche la version installée |
gna keygen | Génère une clé maître |
gna tls info | Empreinte, noms couverts et expiration du certificat |
gna tls regen | Régénère le certificat auto-signé |
gna user add <nom> [--admin] | Crée un utilisateur |
gna user list | Liste les utilisateurs (admin, MFA, état) |
gna user passwd <nom> | Change le mot de passe et ferme ses sessions |
gna user reset-mfa <nom> | Réinitialise la MFA (téléphone perdu) |
gna user disable / enable <nom> | Désactive ou réactive un compte |
gna user unlock <nom> | Lève un verrouillage |
Le mot de passe est demandé sans écho, ou lu sur l'entrée standard : echo "…" | sudo -u gna gna user add bob.
Utilisateurs et droits #
- Onglet Utilisateurs : création avec mot de passe initial, droits admin, désactivation, déverrouillage, nouveau mot de passe, réinitialisation de la MFA, suppression.
- Groupes d'utilisateurs, et accès aux cibles accordé par groupe ou par utilisateur, dans la section « Accès » de chaque cible.
- Les administrateurs ont accès à tout. Un utilisateur ne voit que ses cibles : une cible non attribuée répond « introuvable ».
- Retrait immédiat : si l'accès est retiré ou le compte désactivé, un terminal ou un bureau ouvert se ferme dans les 30 secondes.
- Mon compte : chacun change son mot de passe. Les sessions ouvertes sur ses autres appareils sont alors fermées.
- Garde-fous : un admin ne peut ni se rétrograder, ni se désactiver, ni se supprimer. Il reste toujours au moins un admin actif.
Ajouter une cible SSH #
- Onglet Cibles → Ajouter une cible (compte admin).
- Renseignez l'adresse, le port et l'identifiant, puis le mot de passe ou la clé privée.
- Cliquez sur Récupérer l'empreinte, et comparez-la avec celle de la cible :
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub - Enregistrez, puis Ouvrir le terminal.
Si la clé d'hôte change plus tard, la connexion est bloquée (protection contre l'interception). Si le changement est légitime (réinstallation de la cible), modifiez la cible et récupérez à nouveau l'empreinte.
Ajouter une cible VNC #
Exemple sur une cible Debian avec XFCE et TigerVNC :
sudo apt install tigervnc-standalone-server dbus-x11
# 8 caractères max ; « n » pour le mot de passe view-only
vncpasswd
printf '#!/bin/sh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\nexec dbus-launch --exit-with-session startxfce4\n' > ~/.config/tigervnc/xstartup
chmod +x ~/.config/tigervnc/xstartup
# écran :1 = port 5901
tigervncserver -xstartup ~/.config/tigervnc/xstartup -localhost no :1
Dans Gná : Ajouter une cible → protocole VNC, adresse, port (5901 pour l'écran :1), mot de passe VNC. Gná s'authentifie lui-même auprès de la cible : le mot de passe ne quitte jamais le serveur.
Ajouter une cible RDP #
Gná lance la passerelle gna-rdp (fondée sur IronRDP), qui convertit l'écran RDP en flux VNC. Les identifiants lui sont transmis par un tube : le navigateur ne les voit jamais. Gná gère l'authentification NLA (exigée par Windows par défaut) et le TLS seul (xrdp).
Cible Windows
- Activez le Bureau à distance : Paramètres → Système → Bureau à distance.
- Autorisez le compte, et n'ouvrez le port 3389 qu'au serveur Gná.
- Pour comparer l'empreinte du certificat, lancez dans PowerShell en administrateur :
$c=(Get-ChildItem 'Cert:\LocalMachine\Remote Desktop')[0]
[BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($c.RawData)) -replace '-',':'
Cible Linux avec xrdp
sudo apt install xrdp
# empreinte du certificat
openssl x509 -in /etc/xrdp/cert.pem -noout -fingerprint -sha256
Choisissez le clavier « Français (Linux / xrdp) ». Gná est compatible avec xrdp 0.10 (Debian 13). Pour le lecteur partagé, l'utilisateur doit pouvoir utiliser FUSE, ce qui est le cas par défaut.
Dans Gná
- Protocole RDP, adresse, port 3389, identifiants, puis Récupérer l'empreinte. Si le certificat change ensuite, la connexion est bloquée.
- Disposition du clavier : Français Windows, Français Linux/xrdp ou Anglais US. Les touches mortes (ê, ë, ñ…) sont gérées.
- Limite : pas de son.
Machines, dossiers et favoris #
- Dossiers : dans le formulaire d'une cible, choisissez le dossier dans la liste déroulante des dossiers existants, ou « Nouveau dossier… ».
- La liste des machines est groupée par dossier. Les groupes sont repliables et leur état est mémorisé.
- Recherche par nom, adresse, dossier ou description.
- Favoris : l'étoile d'une carte place la machine dans le groupe « ★ Favoris », en tête de liste. Les favoris sont propres à chaque utilisateur.
Depuis la v0.12.0, les anciennes étiquettes sont fusionnées dans les dossiers : une machine sans dossier a pris sa première étiquette.
Sessions et onglets #
- Plusieurs sessions SSH, VNC et RDP peuvent être ouvertes en même temps, chacune dans son onglet. La même machine peut être ouverte plusieurs fois (« serveur 2 »).
- Les onglets en arrière-plan restent connectés : le terminal continue de recevoir, le bureau garde sa taille.
- Machines ramène à la liste pour ouvrir une autre session sans fermer les autres. Depuis la liste, Sessions ouvertes ramène aux onglets.
- Chaque onglet a sa barre d'outils et ses panneaux (Fichiers, touches), avec son propre dossier SFTP.
- Un point de couleur indique l'état (connexion, connecté, déconnecté), et un ● rouge que la session est enregistrée. ✕ ferme un onglet ; la déconnexion de Gná ferme tout.
Mosaïque #
Dès 2 sessions, le bouton Mosaïque de la barre des sessions affiche toutes les sessions ouvertes en même temps, en grille (2, 4, 9… volets).
- Un clic sur un volet en fait la session active (barre d'outils, panneaux).
- Les bureaux VNC et RDP sont mis à l'échelle sans changer leur résolution. Ils la retrouvent en revenant aux onglets.
- Le choix est mémorisé dans le navigateur.
- En mosaïque, les boutons Fichiers et le glisser-déposer sont désactivés, pour ne jamais envoyer un fichier vers la mauvaise machine.
Saisie synchronisée #
Dès 2 terminaux SSH, tout ce qui est tapé ou collé dans un terminal part dans tous les terminaux cochés synchro. C'est pratique pour lancer la même commande sur plusieurs serveurs.
- Les terminaux concernés ont une bordure orange, et le bouton affiche « Synchro active (n) ».
- Chaque session reste enregistrée et journalisée séparément.
Bibliothèque de commandes #
Le menu Commandes d'un terminal SSH regroupe vos commandes enregistrées. Chaque utilisateur a sa propre bibliothèque.
- Un clic envoie la commande dans le terminal actif, ou dans tous les terminaux synchronisés si la saisie synchronisée est active. Le menu indique ce cas.
- L'option exécuter directement ajoute Entrée. Les commandes sur plusieurs lignes sont validées ligne par ligne.
- L'ajout, la modification et la suppression se font depuis ce même menu.
Espaces de travail #
Un espace de travail est un ensemble de machines qui se rouvre d'un clic, avec sa disposition (onglets ou mosaïque) et sa saisie synchronisée.
- Nouvel espace de travail ou Modifier : choisissez le nom, les machines, la disposition et la synchro, sans ouvrir de connexion.
- Enregistrer l'espace, dans l'écran des sessions, enregistre les sessions ouvertes telles quelles.
Transfert de fichiers #
SSH (SFTP)
Le bouton Fichiers du terminal permet de parcourir les dossiers de la cible, d'envoyer un fichier (bouton ou glisser-déposer sur le terminal), de télécharger et de créer un dossier. Tout passe par la connexion SSH du terminal, avec les droits du compte de la cible. Rien n'est stocké sur le serveur Gná.
RDP (lecteur partagé)
Un lecteur partagé « Gna » apparaît sur la machine distante : Ce PC → Gna sur GNA sous Windows, ~/thinclient_drives/Gna avec xrdp. Depuis le panneau Fichiers, vous pouvez envoyer un fichier (bouton ou glisser-déposer sur le bureau) et télécharger ce que la machine distante y dépose.
- Un dossier par session, supprimé à la fin, de taille plafonnée (
GNA_TRANSFER_MAX_MB). - Le lecteur n'expose que le dossier de la session. Les chemins
.., les liens symboliques et les flux NTFS sont refusés. Les fichiers téléchargés sont servis en pièce jointe.
Tous les transferts sont journalisés (file.upload, file.download, file.mkdir). GNA_FILE_TRANSFER=false les désactive pour tout le monde.
Outils des bureaux à distance #
- Copier-coller dans les deux sens, en UTF-8 (accents, €, emoji…). Ctrl+V ou Maj+Inser sur le bureau distant colle le presse-papiers du poste, sans autorisation à donner. En VNC, cela dépend du serveur VNC.
- Redimensionnement automatique : le bureau prend la taille de la fenêtre, sans reconnexion (RDP : Windows 8.1 et plus récent, xrdp 0.10 ; VNC : TigerVNC et la plupart des serveurs récents). Sinon, l'image est mise à l'échelle.
- Touches : Ctrl+Alt+Suppr, touche Windows, Alt+Tab, Ctrl+Échap, Windows+L, Impr. écran.
- Plein écran et reconnexion.
GNA_CLIPBOARD=false désactive le copier-coller pour tout le monde.
Enregistrements #
- SSH : tout ce qui s'affiche est enregistré et horodaté, au format asciicast. L'utilisateur voit un indicateur REC.
- VNC et RDP : le flux d'écran est enregistré, de quelques Mo à quelques dizaines de Mo par heure selon l'activité.
- Chiffrement : AES-256-GCM par blocs, avec la clé maître. Un bloc modifié, déplacé ou supprimé est détecté. Une session interrompue brutalement reste lisible jusqu'aux dernières secondes.
- Relecture (admins, onglet Sessions) : lecture, pause, vitesse de ×1 à ×16, déplacement dans le temps, export
.cast. Pour VNC et RDP, l'option « Sauter les inactivités » raccourcit les moments où l'écran ne bouge pas. - Recherche d'un texte affiché, dans toutes les sessions SSH récentes ou dans une seule. Un clic sur un résultat saute au moment correspondant.
- Les frappes clavier ne sont pas enregistrées par défaut, car elles contiendraient les mots de passe tapés (
sudo…). - Conservation de 90 jours par défaut, puis suppression automatique, tracée dans le journal. Chaque relecture et chaque recherche est aussi tracée.
Thèmes #
Dans Mon compte → Thème : Système (suit le réglage clair/sombre de l'ordinateur), Sombre, Clair, Nord, Dracula, Gruvbox ou Solarized.
- Le thème s'applique tout de suite, aux terminaux et aux bureaux à distance compris. Les couleurs ANSI sont adaptées à chaque thème.
- Il est enregistré dans le compte : il suit l'utilisateur d'un navigateur ou d'un appareil à l'autre.
Application Gná #
L'application (Windows, Linux, Android) affiche l'interface de votre serveur Gná dans sa propre fenêtre, avec le certificat du serveur épinglé.
Les moteurs web intégrés aux applications refusent les certificats auto-signés. L'application démarre donc un relais local sur 127.0.0.1, inaccessible depuis le réseau. La fenêtre charge l'interface à travers lui, et le relais transmet tout au serveur en HTTPS.
127.0.0.1HTTPS épingléServeur Gná
- Premier lancement : saisissez l'adresse du serveur (ex.
10.0.1.20, port 8443 par défaut). Comparez l'empreinte affichée avecsudo -u gna gna tls info, puis validez. - Lancements suivants : connexion directe au serveur mémorisé.
- Certificat modifié : la connexion est bloquée et les deux empreintes s'affichent. La nouvelle n'est acceptée qu'après confirmation explicite.
- Le relais refuse toute requête qui ne vise pas exactement son adresse (protection contre le DNS rebinding). Les pages de Gná n'ont aucun accès aux fonctions de l'application.
Application Linux
- Le paquet s'appelle
gna-app, pour ne pas le confondre avec le paquet serveurgna:sudo apt install ./gna-app_0.13.0_amd64.deb - Les fichiers téléchargés en SFTP et en RDP arrivent dans le dossier Téléchargements, sans écraser un fichier existant, avec un message de confirmation.
- Le relais local utilise un port stable : les réglages de la page sont conservés d'un lancement à l'autre.
Compiler l'application #
Linux, sur la machine
sudo apt install libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev libssl-dev
# Rust : https://rustup.rs — Node.js 20+
cd app
npm ci
npx tauri build --bundles deb,appimage
Le résultat est dans src-tauri/target/release/bundle/.
Windows, Linux et Android avec GitHub Actions
- Poussez le projet sur un dépôt GitHub.
- Onglet Actions → Application Gná → Run workflow, ou poussez une étiquette
app-v*(ex.app-v0.13.0). - Récupérez les fichiers dans les Artifacts de l'exécution :
.deb/.AppImage,.exe/.msi,.apk.
Pour un APK Android signé avec votre propre clé (sinon, l'APK est signé avec une clé de test) :
keytool -genkey -v -keystore gna.jks -alias gna -keyalg RSA -keysize 4096 -validity 10000
# à coller dans le secret ANDROID_KEYSTORE_B64
base64 -w0 gna.jks
Secrets à créer (Settings → Secrets and variables → Actions) : ANDROID_KEYSTORE_B64, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS. Sur Android, le HTTP en clair n'est autorisé que vers 127.0.0.1.
Bonnes pratiques de sécurité #
Gná est prudent par défaut, mais la sécurité d'un bastion dépend aussi de son déploiement. Voici la checklist à suivre en production.
Installation et mises à jour
- Vérifiez l'empreinte SHA-256 de chaque paquet avant de l'installer.
- Installez les nouvelles versions de Gná dès leur sortie (voir Mise à jour), et gardez le système du serveur à jour (
apt upgrade). - Réservez le serveur à Gná : un bastion ne doit pas héberger d'autres services exposés.
Réseau
- Toujours en HTTPS : certificat auto-signé vérifié par son empreinte, vrai certificat ou reverse proxy local. Ne mettez jamais
GNA_ALLOW_PLAIN_HTTP=true. - N'ouvrez le port 8443 qu'aux réseaux qui en ont besoin (pare-feu, VPN).
- Limitez les ports des cibles (22, 3389, 5901…) à l'adresse IP de Gná : le bastion doit être le seul passage.
- Le flux VNC n'est pas chiffré entre Gná et la cible : gardez-le sur un réseau de confiance.
- N'exposez pas PostgreSQL : par défaut, il n'écoute que sur la machine.
Secrets et sauvegardes
- Laissez
/etc/gna/gna.envenroot:gna 640. Gná refuse de démarrer s'il est lisible par tous. - Sauvegardez la base,
/var/lib/gna/recordingset la clé maître séparément. Gardez la clé maître hors ligne : une sauvegarde qui contient à la fois les données et la clé donne accès à tous les secrets. - Testez la restauration de vos sauvegardes.
Comptes et droits
- Un compte nominatif par personne, jamais de compte partagé : le journal d'audit doit dire qui a fait quoi.
- Le moins de privilèges possible : peu d'administrateurs, et des accès aux cibles accordés par groupe, uniquement là où c'est nécessaire.
- Sur les cibles, utilisez des comptes dédiés et préférez les clés SSH aux mots de passe.
- Désactivez un compte dès le départ d'une personne (
gna user disable) : ses sessions ouvertes se ferment dans les 30 secondes. - Téléphone perdu :
gna user reset-mfa, puis nouvel enrôlement.
Empreintes
- Comparez toujours les empreintes SSH, RDP et du certificat HTTPS avec celles relevées sur la machine elle-même, jamais avec celles qu'affiche le réseau.
- Si Gná bloque une connexion pour cause d'empreinte modifiée, cherchez-en la raison avant de l'accepter.
Traçabilité
- Laissez l'enregistrement activé (
GNA_RECORD_SESSIONS,GNA_RECORD_VNC), et surveillez l'espace disque : un disque plein bloque les connexions. - Laissez
GNA_RECORD_INPUT=false, sauf obligation : les frappes contiendraient les mots de passe tapés. - Choisissez une durée de conservation (
GNA_RECORDING_RETENTION_DAYS) adaptée à vos obligations, notamment au RGPD : les enregistrements sont des données personnelles, et les utilisateurs doivent être informés. - Consultez régulièrement le journal d'audit : accès refusés, verrouillages, empreintes modifiées.
Réduire la surface d'attaque
- Si vous n'en avez pas besoin, coupez le copier-coller (
GNA_CLIPBOARD=false) et le transfert de fichiers (GNA_FILE_TRANSFER=false). Ce sont deux voies de sortie possibles pour des données. - Gardez des durées de session courtes (
GNA_SESSION_TTL,GNA_IDLE_TIMEOUT).
Mise à jour et désinstallation #
- Avec le paquet : relancez
sudo apt install ./gna_<version>_amd64.debavec le nouveau fichier. La configuration et les données sont conservées, et le service redémarre. - Depuis les sources :
make build && sudo ./deploy/install.sh, oumake debpuis installez le paquet dedist/. - Désinstallation :
sudo apt remove gna. Les données restent ;purgeindique comment tout effacer.
API #
La colonne « Étape » indique l'état de session requis : enroll (MFA à enrôler), mfa (code TOTP attendu) ou full (connecté).
| Méthode | Route | Étape |
|---|---|---|
POST | /api/auth/login | aucune |
POST | /api/auth/totp/enroll | enroll |
POST | /api/auth/totp/enroll/confirm | enroll |
POST | /api/auth/totp/verify | mfa |
POST | /api/auth/logout | toute session |
GET | /api/me | toute session |
POST | /api/me/password | full |
GET | /api/targets | full |
GET (WS) | /api/targets/{id}/ssh?cols=&rows= | full |
GET (WS) | /api/targets/{id}/vnc | full |
POST | /api/admin/targets | full + admin |
PUT / DELETE | /api/admin/targets/{id} | full + admin |
POST | /api/admin/targets/scan | full + admin |
GET | /api/admin/access-sessions | full + admin |
GET | /api/admin/audit?limit=100 | full + admin |
GET / POST | /api/admin/users | full + admin |
POST | /api/admin/users/{id}/{promote,demote,disable,enable,unlock,reset-mfa,password,delete} | full + admin |
GET / POST | /api/admin/groups | full + admin |
PUT / DELETE | /api/admin/groups/{id} | full + admin |
GET | /api/admin/recordings/{session}/cast | full + admin |
GET | /api/admin/recordings/{session}/vnc | full + admin |
GET | /api/admin/recordings/{session}/search?q= | full + admin |
GET | /api/admin/recordings/search?q=&days= | full + admin |
Les routes de transfert de fichiers (SFTP et RDP) ne sont pas encore listées dans le README du projet.
Choix techniques #
guacd (Apache Guacamole) a été retiré des dépôts de Debian 13. Pour rester en natif sans compiler de C :
- SSH : bibliothèque officielle de Go (
golang.org/x/crypto/ssh), terminal xterm.js côté navigateur. - VNC : Gná relaie lui-même le protocole RFB, et le navigateur l'affiche avec noVNC.
- RDP : passerelle
gna-rdpen Rust, fondée sur IronRDP, qui convertit l'écran RDP en flux VNC. L'affichage, l'enregistrement et la relecture sont donc les mêmes qu'en VNC. - Application : Tauri 2, avec un relais local en Rust.
xterm.js (MIT), noVNC (MPL-2.0) et asciinema-player (Apache 2.0) sont embarqués dans le binaire : aucune ressource externe n'est chargée.