Mettre un serveur Linux entier sous contrôle de code source (git)

17

Je pense à mettre tout mon serveur Linux sous contrôle de version en utilisant git. La raison derrière cela est que cela pourrait être le moyen le plus simple de détecter les modifications / rootkits malveillants. Tout ce que je penserais naïvement est nécessaire pour vérifier l'intégrité du système: montez la partition linux chaque semaine à peu près en utilisant un système de secours, vérifiez si le référentiel git n'est toujours pas tempéré puis émettez un état git pour détecter les modifications apportées au système .

Mis à part le gaspillage évident dans l'espace disque, y a-t-il d'autres effets secondaires négatifs?

Est-ce une idée totalement folle?

Est-ce même un moyen sûr de vérifier les rootkits, car je devrais probablement exclure au moins / dev et / proc?

Tobias Hertkorn
la source
5
Je voterais pour "une idée totalement folle", trop d'implications. Les modifications des fichiers se produiront tout le temps et feront des procédures de mise à niveau un cauchemar.
forcefsck
@forcefsck - pourquoi des changements de fichiers se produisent-ils tout le temps? Ne devraient-ils pas se produire uniquement lors d'une mise à niveau du système?
Tobias Hertkorn
1
Juste une pensée, pourquoi ne pas utiliser quelque chose comme dirvish ou rsync avec --link-dest? Si vous utilisez dirvish pour faire vos sauvegardes, il vous donnera un bon rapport pour chaque sauvegarde montrant ce qui a changé. Vous pouvez rsync en mode --dry-run pour comparer l'état actuel à votre sauvegarde. Si vous utilisez dirvish, vous utiliserez un outil bien testé comme système de sauvegarde.
Zoredache

Réponses:

16

C'est une "mauvaise idée" (tm). En plus de tout le reste, votre référentiel fonctionnera lentement comme tout le monde et s'aggravera à mesure que chaque révision sera conservée.

Essayez une gestion centralisée, comme marionnette / cfengine / chef. Cela gardera les choses comme vous l'attendez et annulera les changements inattendus.

Combinez cela avec quelque chose comme iwatch pour obtenir des e-mails de modifications de fichiers non autorisées.

Combinez cela avec des fichiers rpm / deb si nécessaire pour déployer des applications personnalisées.

Ajoutez quelque chose comme rkhunter ou chkrootkit de temps en temps pour les coups de pied et vous devriez être prêt à partir.

Travail accompli.

Sirex
la source
+1 pour Bad Idea - La gestion centralisée (marionnette / cfengine / chef / radmind / etc.) Vous donnera la possibilité de vous assurer que votre système est configuré selon vos besoins définis, et la plupart peuvent également être utilisés comme un "tripwire" tapez système pour vous dire quand les choses ne devraient pas changer.
voretaq7
Je pense que c'est vraiment une mauvaise idée. Ok, vous pouvez voir quels fichiers sont nouveaux et modifiés. Mais si vous exécutez git, il a besoin de beaucoup de CPU pour décompresser et calculer vos fichiers. Si vous faites cela sur l'ensemble de la machine, cela prend beaucoup de temps.
René Höhle
1
J'en jetterai un autre sur cette liste; etckeeper fera le dépôt git, sauf seulement pour / etc.
Shane Madden
les référentiels comme git sont incroyablement rapides. Et je ne m'inquiète pas du CPU ou des IO car le serveur que j'ai en tête a prévu des temps d'arrêt (d'où la possibilité de le monter à l'aide d'un système de secours)
Tobias Hertkorn
Ce que je ne comprends pas: comment les systèmes de gestion centralisés garantissent-ils qu'il n'y a pas de faux positifs - le système est compromis + les outils utilisés pour vérifier le système sont compromis = faux positifs
Tobias Hertkorn
5

Une autre alternative consiste à mettre en place Tripwire , qui est un logiciel sous GPL que les araignées à travers tous les fichiers importants sur votre système et détermine qui ont changé de façon que vous avez défini comme inacceptable. Le changement peut être défini aussi simplement que mtime, via le numéro d'inode, jusqu'à des sommes de contrôle cryptographiquement solides.

Il faut un peu de configuration et de réglage si vous ne voulez pas obtenir beaucoup de rapports tous les soirs sur les fichiers modifiés dans /var/run, les modifications des fichiers client DHCP dans /etc, etc., mais si vous rencontrez ce problème, cela peut être très utile en effet.

La base de données de propriétés du fichier est signé avec une clé non connue à la machine, ce qui vous aide à avoir confiance qu'aucun outil a changé malicieusement la base de données ou les binaires Tripwire. Pour une certitude absolue, vous pouvez graver une copie des outils et des bases de données tripwire sur un support en lecture seule, qui peut être monté sur le serveur et utilisé pour vérifier toutes les modifications depuis la gravure du disque, si une analyse judiciaire complète est nécessaire.

Si vous allez faire cela, il est très important de configurer et de faire fonctionner tripwire avant que la machine ne soit déployée en production, ou vous ne pouvez jamais être complètement sûr qu'un utilisateur malveillant n'a pas eu la possibilité d'infecter la machine avant était filaire.

Chapelier Fou
la source
3

Je ne pense pas que cela fonctionnera probablement, mais en tant qu'expérience, j'aimerais voir ce qui se passe si vous faites cela avec juste le dossier / etc. C'est là que la plupart des informations de configuration sont conservées.

Joel Coel
la source
4
Juste / etc est en cours. Consultez kitenet.net/~joey/code/etckeeper (etckeeper)
Tobias Hertkorn
1
etckeeper fonctionne très bien, je le trouve très utile.
Zoredache
2

@Sirex a déjà fourni une très bonne réponse, mais si vous voulez faire un pas de plus en matière de sécurité, la meilleure façon d'y faire face est d'abord la prévention puis la détection.

Essayez de configurer un système avec / filesystem monté en lecture seule. Faire / tmp un ramfs séparé monté avec noexec, option nodev. Pour que le système fonctionne, il suffit vraiment que / var soit monté en lecture-écriture. Donc, sous / var, montez un fs avec rw, noexec, nodev et supprimez les autorisations d'écriture sur / var / tmp (afaik, il est rarement nécessaire aux démons et cela devrait être configurable). Utilisez également un correctif de sécurité pour votre noyau pour limiter davantage l'accès aux ressources par les utilisateurs, essayez grsec par exemple. Utilisez un pare-feu avec les règles les plus restrictives possibles.

Certaines distributions fournissent une documentation complète sur le renforcement du système. Par exemple:

forcefsck
la source
0

Je pense que c'est une bonne idée d'analyser les changements qu'un outil fait dans votre système:

  1. installer un Linux nu dans une machine virtuelle
  2. initialiser le root git
  3. installez l'outil que vous souhaitez analyser
  4. voir toutes les modifications apportées au rouleau dans votre système

... Supprimer la VM

Vous devrez ajouter un grand nombre de dossiers au .gitignore fichier, mais comme proc, etc.

rubo77
la source
0

Pour les situations où vous souhaitez simplement conserver certains dossiers de l'ensemble du système de fichiers sous contrôle de version, l'approche suivante peut fonctionner:

Tout d'abord, créez un référentiel Git au /niveau:

$ cd /
# git init

Créez ensuite un /.gitignorequi ne met en liste blanche que certains dossiers, par exemple en liste blanche uniquement /path/to/versioned/config/folder/(basé sur /programming//a/11018557/320594 ):

/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore

Créez ensuite un premier commit:

# git add -A
# git commit -m "Initial commit"

Et puis ajoutez les dossiers supplémentaires que vous souhaitez sous contrôle de version à la demande.

PS:

En plus de la méthode précédente, si vous devez garder / etc / sous contrôle de version, vous préférerez peut-être utiliser etckeeper( https://etckeeper.branchable.com/ ) pour versionner ce dossier spécifique car il est plus spécialisé à cet effet ( par exemple, il s'engage automatiquement après l'installation des packages).

Jaime Hablutzel
la source