Utilizando o RPM como ferramenta de recovery e auditoria

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

[ Hits: 7.395 ]

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

Atualizando o seu Fedora com o Preupgrade

Ativando e desativando CPUs sob demanda

Tunando o sistema de arquivos - entendendo o journal do EXT3

Leitura recomendada

AMSN 0.98b com webcam + chamada de voz no Slackware 13 RC2

Impressora HP Laserjet 2600n no Slackware Linux 12.1 em rede

Coloque seu papo em dia com Pidgin multi-protocolo

Pegar MMS de rádios online e salvar as músicas em segundos

Borracha e pincel quadrados e preenchidos no Gimp

  

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