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.
Nenhum comentário foi encontrado.