Ferramenta para remover todos os arquivos que não são de pacote em um sistema

1

Se você quiser manter, por exemplo, um sistema de compilação ou de servidor limpo, é muito útil ser capaz de verificar se todos os arquivos estão presentes e são considerados pelos metadados do pacote. No trabalho, temos uma ferramenta muito legal que, se executada sem nenhum parâmetro, simplesmente cria um arquivo com rm / rmdir declarações para qualquer e todos os arquivos / diretórios não mencionados por qualquer pacote (excluindo algumas árvores como /home ) . Isso é diferente de rpm -V e debsums , que apenas verifica os arquivos já mencionados por um pacote.

Existe uma ferramenta como esta para DEB / RPM / Ports / outros sistemas de embalagem? DEB seria o melhor, mas a portabilidade de outro sistema (ou o nosso próprio, se nada mais existir) provavelmente seria viável.

PS: Eu não estou procurando por arquiteturas alternativas. A questão aqui é ter absolutamente todos os arquivos no sistema contabilizados. VMs e tais não são aplicáveis.

    
por l0b0 05.05.2011 / 09:37

3 respostas

2

Se o que você deseja é um verificador de integridade de arquivos, o RPM fará o que você deseja. rpm -qaV (observe a letra maiúscula V). Isso vai passar e verificar:

  • tamanho do arquivo
  • Modo
  • (permissão e tipo de arquivo)
  • MD5 checksum
  • número do dispositivo (verifica se alguém está ocultando um arquivo montando outra partição lá
  • caminho do readlink (se o link simbólico aponta para um arquivo diferente)
  • propriedade do usuário
  • propriedade do grupo
  • tempo de modificação

Essa deve ser uma lista bastante abrangente.

rpm -qa --filesbypkg | awk '{print $2}' listará todos os arquivos no sistema que foram contabilizados.
find / | grep -vf /tmp/files-on-system.txt localizará todos os arquivos no sistema que não estão no banco de dados RPM. Outra maneira de realizar esses dois comandos em um comando seria rpm -qf 'find /'#replace single quote with backtick NOTA: Isso também sinalizará arquivos errados em diretórios como

  • /dev
  • /home
  • /proc
  • /var/run
  • /var/log
  • /var/lib
  • /tmp
por 05.05.2011 / 14:40
1

No Debian e em outros sistemas que usam o dpkg, sort -u /var/lib/dpkg/info fornecerá uma lista de todos os arquivos fornecidos por um pacote. Uma comparação com a lista de arquivos realmente presentes no sistema revela um grande número de arquivos que não são fornecidos por nenhum pacote. Esta lista é de uma rápida olhada em uma máquina squeeze Debian e não é exaustiva.

  • Os suspeitos óbvios são: /etc , /usr/local , /opt , /var , /home , /srv , pontos de montagem de todos os tipos.
  • Vários links simbólicos criados por scripts de instalação de pacotes. Geralmente, isso ocorre porque o arquivo costumava estar em um pacote e agora foi substituído por uma alternativa: primeiro o novo pacote é descompactado, o antigo pacote que ele substitui é removido e, finalmente, o script postinst do novo pacote cria o link.
  • Alguns usos de dpkg-divert .
  • Em /boot , initrd-* (regenerado automaticamente a partir do kernel instalado e módulos extras) e arquivos do carregador de inicialização ( /boot/grub/* ).
  • Em /lib/modules/* , arquivos de dependência de módulos e mapas de símbolos, e módulos compilados automaticamente (a partir de dkms) .
  • Vários conteúdos não redistribuíveis que são baixados de sua única fonte autorizada quando você instala o pacote. A maior parte é documentação, existem também algumas fontes.
  • A fonte X11 incide em /usr/X11R6/lib/X11/fonts .
  • backends do CUPS copiados de /usr/lib/cups/backend-available/ para /usr/lib/cups/backend/http/ .
  • Vários arquivos compilados na instalação: *.pyc (Python), *.elc (Emacs), *.dll (Mono),…
  • Índices de documentação gerados em /usr/share/doc/HTML (de dhelp ).

Se você quiser contabilizar todos os arquivos, terá que rastrear o histórico deles. Para colocar de outra forma, para passar uma auditoria, você não pode apenas mostrar os arquivos que você tem, também cabe a você como o auditado para mostrar a prova de validade para cada arquivo.

A abordagem clássica é usar uma ferramenta como tripwire , que avisa quando um arquivo é alterado. Se você está atrás de algo mais poderoso, que permite acompanhar as mudanças, isso é exatamente controle de versão . O Debian fornece controle de versão turnkey para /etc via etckeeper . Não faz parte da instalação padrão (infelizmente). Instale o pacote, selecione seu sistema de controle de versão favorito em /etc/etckeeper/etckeeper.conf e execute etckeeper init . Todas as alterações em /etc serão confirmadas automaticamente todas as noites e antes e depois de executar apt-get ou outros front ends do APT; você pode desabilitar esses auto-commits para forçar o administrador a executar etckeeper commit manualmente (e inserir uma mensagem de log).

    
por 06.05.2011 / 01:01
0

Se você realmente quer um sistema de compilação limpo e consistente, pode ser melhor com os instantâneos do sistema de arquivos, como o que o LVM oferece. Você pode instalar um sistema com sistemas de arquivos como / usr no LVM. Em seguida, você pode criar um instantâneo de todos os sistemas de arquivos que deseja restaurar em seu estado original por meio do comando lvsnapshot . Você pode montar esses instantâneos como graváveis no lugar de suas montagens normais. Quando você quiser reverter para o estado anterior, apenas desmonte, exclua e recrie os instantâneos e monte os novos instantâneos novamente. Se você deseja manter / home ou outros sistemas de arquivos em seu estado atual, você pode colocá-los no LVM, mas não criar um instantâneo para eles.

Outra abordagem que uso ao testar implantações de software ou discos de instalação personalizados é usar uma máquina virtual como o VirtualBox ou a estação de trabalho do VMware. Estes podem ter instantâneos de disco inteiros e restaurá-los a pedido. Também tem benefícios como pausar a máquina enquanto o host é reinicializado. Depois que a máquina virtual é iniciada, ela é retomada do estado em que foi pausada. O VirtualBox, em particular, pode fazer com que vários snapshots de disco sejam revertidos para qualquer snapshot antigo, mantendo-os. Você poderia ir entre duas ou mais linhas de instantâneos, se necessário.

    
por 05.05.2011 / 12:58