Utilizando o RPM como ferramenta de recovery e auditoria

Publicado por Marcelo Moreira de Mello em 19/10/2009

[ Hits: 7.538 ]

Blog: http://tchellomello.blogspot.com

 


Utilizando o RPM como ferramenta de recovery e auditoria



Olá pessoal,

Hoje pretendo demonstrar como podemos utilizar o sistema RPM para recuperarmos permissões de arquivos e verificarmos quando um arquivo ou binário foi alterado no sistema.

O RPM (Red Hat Package Manager) é uma ferramenta poderosa que nos permite não só instalar ou remover softwares, mas também verificar o estado de cada arquivo do sistema que foi oferecido por pacotes RPM. Quem nunca acidentalmente executou um "chmod 777 -R /" ou até mesmo um "chown nobody:nobody -R /"?!?! (é... esse eu peguei pesado, mas vale como exemplo :P). Ou até mesmo se perguntou: será que o binário /bin/ls foi alterado no servidor de produção!?!

Podemos verificar as situações colocadas acima utilizando o comando RPM com parâmetro --verify (V), que consiste em pesquisar no banco de dados do rpm (/var/lib/rpm) quais arquivos foram modificados desde a instalação do pacote.

Se quiséssemos verificar se o binário /bin/ls foi alterado em nosso sistema, a primeira informação que precisamos adquirir será saber qual o pacote RPM que ofereceu o binário /bin/ls. Para isso, podemos:

# rpm -qf /bin/ls
coreutils-5.97-12.1.el5

Uma vez descoberto o pacote de origem do binário, podemos verificar se todos os arquivos oferecidos pelo pacote coreutils foram alterados desde a sua instalação na máquina:

# rpm -V coreutils
#


A saída do comando acima nos mostrou que nenhum binário foi alterado no sistema desde a sua instalação. O que faremos agora é forçar um erro, isto é, substituir algum binário que foi instalado pelo pacote coreutils e fazer a verificação novamente.

# cp /bin/date /bin/ls
cp: overwrite `/bin/ls'? y
# ls
Sat Oct 17 11:23:07 BRT 2009

Pronto! Substituímos o binário /bin/ls pelo comando /bin/date e agora refaremos a checagem através do RPM.

# rpm -V coreutils
S.5....T /bin/ls

A saída do comando nos mostrou que o Size (S), o MD5 (5) e o Timestamp (T) foram alterados no binário /bin/ls desde a instalação. Podemos concluir se o MD5 do binário esta diferente logo o binário foi alterado. Para corrigirmos, teremos que reinstalar o RPM no sistema.

# rpm -ivh coreutils-5.97-12.1.el5.i386.rpm --replacepkgs
warning: coreutils-5.97-12.1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:coreutils              ########################################### [100%]
# ls

anaconda-ks.cfg

install.log

coreutils-5.97-12.1.el5.i386.rpm

install.log.syslog
# rpm -V coreutils #

Se quiséssemos realizar uma checagem em todo os arquivos do sistema, poderíamos executar o comando "rpm -Va". Esse recurso também é interessante para controlarmos mudanças em arquivos texto e gerenciarmos permissões e proprietários de arquivos.

Primeiro verificaremos qual pacote RPM oferece o arquivo /etc/inittab e checaremos se o arquivo foi alterado desde a instalação do pacote.

# rpm -qf /etc/inittab
initscripts-8.45.17.EL
# rpm -V initscripts
..5....T c /etc/inittab
S.5....T c /etc/rc.d/rc.local

Como podemos ver acima, o arquivo /etc/inittab teve o conteúdo alterado 5(MD5) e o T(Timestamp) e o arquivo /etc/rc.d/rc.local além do conteúdo, o tamanho também foi alterado.

Poderíamos piorar a situação fazendo o seguinte:

# ls -la /etc/inittab
-rw-r--r-- 1 root root 1666 Oct 17 09:41 /etc/inittab
# chmod 777 /etc/inittab
# chown nobody:nobody /etc/inittab
# ls -la /etc/inittab

-rwxrwxrwx 1 nobody nobody 1666 Oct 17 09:41 /etc/inittab

Se consultarmos agora, veremos que as permissões do arquivo foram alteradas M(Mode), bem como o proprietário U(User) e grupo G(Group).

# rpm -V initscripts
.M5..UGT c /etc/inittab
S.5....T c /etc/rc.d/rc.local

Podemos usar o RPM para recuperar as permissões e proprietários dos arquivos chamando as opções --setperms e --setugids respectivamente.

# rpm -q initscripts --setperms
# ls -la /etc/inittab

-rw-r--r-- 1 nobody nobody 1666 Oct 17 09:41 /etc/inittab
# rpm -V initscripts
..5..UGT c /etc/inittab
S.5....T c /etc/rc.d/rc.local
# rpm -q initscripts --setugids
# ls -la /etc/inittab

-rw-r--r-- 1 root root 1666 Oct 17 09:41 /etc/inittab
# rpm -V initscripts
..5....T c /etc/inittab
S.5....T c /etc/rc.d/rc.local

Como podemos ver, o RPM restaurou as permissões e proprietários originais do arquivo. Isto é, se um dia algum administrador descuidado executar "chmod 777 -R /", você poderia executar o comando "rpm -qa --setperms" para recuperar todos os arquivos que originalmente foram criados por pacotes RPM.

Para maiores informações: http://tchellomello.blogspot.com

Acho que era isso aí.. ;)
Abraços.

Outras dicas deste autor

Dedicando uma CPU para processos específicos

Ataque de dicionário com OpenSSL - quebrando senhas

Tunando o sistema de arquivos - entendendo o journal do EXT3

Ativando e desativando CPUs sob demanda

Atualizando o seu Fedora com o Preupgrade

Leitura recomendada

LILO - Gerenciador de boot para Linux

Configurando dispositivo wireless Atheros 5006EG no Ubuntu Gutsy

Linux: o que é preciso para as pessoas começarem a usar?

Conectando Apache/PHP e OCI Oracle

ShellBot - API em shell script para criação de bots no Telegram

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts