NILFS2 — un sistema de archivos a prueba de balas para /home

NILFS2 — un sistema de archivos a prueba de balas para /home

Como se sabe, si algo malo puede suceder, sucederá. Probablemente, todos hemos tenido momentos en los que se borró accidentalmente un archivo importante o se eliminó texto en un editor de texto.

Si usted es un proveedor de hosting o propietario de un sitio web, probablemente se haya enfrentado a hackeos de cuentas de usuario o de su propio sitio. En tales casos, es crucial restaurar la cronología, encontrar el método de infiltración y la vulnerabilidad utilizada por el atacante.

Para resolver tales problemas, el sistema de archivos NILFS2 es una excelente opción.

Está presente en el núcleo de Linux desde la versión 2.6.30.

La característica especial de este sistema de archivos es que es similar a un sistema de control de versiones: siempre puede revertir el estado del sistema y ver cómo era hace un tiempo.

Para garantizar esta funcionalidad, no necesita configurar scripts de Cron, hacer instantáneas, etc. El sistema de archivos NILFS2 lo hace todo por sí mismo. Nunca reescribe datos antiguos y siempre escribe en nuevas áreas del disco, siempre que haya suficiente espacio de disco libre. Todo en estricta conformidad con el principio de Copy-on-Write.

De hecho, cualquier cambio en un archivo provoca automáticamente la creación de una nueva instantánea del sistema de archivos, por lo que puede usar este sistema de archivos como una máquina del tiempo y retroceder el estado de los archivos.

Historia

NILFS2 — un sistema de archivos a prueba de balas para /homeNILFS2 fue desarrollado en el seno de Nippon Telegraph and Telephone Corporation, de hecho, una empresa estatal (tiene el paquete de control) y la mayor empresa de telecomunicaciones de Japón. Más concretamente, en el laboratorio CyberSpace Laboratories bajo la dirección de Ryusuke Konishi.

No se sabe exactamente para qué fue desarrollado, sin embargo, se puede suponer que un sistema de archivos como este, con su funcionalidad de 'máquina del tiempo', es ideal para almacenar datos en los que los servicios de inteligencia pueden querer hurgar, para reproducir toda la imagen de mensajes de texto, correos electrónicos, etc.

NILFS2 también es, potencialmente, una herramienta muy valiosa para los servicios de seguridad interna, ya que permite recuperar todos los correos eliminados de la base de datos de correos y descubrir errores cometidos por empleados que posteriormente podrían intentar ocultar, borrando o modificando sus archivos.

¿Cómo se puede rastrear toda la historia de la correspondencia?En Linux, en servidores (y es allí donde se debe instalar NILFS2 para propósitos de seguridad interna), el método de almacenamiento de correos electrónicos se realiza muy a menudo mediante un sistema de archivos. El llamado formato Maildir. Solo es necesario instalar Courier Mail Server y configurar el almacenamiento de correos en Maildir. Otro formato mbox es un gran archivo de texto que se puede analizar fácilmente en mensajes individuales.

Si el servidor de correo utiliza una base de datos, NILFS2 permitirá restaurar el historial exacto de cambios en la base y la posibilidad de restaurar la base en cualquiera de esos momentos. Luego, se deben utilizar las herramientas de la base de datos para ver qué había en ese momento...

Sin embargo, algo salió mal. O el gobierno japonés decidió no seguir con la vigilancia (al estilo del principio Yárova), o el rendimiento de NILFS2 en los HDD tradicionales resultó ser inferior al mínimo, y NILFS2 fue lanzada bajo la licencia GPL y rápidamente fue incorporada al núcleo de Linux, ya que los desarrolladores del núcleo no tenían objeciones al código escrito por altamente calificados japoneses.

¿A qué se asemeja NILFS2?

Desde el punto de vista de uso: a un sistema de control de versiones. SVNCada punto de control del sistema de archivos es un commit que se realiza automáticamente sin que el usuario lo sepa en cualquier cambio: ya sea eliminación, modificación del contenido de un archivo o cambio de permisos. Cada commit tiene un número que aumenta linealmente.

Desde la perspectiva del programador: a un buffer cíclico. El sistema de archivos acumula cambios y los graba en un bloque de aproximadamente 8 MB (2000 * 4096, donde 2000 es el número de elementos en el bloque y 4096 es el tamaño de la página de memoria). Todo el disco está dividido en esos chunks. La escritura se realiza de manera secuencial. Cuando se acaba el espacio libre, las instantáneas más antiguas se eliminan y los chunks se sobrescriben.

Las principales ventajas de NILFS2

  • ¡Versionado!!!
  • El procedimiento de recuperación del sistema de archivos tras un fallo es elemental: al arrancar, se busca el último chunk que tenga una suma de verificación válida y se establece el superbloque sobre él. Esta es prácticamente una operación instantánea.
  • Debido a que la escritura siempre es lineal,
    • puede mostrar buenos resultados al trabajar en SSD, con escrituras aleatorias lentas.
    • NILFS2 ahorra recursos de SSD, ya que casi no existe el factor de multiplicación de escritura.
      Más bien, no es más de 2.La cuestión es que al sobrescribir cíclicamente todo el disco, NILFS2 trasladará los datos inmutables a nuevos fragmentos (chunks).

      Si tenemos un 10% de datos inalterables en el disco, obtendremos un 10% de incremento en la escritura al realizar 1 sobrescritura completa. Y un 50% de incremento si el dispositivo está al 50% de su capacidad durante 1 sobrescritura completa del disco.

      El máximo coeficiente de amplificación de escritura es 2. Esto es muy bajo considerando que todo se escribe de manera secuencial. En general, la multiplicación de la escritura será menor que la de un sistema de archivos convencional fragmentado con un sector de 4096 bytes. (Este pensamiento fue inspirado por un comentario).

  • La potencial simplicidad en la implementación de replicación en un sistema de archivos NILFS2 remoto

NILFS2 para /home

En sistemas operativos similares a Unix, generalmente hay una carpeta /home que almacena los datos de los usuarios. Diferentes programas guardan en esta carpeta su configuración correspondiente a cada usuario.

¿Y quién, si no los usuarios, es el que más suele cometer errores? Por lo tanto, como se dice, Dios mismo recomienda utilizar NILFS2 en /home.

Además, dado que ahora los SSD se han generalizado, no tenemos que preocuparnos por caídas significativas al usar sistemas de archivos CoW.

Sí, podemos crear instantáneas del sistema de archivos (snapshots) con la frecuencia que queramos tanto en ZFS como en BTRFS, pero siempre existe el riesgo de que un cambio de archivo perdido se encuentre entre las instantáneas. Y las instantáneas también requieren administración: deben eliminarse las antiguas. En NILFS2, todo esto ocurre automáticamente, prácticamente cada pocos segundos.

Creé un volumen lógico usando lvcreate (en el grupo de volúmenes nvme, un pool delgado). Recomiendo crearlos precisamente en el volumen lvm, ya que posteriormente puede ser fácilmente ampliado. Se recomienda tener un 50% de espacio libre en el disco con NILFS2 para una profundidad de versiones adecuada.

lvcreate -V10G -T nvme/thin -n home

y lo formateé en NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Iniciando la escritura de los datos iniciales del sistema de archivos en el dispositivo
      Blocksize:4096  Dispositivo:/dev/nvme/home1  Tamaño del dispositivo:10737418240
¡Inicialización del sistema de archivos exitosa!

Después de esto, es necesario copiar todos los datos del actual /home.

Lo hice inmediatamente después de encender la computadora, antes de ingresar a mi cuenta, desde el usuario root. Si hubiera iniciado sesión como mi usuario, algunos programas habrían abierto sockets y archivos en la carpeta de mi usuario /home/user, lo que habría dificultado la copia limpia. Como se sabe, la carpeta de inicio para el usuario root generalmente se encuentra en /root, por lo que no se abrirán archivos en la partición /home.

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

En relación con la última línea, véase. artículo.

A continuación, modificamos /etc/fstab, donde se monta el sistema de archivos para /home, en

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

La opción noatime esto es necesario para mejorar el rendimiento, de modo que al acceder a los archivos no se cambie el atime. Luego reiniciamos.

Tipos de instantáneas en NILFS2.

Una instantánea normal sin protección contra eliminación se llama punto de control (checkpoint o punto de restauración).
Una instantánea con protección contra eliminación automática se llama snapshot, y a partir de ahora se le llama simplemente instantánea.

La visualización de los puntos de control se realiza con el comando lscp.

Visualización de instantáneas (snapshots) lscp -s.

También podemos crear instantáneas y puntos de control en cualquier momento usando:

mkcp [-s] dispositivo

Restaurando datos.

NILFS nos permite montar tantas instantáneas antiguas como queramos simultáneamente con el trabajo en la rama principal del sistema de archivos. Pero solo en modo de solo lectura.

Todo está estructurado de esta manera. Los puntos de control normales que crea NILFS2 pueden ser eliminados automáticamente en cualquier momento (cuando se agote el espacio en disco o según las reglas de nilfs_cleanerd), por lo que antes de montar debemos convertir el punto de control en una instantánea o, en ruso, fijar la instantánea.

chcp ss número_del_punto_de_control

Después de esto, podemos montar la instantánea, por ejemplo, así:

mount -t nilfs2 -r -o cp=número_del_punto_de_control /dev/nvme/home /mnt/nilfs/número_del_punto_de_control

Después de lo cual copiamos los archivos que estamos recuperando desde la instantánea a /home.
Y posteriormente levantamos la bandera de no eliminabilidad de la instantánea, para que en el futuro el recolector de basura automático pueda eliminar datos obsoletos:

chcp cp número_del_punto_de_control

Utilidades para NILFS2

Aquí es donde hay un problema. Sí, por supuesto, podemos crear sistemas de archivos, cambiar su tamaño en línea, ver la lista de puntos de control, crearlos y eliminarlos. El paquete nilfs2-utils proporciona un conjunto mínimo de herramientas.

Dado que NTT ha cancelado su financiación, no hay utilidades de bajo nivel rápidas que permitan extraer el historial de cambios de archivos o hacer diffs entre instantáneas.

Mi utilidad n2u

Para llenar este vacío, escribí mi utilidad n2u, que puede extraer el historial de cambios de un archivo/directorio específico:

n2u log filename

La salida es aproximadamente así:

          CHECKPOINT        FECHA     HORA     TIPO          TAMAÑO  MODO
             1787552  2019-11-24 22:08:00    primero          7079    cp
             1792659  2019-11-25 23:09:05  cambiado          7081    cp

Funciona bastante rápido para el método de implementación elegido: busca diferencias entre archivos mediante el método de bisección, montando y comparando rápidamente archivo/directorio en diferentes instantáneas.

Se puede establecer un rango de puntos de control usando la clave -cp CP1:CP2 o -cp {AÑO-MES-DÍA}:{AÑO-MES-DÍA}.

También se puede ver la diferencia entre puntos de control para un archivo o directorio específico:

n2u diff -r cp1:cp2 filename

Se puede extraer toda la cronología de cambios: todas las diferencias entre los puntos de control de un archivo/directorio específico:

n2u blame [-r cp1:cp2] filename

El intervalo de fechas en este comando también es compatible.

Llamado a los desarrolladores

Hay muchos expertos en Habr. Por favor, mejoren NILFS2. ¡Implementen replicación, diffs rápidos de bajo nivel entre revisiones, reflink y otras mejoras!

Enlaces

Sitio web oficial de NILFS.

Repositorios:
NILFS2.
Utilidades y módulos de NILFS2.

Boletines:
Suscripción por correo electrónico de los desarrolladores de NILFS2. Identificador para suscripción linux-nilfs.
Archivo del boletín.

Guía para configurar nilfs_cleanerd.
Pruebas comparativas de rendimiento de EXT4, Btrfs, XFS & NILFS2.

Agradecimientos:

  • Desarrolladores de NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi y Satoshi Moriai. Otros contribuyentes importantes son: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • A las compañías Amblin Entertainment y Universal Pictures por la maravillosa serie de películas «Regreso al futuro». La primera imagen de la publicación se toma de la película «Regreso al futuro — 3».
  • A la empresa RUVDS por el apoyo y la oportunidad de publicar en su blog en Habr.

P.D. Envía errores reportados por mensaje privado. Aumentaré tu karma por esto.

Puedes experimentar con NILFS2, pidiendo una máquina virtual en RUVDS con el cupón a continuación. Para todos los nuevos clientes, un período de prueba gratuito de 3 días.

NILFS2 — un sistema de archivos a prueba de balas para /home

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster