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

Journal d'audit dans /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 »

  1. Action : delete
  2. Période : 30 derniers jours
  3. Cliquez Filtrer

Exporter les logs en CSV

  1. Appliquez les filtres souhaités
  2. Cliquez Exporter CSV
  3. 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 :

  1. Accédez à /admin/settings
  2. Trouvez audit_log_actions
  3. Ajoutez "login" au tableau JSON : ["create","update","delete","reset_password","login"]
  4. 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é).


Pour aller plus loin