Artigos Recentes

My Twitter


    « Lançamento do livro “A Revolução do Software Livre” no Latinoware 2009. | Main | Revista PC&CIA disponibiliza, gratuitamente, edição 88 em seu site. »

    O desafio: “chmod 000 /bin/chmod”. E agora? O que fazer?

    By admin | Novembro 1, 2009

    Recentemente, postei em minha página no Twitter o desafio de como resolver o seguinte problema:

    "chmod 000 /bin/chmod"

    Com esse comando, você está utilizando o chmod, responsável por mudar as permissões de um arquivo, para retirar todas as permissões do próprio comando chmod. Feito isso, ninguém, nem o administrador de sistemas, estará apto a alterar as permissões dos arquivos do sistema utilizando o próprio comando chmod. Diante disso, o que fazer para resolver o problema?

    Bem, uma das saidas, utilizando apenas recursos dos comandos do próprio sistema operacional e propriedades dos sistemas de arquivos, consiste em utilizar as permissões de um outro arquivo que tenha o modo de execução habilitado substituindo seu conteúdo pelo do próprio comando chmod. Não entendeu? Então, permita-me explicar um pouco melhor.

    Em um sistema de arquivo como o EXT2/EXT3 (e agora o EXT4), por exemplo, os metadados de um arquivo ficam em um local separado do seu conteúdo. Dentre esses metadados estão informações como a data da última modificação, o dono e o grupo do arquivo, seu tamanho e as próprias permissões atribuídas a ele. Em outras palavras, ao substituir o conteúdo de um arquivo, não se altera os atributos tais como as permissões.

    Retomando o cenário após a execução do comando "chmod 000 /bin/chmod", o que nos restará é o comando /bin/chmod com essas características:

    root@scadufax:~# ls -l /bin/chmod
    ———- 1 root root 46664 2008-06-26 21:31 /bin/chmod

    Como foi dito anteriormente, utilizando o chmod, não é possível, mesmo para o super-usuário, alterar permissões de outros arquivos:

    root@scadufax:~# chmod 000 /bin/cp
    -su: /bin/chmod: Permission denied

    Para resolver o problema, é possível aproveitar as permissões de um arquivo que já tenha privilégio de execução e depois substituir o seu conteúdo pelo o do comando chmod. Para isso, basta pegar qualquer comando do diretório /bin e copiá-lo para um diretório qualquer:

    root@scadufax:~# cp -p /bin/cp /tmp
    root@scadufax:~# ls -l /tmp/cp
    -rwxr-xr-x 1 root root 75492 2009-11-01 09:37 /tmp/cp

    Observe que as permissões de execução encontram-se configuradas. Depois, deve-se substituir o conteúdo desse arquivo pelo do comando chmod que não possui quaisquer permissões e copiá-lo novamente para o diretório /bin renomeando-o para chmod novamente:

    root@scadufax:~# cat /bin/chmod > /tmp/cp
    root@scadufax:~# mv /tmp/cp /bin/chmod
    root@scadufax:~# ls -l /bin/chmod
    -rwxr-xr-x 1 root root 46664 2009-11-01 09:42 /bin/chmod

    Pronto… era isso! Antes de você se perguntar o porquê de tudo isso, eu me adianto: pra NADA a não ser se divertir um pouco e conhecer algo a mais  dos sistemas GNU/Linux e de suas características!

    Inicialmente, postei essa questão no Twitter e, pelo menos dois amigos postaram outras soluções. Vou pedir a ambos que postem essas soluções aqui. Se você tiver outras alternativas, registre-as por aqui!

     

    Topics: Dicas e truques |

    Comments