Auditer une instance gitrust¶
À qui s'adresse cette page¶
Administrateurs qui souhaitent consulter le journal d'audit, filtrer les événements suspects, exporter les logs et les corréler avec les journaux système.
Le journal d'audit dans /admin/audit¶
Gitrust enregistre toutes les actions significatives dans la table audit_log. Chaque entrée contient : l'acteur (utilisateur), l'action effectuée, la ressource concernée, l'adresse IP source et l'horodatage.
Les actions auditées par défaut (audit_log_actions dans app_settings) :
- create — création d'un dépôt, utilisateur, équipe, etc.
- update — modification de paramètres, de profil
- delete — suppression d'une ressource
- reset_password — réinitialisation de mot de passe
Accédez au journal : https://VOTRE_INSTANCE/admin/audit

Filtrer les événements¶
L'interface /admin/audit propose des filtres combinables :
| Filtre | Description |
|---|---|
| Utilisateur | Filtrer par nom d'utilisateur de l'acteur |
| Action | Filtrer par type d'action (create, update, delete, reset_password) |
| Période | Sélectionner une plage de dates |
| Ressource | Filtrer par type de ressource (repository, user, team…) |
Exemple de requête typique : « toutes les suppressions de dépôts depuis 30 jours »
- Action :
delete - Période : 30 derniers jours
- Cliquez Filtrer
Exporter les logs en CSV¶
- Appliquez les filtres souhaités
- Cliquez Exporter CSV
- Le fichier téléchargé contient les colonnes :
timestamp,actor_username,action,resource_type,resource_id,ip_address,details
Ce fichier peut être importé dans un tableur ou un SIEM pour des analyses avancées.
Interroger la base de données directement¶
Pour des requêtes avancées non disponibles dans l'UI :
-- Connexions de l'administrateur sur les 7 derniers jours
SELECT
al.created_at,
u.username,
al.action,
al.resource_type,
al.ip_address
FROM audit_log al
JOIN users u ON al.actor_id = u.id
WHERE u.username = 'admin'
AND al.created_at > NOW() - INTERVAL '7 days'
ORDER BY al.created_at DESC;
-- Suppressions massives (plus de 5 suppressions par utilisateur sur 1 heure)
SELECT
u.username,
COUNT(*) AS nb_suppressions,
MIN(al.created_at) AS premiere,
MAX(al.created_at) AS derniere
FROM audit_log al
JOIN users u ON al.actor_id = u.id
WHERE al.action = 'delete'
AND al.created_at > NOW() - INTERVAL '1 hour'
GROUP BY u.username
HAVING COUNT(*) > 5
ORDER BY nb_suppressions DESC;
Configurer le niveau d'audit¶
Le niveau et les actions auditées sont des paramètres dynamiques modifiables via /admin/settings :
| Paramètre | Valeur | Description |
|---|---|---|
audit_log_level |
INFO |
Niveau de détail (INFO, WARN, ERROR) |
audit_log_actions |
JSON array | Actions enregistrées |
Pour ajouter l'action login aux événements audités :
- Accédez à
/admin/settings - Trouvez
audit_log_actions - Ajoutez
"login"au tableau JSON :["create","update","delete","reset_password","login"] - Enregistrez (effet immédiat, pas de redémarrage nécessaire)
Corréler avec journalctl¶
Les logs systemd de gitrust complètent le journal d'audit en capturant les erreurs techniques et les événements bas niveau (connexions SSH refusées, erreurs de migration, etc.).
# Logs gitrust des 24 dernières heures
sudo journalctl -u gitrust --since "24 hours ago" --no-pager
# Filtrer les erreurs et avertissements uniquement
sudo journalctl -u gitrust -p err..warning --since "24 hours ago" --no-pager
# Corréler avec une adresse IP spécifique
sudo journalctl -u gitrust --since "24 hours ago" --no-pager \
| grep "192.168.1.100"
# Suivre les logs en temps réel
sudo journalctl -u gitrust -f
Signaux d'alerte à surveiller¶
# Tentatives d'authentification SSH échouées répétées
sudo journalctl -u gitrust --since "1 hour ago" --no-pager \
| grep -i "auth.*fail\|invalid.*key\|permission denied" \
| wc -l
# Réponses 429 (rate limiting déclenché)
sudo journalctl -u gitrust --since "1 hour ago" --no-pager \
| grep "429" | awk '{print $NF}' | sort | uniq -c | sort -rn | head
Conservation des logs¶
La rétention des logs d'audit en base de données n'a pas de limite automatique dans la version actuelle — les entrées s'accumulent indéfiniment. Pour une instance à long terme, planifiez une purge périodique :
-- Supprimer les entrées d'audit de plus de 1 an (hors suppressions et reset mdp)
DELETE FROM audit_log
WHERE created_at < NOW() - INTERVAL '1 year'
AND action NOT IN ('delete', 'reset_password');
Vérifiez les exigences de conservation de votre organisation avant de purger (RGPD, ANSSI PA-074 recommande 12 mois minimum pour les événements de sécurité).