NILFS2 — um sistema de arquivos à prova de balas para /home

NILFS2 — um sistema de arquivos à prova de balas para /home

Como se sabe, se alguma coisa ruim pode acontecer, ela certamente acontecerá. Provavelmente, todos já tiveram casos em que um arquivo importante foi acidentalmente apagado ou um texto foi selecionado e destruído em um editor de texto.

Se você é um provedor de hospedagem ou dono de um site, provavelmente já lidou com invasões de contas de usuários ou do seu próprio site. Nesses casos, é importante restaurar a cronologia, descobrir a forma de penetração e a vulnerabilidade que o invasor utilizou.

Para resolver esses problemas, o sistema de arquivos NILFS2 é uma ótima solução.

Ele está presente no kernel do Linux desde a versão 2.6.30.

A característica deste sistema de arquivos é que ele é semelhante a um sistema de controle de versões: você pode sempre reverter o estado do sistema para visualizar como ele estava há algum tempo.

Para garantir essa funcionalidade, você não precisa configurar scripts Cron, fazer snapshots, etc. O sistema de arquivos NILFS2 faz tudo isso automaticamente. Ele nunca reescreve dados antigos e sempre grava em novas áreas do disco, se houver espaço livre suficiente. Totalmente de acordo com o princípio Copy-on-Write.

Na prática, qualquer modificação em um arquivo resulta na criação automática de um novo snapshot do sistema de arquivos, permitindo que você use este FS como uma máquina do tempo e retroceda o estado dos arquivos.

Histórico

NILFS2 — um sistema de arquivos à prova de balas para /homeO NILFS2 foi desenvolvido nas entranhas da Nippon Telegraph and Telephone Corporation, uma empresa estatal (que detém o controle acionário) e a maior empresa de telecomunicações do Japão. Mais especificamente, no laboratório CyberSpace Laboratories sob a supervisão de Ryusuke Konishi.

Não se sabe exatamente para que foi especificamente desenvolvido, no entanto, pode-se supor que um FS desse tipo, com sua funcionalidade de “máquina do tempo”, é ideal para armazenar dados que possam chamar a atenção dos serviços de segurança, para rever toda a sequência de SMS, e-mails, etc.

O NILFS2 também é, potencialmente, uma ferramenta muito valiosa para agências de segurança interna, pois permite recuperar todos os e-mails apagados em um banco de dados, expor falhas de funcionários que posteriormente podem tentar se encobrir, apagando ou alterando seus arquivos.

Como acompanhar toda a história da correspondênciaNo Linux, em servidores (é exatamente lá que NILFS2 deve ser instalado para fins de segurança interna), o armazenamento de mensagens de e-mail é frequentemente feito através de um método de armazenamento de arquivos. O chamado formato Maildir. Basta instalar o Courier Mail Server e configurar o armazenamento de e-mails em Maildir. Outro formato, mbox , consiste em um grande arquivo de texto que pode ser facilmente analisado em mensagens separadas.

Se o servidor de e-mail usar um banco de dados, o NILFS2 permitirá restaurar o timestamp exato das alterações do banco e a possibilidade de restaurar o banco em qualquer um desses momentos. E, em seguida, será necessário usar as ferramentas do banco de dados para verificar o que havia nele naquele momento…

No entanto, algo deu errado. Ou o governo do Japão desistiu de monitorar todos (à la princípio Yarovaya), ou o desempenho do NILFS2 em HDDs tradicionais revelou-se muito abaixo do esperado, e o NILFS2 foi lançado sob a licença GPL e rapidamente se integrou ao kernel do Linux, uma vez que os desenvolvedores do kernel não tinham queixas significativas sobre o código escrito por profissionais altamente qualificados japoneses.

O que se parece com NILFS2?

Do ponto de vista do uso: como um sistema de controle de versões SVN. Cada checkpoint do sistema de arquivos é um commit, que é feito automaticamente sem o conhecimento do usuário a cada alteração: seja a remoção, a alteração do conteúdo de um arquivo ou permissões. Cada commit tem um número que aumenta linearmente.

Do ponto de vista do programador: se assemelha a um buffer circular. O sistema de arquivos acumula alterações e as grava em um pedaço com aproximadamente 8 MB (2000 * 4096, onde 2000 é o número de elementos em um bloco e 4096 é o tamanho da página de memória). Todo o disco é dividido em tais pedaços. A gravação é feita sequencialmente. Quando o espaço livre se esgota, as capturas mais antigas são excluídas, e os pedaços são regravados.

Principais vantagens do NILFS2

  • Versionamento!!!
  • O procedimento de recuperação do sistema de arquivos após uma falha é simples: durante a inicialização, o último pedaço com uma soma de verificação válida é encontrado e o superbloco é estabelecido nele. Esta é uma operação praticamente instantânea.
  • Como a gravação sempre ocorre linearmente, isso:
    • pode mostrar bons resultados ao trabalhar em SSDs, com gravação aleatória lenta.
    • O NILFS2 economiza recursos de SSD, uma vez que quase não há fator de multipliação de gravação.
      Mais precisamente, não mais do que 2.A questão é que, ao reescrever ciclicamente todo o disco, o NILFS2 moverá dados imutáveis para novos blocos (chunks).

      Se temos 10% de dados imutáveis no disco, teremos um aumento de 10% na gravação com 1 reescrita completa. E 50% de aumento com 50% de ocupação do dispositivo para 1 reescrita completa do disco.

      O fator máximo de ampliação de gravação é 2. Isso é muito baixo, considerando que tudo é escrito sequencialmente. De modo geral, a multiplicação da gravação será menor do que em um sistema de arquivos fragmentado comum com setor de 4096 bytes. (Leva a pensar comentário).

  • A potencial simplicidade de implementação da replicação em um sistema de arquivos NILFS2 remoto

NILFS2 para /home

Em sistemas operacionais semelhantes ao Unix, geralmente há uma pasta /home, onde os dados dos usuários são armazenados. Vários programas salvam suas configurações nessa pasta relacionadas a usuários específicos.

E quem, senão os usuários, costuma cometer erros? Portanto, como se diz, é um sinal divino para usar NILFS2 em /home.

especialmente agora que, com a disseminação generalizada de SSDs, não precisamos mais nos preocupar com uma queda significativa ao usar sistemas de arquivos CoW.

Sim, podemos criar snapshots do sistema de arquivos (snapshots) com a frequência que quisermos tanto no ZFS quanto no BTRFS, mas sempre há o risco de que uma alteração perdida de arquivo ocorra entre os snapshots. E os snapshots ainda precisam ser gerenciados: remover os antigos. No NILFS2, tudo isso ocorre automaticamente, literalmente a cada poucos segundos.

Eu criei um volume lógico usando lvcreate (no grupo de volumes nvme, pool fino thin). Recomendo criar exatamente em um volume LVM, pois posteriormente pode ser facilmente ampliado. Sugiro ter 50% de espaço livre no disco com NILFS2 para uma profundidade decente de versionamento.

lvcreate -V10G -T nvme/thin -n home

e o formatei para NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Iniciando a gravação dos dados iniciais do sistema de arquivos no dispositivo
      Tamanho do bloco: 4096  Dispositivo: /dev/nvme/home1  Tamanho do dispositivo: 10737418240
Inicialização do sistema de arquivos sucedida!!

Depois disso, é necessário copiar todos os dados do atual /home.

Eu fiz isso logo após ligar o computador, antes de entrar na minha conta, como usuário root. Se eu tivesse acessado como meu usuário, alguns programas teriam aberto sockets e arquivos na pasta do meu usuário /home/user, o que tornaria a cópia limpa difícil. Como é sabido, a pasta home do usuário root geralmente está localizada em /root, portanto, nenhum arquivo será aberto na partição /home.

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

Sobre a última linha, consulte. artigo.

Em seguida, editamos /etc/fstab, onde o sistema de arquivos para /home é montado, para

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

Opção noatime que é necessário para melhorar o desempenho, para que, a cada acesso a arquivos, o atime não seja alterado. Em seguida, reiniciamos.

Tipos de snapshots no NILFS2.

Um snapshot normal sem proteção contra exclusão é chamado de checkpoint (checkpoint ou ponto de restauração).
Um snapshot com proteção contra exclusão automática é chamado de snapshot, que, daqui em diante, será apenas chamado de snapshot.

A visualização de checkpoints é feita através do comando lscp

Visualização de snapshots (snapshots) lscp -s

Podemos também criar snapshots e checkpoints a qualquer momento usando:

mkcp [-s] dispositivo

Restauramos dados.

O NILFS permite montar quantos snapshots antigos forem necessários em paralelo com o trabalho na ramificação principal do FS. Mas apenas em modo de leitura.

A configuração é a seguinte. Checkpoints normais, que o NILFS2 faz, podem ser excluídos automaticamente a qualquer momento (quando o espaço em disco acabar ou de acordo com as regras nilfs_cleanerd), por isso, antes da montagem, precisamos transformar o checkpoint em um snapshot ou, como se diz em russo, fixar o snapshot.

chcp ss número_checkpoint

Após isso, podemos montar o snapshot, por exemplo, assim:

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

Depois disso, copiamos os arquivos restaurados do snapshot para /home.
E posteriormente removemos a marca de não exclusão do snapshot, para que, no futuro, o coletor de lixo automático possa remover dados obsoletos:

chcp cp número_checkpoint

Utilitários para NILFS2

Aqui está o problema. Sim, claro, podemos criar FS, mudar seu tamanho online, visualizar a lista de checkpoints, criá-los e excluí-los. O pacote nilfs2-utils oferece um conjunto mínimo de ferramentas.

Como a NTT descontinuou o financiamento, não existem utilitários de baixo nível rápidos que permitem visualizar o histórico de alterações de arquivos, fazer diff entre snapshots.

Meu utilitário n2u

Para preencher esse vazio, escrevi meu utilitário n2u, que consegue exibir o histórico de alterações de um arquivo/diretório específico:

n2u log filename

A saída é mais ou menos assim:

          CHECKPOINT        DATA       HORA     TIPO          TAMANHO  MODO
             1787552  2019-11-24 22:08:00    primeiro          7079    cp
             1792659  2019-11-25 23:09:05  alterado          7081    cp

Ele funciona bastante rápido para o método preferido de implementação: busca diferenças entre arquivos usando a técnica de bisseção, montando e comparando rapidamente arquivos/diretórios em diferentes snapshots.

Você pode definir um intervalo de checkpoints usando a chave -cp CP1:CP2 ou -cp {ANO-MM-DD}:{ANO-MM-DD}.

Você também pode ver a diferença entre checkpoints para um arquivo ou diretório específico:

n2u diff -r cp1:cp2 filename

É possível exibir todo o histórico de mudanças: todas as diferenças entre os checkpoints de um arquivo/diretório específico:

n2u blame [-r cp1:cp2] filename

O intervalo de datas nesta ordem também é suportado.

Um apelo aos desenvolvedores

Há muitos especialistas no Habr. Por favor, melhorem o NILFS2. Façam replicação, diff de baixo nível rápido entre revisões, reflink e outras funcionalidades!

Links

Site oficial do NILFS.

Repositórios:
NILFS2.
Utilitários e módulos do NILFS2.

Listas de discussão:
Envio de e-mail para desenvolvedores do NILFS2. Identificador para assinatura: linux-nilfs.
Arquivo da lista de discussão.

Guia de configuração do nilfs_cleanerd.
Testes comparativos de desempenho EXT4, Btrfs, XFS & NILFS2.

Agradecimentos:

  • Aos desenvolvedores do NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi e Satoshi Moriai. Outros principais contribuintes: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Às empresas Amblin Entertainment e Universal Pictures pela maravilhosa série de filmes ‘De Volta para o Futuro’. A primeira imagem do post foi retirada do filme ‘De Volta para o Futuro — 3’.
  • À empresa RUVDS pelo apoio e pela oportunidade de publicação em seu blog no Habr.

P.S. Caso encontre erros, envie uma mensagem privada. Isso melhora minha karma.

Você pode experimentar o NILFS2 encomendando uma máquina virtual com RUVDS usando o cupom abaixo. Para todos os novos clientes, período de teste gratuito de 3 dias.

NILFS2 — um sistema de arquivos à prova de balas para /home

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster