NILFS2 — un système de fichiers invulnérable pour /home

NILFS2 — un système de fichiers invulnérable pour /home

Comme on le sait, si une mauvaise expérience peut se produire, elle se produira sûrement. Chacun a probablement déjà connu des cas où un fichier important a été accidentellement effacé ou où du texte a été sélectionné et supprimé dans un éditeur de texte.

Si vous êtes un hébergeur ou un propriétaire de site, vous avez probablement été confronté à des piratages de comptes utilisateurs ou de votre propre site. Dans de tels cas, il est important de restaurer la chronologie, de trouver le moyen d'intrusion et la vulnérabilité exploitée par l'attaquant.

Pour résoudre de tels problèmes, le système de fichiers NILFS2 est idéal.

Il est présent dans le noyau Linux depuis la version 2.6.30.

La particularité de ce système de fichiers est qu'il fonctionne comme un système de contrôle de version : vous pouvez toujours revenir à un état antérieur du système et voir à quoi il ressemblait il y a quelque temps.

Pour assurer cette fonctionnalité, vous n'avez pas besoin de configurer des scripts Cron, de faire des instantanés, etc. Le système de fichiers NILFS2 gère tout cela automatiquement. Il ne réécrit jamais les anciennes données et écrit toujours dans de nouvelles zones du disque, tant qu'il y a suffisamment d'espace libre. En conformité totale avec le principe Copy-on-Write.

En fait, tout changement de fichier entraîne automatiquement la création d'une nouvelle image instantanée du système de fichiers, vous permettant d'utiliser ce système de fichiers comme une machine à remonter le temps pour revenir à un état antérieur des fichiers.

Historique

NILFS2 — un système de fichiers invulnérable pour /homeNILFS2 a été développé au sein de la Nippon Telegraph and Telephone Corporation, en fait, une entreprise d'État (qui a un contrôle majoritaire) et la plus grande société de télécommunications du Japon. Plus précisément, il a été développé dans le laboratoire CyberSpace Laboratories sous la direction de Ryusuke Konishi..

Pourquoi il a été spécifiquement développé est inconnu, mais on peut supposer qu'un tel système de fichiers, avec sa fonctionnalité de « machine à remonter le temps », est idéal pour stocker des données sur lesquelles les agences de sécurité pourraient souhaiter fouiller, afin de reconstituer toute la trame des SMS, des courriels, etc.

NILFS2 est également, potentiellement, un outil très précieux pour les services de sécurité internes, car il permet de récupérer tous les courriels supprimés dans une base de données de messagerie, de mettre en lumière les erreurs des employés, qui pourraient par la suite tenter de les masquer en supprimant ou en modifiant leurs fichiers.

Comment peut-on suivre toute l'historique de la correspondance ?Sous Linux sur les serveurs (et c'est précisément là où il faut installer NILFS2 pour des raisons de sécurité interne), un moyen de stockage des messages électroniques est souvent utilisé : le système de fichiers. Le format dit Maildir. Il suffit d'installer Courier Mail Server et de configurer le stockage des courriels en Maildir. Un autre format mbox représente un grand fichier texte qui peut être facilement analysé en messages distincts.

Si le serveur de messagerie utilise une base de données, alors NILFS2 permettra de restaurer la chronologie exacte des modifications de la base et de rétablir la base à l'un de ces moments. Ensuite, il faut utiliser des outils de BDD pour voir ce qu'il y avait à ce moment-là…

Cependant, quelque chose a mal tourné. Soit le gouvernement japonais a changé d'avis sur la surveillance de tous (comme le principe Yarovaya), soit les performances de NILFS2 sur des HDD traditionnels se sont révélées catastrophiques, et NILFS2 a été publié sous licence GPL et a rapidement intégré le noyau Linux, car les développeurs du noyau Linux n'avaient pas de réclamations particulières concernant le code rédigé par des Japonais hautement qualifiés.

À quoi ressemble NILFS2 ?

D'un point de vue utilitaire : à un système de contrôle de version SVN. Chaque point de contrôle du système de fichiers est un commit qui est effectué automatiquement à l'insu de l'utilisateur à chaque modification : qu'il s'agisse de la suppression, de la modification du contenu d'un fichier ou des droits d'accès. Chaque commit a un numéro qui augmente de manière linéaire.

Du point de vue d'un programmeur : à un tampon circulaire. Le système de fichiers accumule les modifications et les écrit dans un morceau d'environ 8 Mo (2000 * 4096, où 2000 est le nombre d'éléments dans le bloc et 4096 est la taille de la page mémoire). L'ensemble du disque est divisé en de tels morceaux. L'écriture se fait de manière séquentielle. Lorsque l'espace libre est épuisé, les instantanés les plus anciens sont supprimés et les morceaux sont réécrits.

Les principaux avantages de NILFS2

  • Versioning !!!
  • La procédure de récupération du système de fichiers après un crash est élémentaire : au démarrage, le dernier morceau ayant une somme de contrôle valide est recherché et il reçoit le superbloc. C'est pratiquement une opération instantanée.
  • Étant donné que l'écriture se fait toujours de manière linéaire :
    • cela peut donner de bons résultats lors de son utilisation sur SSD, avec des écritures aléatoires lentes.
    • NILFS2 économise des ressources SSD, car le facteur de multiplication des écritures est presque inexistant.
      Plus précisément, il ne dépasse pas 2.Le fait est que lors de la réécriture cyclique de l'ensemble du disque, NILFS2 déplacera les données immuables vers de nouveaux morceaux (blocs).

      Si nous avons 10 % de données immuables sur le disque, nous obtiendrons une augmentation de l'écriture de 10 % après une réécriture complète. Eh bien, et 50 % d'augmentation avec 50 % de remplissage de l'appareil lors d'une réécriture complète du disque.

      Le rapport d'amplification maximal de l'écriture est de 2. C'est très faible compte tenu du fait que tout est écrit consécutivement. En général, la multiplication des écritures sera inférieure à celle d'un système de fichiers fragmenté ordinaire avec un secteur de 4096 octets. (Cela mène à la pensée commentaire).

  • La simplicité potentielle de mise en œuvre de la réplication sur le système de fichiers NILFS2 distant

NILFS2 pour /home

Dans les systèmes d'exploitation de type Unix, il y a généralement un dossier /home où sont stockées les données des utilisateurs. Différents programmes y enregistrent leurs paramètres relatifs à des utilisateurs spécifiques.

Et qui, sinon les utilisateurs, fait des erreurs le plus souvent ? Donc, comme on dit, Dieu lui-même a commandé d'utiliser NILFS2 sur /home.

D'autant plus qu'avec la généralisation des SSD, nous ne devons plus nous inquiéter d'une forte chute de performances lors de l'utilisation de systèmes de fichiers CoW.

Oui, nous pouvons créer des snapshots de système de fichiers aussi souvent que nous le souhaitons, tant en ZFS qu'en BTRFS, mais il y a toujours le risque qu'une modification de fichier perdue se trouve entre les snapshots. Et les snapshots doivent aussi être administrés : supprimer les anciens. Dans NILFS2, tout cela se fait automatiquement, littéralement toutes les quelques secondes.

J'ai créé un volume logique avec lvcreate (dans le groupe de volumes nvme, pool mince). Je recommande de le créer sur un volume LVM, car par la suite, il peut être facilement étendu. Je recommande de conserver 50 % d'espace libre sur le disque avec NILFS2 pour une profondeur de versionnement adéquate.

lvcreate -V10G -T nvme/thin -n home

et je l'ai formaté en NILFS2 :

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Démarrer l'écriture des données initiales du système de fichiers sur le dispositif
      Taille de bloc : 4096  Dispositif : /dev/nvme/home1  Taille du dispositif : 10737418240
L'initialisation du système de fichiers a réussi !!

Après cela, il faut copier toutes les données du /home actuel.

J'ai fait cela immédiatement après le démarrage de l'ordinateur, avant de me connecter à mon compte, sous l'utilisateur root. Si je m'étais connecté avec mon utilisateur, certaines applications auraient ouvert des sockets et des fichiers dans le dossier de mon utilisateur /home/user, ce qui aurait compliqué la copie propre. Comme on le sait, le dossier personnel pour l'utilisateur root se trouve généralement à l'emplacement /root, donc aucun fichier ne s'ouvrira dans la partition /home.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Concernant la dernière ligne, cf. article.

Ensuite, nous modifions /etc/fstab, où le système de fichiers pour /home est monté, en

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

L'option noatime nécessaire pour améliorer les performances, afin que le atime ne change pas à chaque accès aux fichiers. Ensuite, nous redémarrons.

Types de snapshots dans NILFS2.

Un snapshot ordinaire sans protection contre la suppression est appelé point de contrôle (checkpoint).
Un snapshot protégé contre la suppression automatique est appelé snapshot, ou simplement snapshot.

Pour visualiser les checkpoints, utilisez la commande lscp

Pour visualiser les snapshots (snapshots), lscp -s

Nous pouvons également créer des snapshots et des checkpoints à tout moment avec:

mkcp [-s] dispositif

Récupération des données.

NILFS nous permet de monter autant d'anciens snapshots que nous le souhaitons en parallèle avec la branche principale du FS. Mais seulement en mode lecture.

Tout est organisé ainsi. Les checkpoints ordinaires, que NILFS2 effectue, peuvent être supprimés automatiquement à tout moment (lorsque l'espace disque est épuisé ou selon les règles de nilfs_cleanerd), donc avant le montage, nous devons transformer un checkpoint en snapshot ou, en d'autres termes, fixer le snapshot.

chcp ss numéro_checkpoint

Après cela, nous pouvons monter le snapshot, par exemple, comme suit :

mount -t nilfs2 -r -o cp=numéro_checkpoint /dev/nvme/home /mnt/nilfs/numéro_checkpoint

Après cela, nous copions les fichiers à récupérer du snapshot vers /home.
Et par la suite, nous supprimons le drapeau de non-suppression du snapshot, afin que le collecteur automatique puisse supprimer les données obsolètes à l'avenir :

chcp cp numéro_checkpoint

Utilitaires pour NILFS2

Mais c'est un problème. Oui, bien sûr, nous pouvons créer un FS, modifier sa taille en ligne, afficher la liste des checkpoints, en créer et en supprimer. Le paquet nilfs2-utils fournit un ensemble minimal de fonctionnalités.

Étant donné qu'NTT a interrompu son financement, il n'existe pas d'outils bas-niveau rapides permettant d'afficher l'historique des modifications de fichiers, ni de faire un diff entre les snapshots.

Mon utilitaire n2u

Pour combler ce vide, j'ai écrit mon utilitaire n2u, qui peut afficher l'historique des modifications d'un fichier/d'un répertoire spécifique :

n2u log nom_du_fichier

La sortie est à peu près la suivante :

          CHECKPOINT        DATE     HEURE     TYPE          TAILLE  MODE
             1787552  2019-11-24 22:08:00    premier          7079    cp
             1792659  2019-11-25 23:09:05  changé          7081    cp

Il fonctionne assez rapidement pour le mode de mise en œuvre choisi : il recherche les différences entre les fichiers en utilisant la méthode de bissection, en montant et en comparant rapidement le fichier/répertoire dans différents snapshots.

Vous pouvez spécifier une plage de checkpoints à l'aide de la clé -cp CP1:CP2 ou -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Vous pouvez également voir la différence entre les checkpoints pour un fichier ou un répertoire spécifique :

n2u diff -r cp1:cp2 nom_du_fichier

Vous pouvez afficher toute l'historique des modifications : toutes les différences entre les checkpoints d'un fichier/répertoire spécifique :

n2u blame [-r cp1:cp2] nom_du_fichier

L'intervalle de dates dans cette commande est également pris en charge.

Un appel aux développeurs

Il y a beaucoup de spécialistes sur Habré. Je vous prie de peaufiner NILFS2. Ajoutez la réplication, un diff bas-niveau rapide entre les révisions, reflink et d'autres fonctionnalités !

Liens

Site officiel de NILFS.

Dépôts :
NILFS2.
Utilitaires et modules NILFS2.

Newsletters :
Liste de diffusion des développeurs NILFS2. Identifiant pour s'abonner : linux-nilfs.
Archive de la liste de diffusion.

Guide de configuration de nilfs_cleanerd.
Tests comparatifs de performance EXT4, Btrfs, XFS & NILFS2.

Remerciements :

  • Aux développeurs de NILFS2 : Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi et Satoshi Moriai. D'autres contributeurs majeurs incluent : Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Aux entreprises Amblin Entertainment et Universal Pictures pour la merveilleuse série de films « Retour vers le futur ». La première image du post est tirée du film « Retour vers le futur — 3 ».
  • Les entreprises RUVDS pour le soutien et la possibilité de publication sur mon blog sur Habré.

P.S. Veuillez envoyer toute erreur constatée en message privé. Je fais augmenter ma karma pour cela.

Vous pouvez expérimenter avec NILFS2 en commandant une machine virtuelle chez RUVDS avec le coupon ci-dessous. Pour tous les nouveaux clients, période d'essai gratuit de 3 jours.

NILFS2 — un système de fichiers invulnérable pour /home

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster