Como detectar arquivos ocultos especiais no Linux (por exemplo, .reiser_priv)?

6

Descobri recentemente que há diretórios ocultos especiais encontrados no Linux que não são exibidos com o comando ls -a . O que eu encontrei é o diretório reiserfs_priv localizado na raiz de um sistema de arquivos reiserfs. Eu posso chamar ls -ld .reiserfs_priv e cd no diretório (como root), mas ele não é mostrado com o comando ls -a ( find ./ -name *reiser* também não o encontra).

Perguntas:

  • Como eu realmente detecto esse tipo de diretórios?
  • Posso criar eu mesmo?
  • Que tipo de mecanismo eles usam para permanecer stealth e por que ls -a não os vê?
  • Podem ser arquivos também?
  • Onde esses tipos de diretórios são geralmente usados?
por golem 10.06.2015 / 19:56

1 resposta

2

Você não pode detectar ou criar tais arquivos em geral. Eles existem apenas porque um sistema de arquivos está relatando dados inconsistentes.

Na ausência de modificações no sistema de arquivos, há redundâncias entre várias maneiras de obter informações sobre os arquivos nesse sistema de arquivos. Por exemplo, permissões permitindo:

  • Se um nome de arquivo for relatado por readdir , chamar lstat nesse nome será bem-sucedido.
  • Se lstat não informar que o arquivo é um link simbólico, chamar stat e open também será bem-sucedido.
  • Se stat for bem-sucedido, então open terá êxito '.
  • Se open for bem-sucedido, o mesmo acontecerá com stat e lstat .
  • Se stat informar que um arquivo é um diretório, então cd será bem-sucedido e vice-versa.

E assim por diante. Quando um sistema de arquivos Reiserfs omite a entrada .reiserfs_priv das listagens de diretório e ainda relata isso como um diretório através de chamadas de sistema que o acessam diretamente, o sistema de arquivos está relatando informações inconsistentes.

Esta informação não está errada, apenas inconsistente. Está violando apenas convenções, não regras. O mesmo comportamento poderia ser observado se houvesse um goblin muito rápido que criasse o diretório antes de executar cd ou ls .reiserfs_priv e o removesse antes de executar find .

É uma forma um pouco ruim para um sistema de arquivos reportar dados inconsistentes, porque isso confunde alguns aplicativos e usuários, então isso deve ser feito apenas por uma razão muito boa. No caso do Reiserfs, o motivo é tornar algumas informações bastante ocultas e, em particular, não serem percorridas por pesquisas e indexação de arquivos. Isso é útil porque o conteúdo de .reiserfs_priv não é "real", é usado para armazenar atributos de arquivo estendidos , que são acessados chamando a família de chamadas do sistema *xattr . Na verdade, não sei por que é exposto - talvez apenas para fins de depuração.

Outro exemplo de não reportar arquivos que existem são os sistemas de arquivos que permitem que os mesmos dados sejam retornados de maneiras diferentes. Por exemplo, o ciopfs apresenta uma visão não sensível a maiúsculas e minúsculas de um sistema de arquivos; se você tiver um arquivo chamado Foo , uma listagem de diretórios listará apenas Foo , mas o acesso a foo , FOO , etc. será bem-sucedido.

    
por 11.06.2015 / 01:25