Rastreie o acesso a uma árvore de diretórios

4

Situação

Eu tenho um diretório /home/foo em um servidor, e acho que não é mais necessário.

Infelizmente, ninguém pode me dizer se esse diretório ainda é necessário.

Meta

Se esse diretório ainda for necessário, quero saber qual processo o acessa.

Estratégia atual

Assista a todos os arquivos abertos abaixo deste diretório.

Por que não inotify

Infelizmente, o diretório contém muitos subdiretórios, e é por isso que não quero usar o inotify.

  • 1604508 arquivos
  • 287253 subdiretórios

Pergunta

Como posso assistir a todos os arquivos abertos abaixo de uma árvore de diretórios (recursiva)? Eu quero saber qual processo o acessa.

Ambiente

  • /home é um sistema de arquivos ext4.
  • SuSE Linux 12.3. Kernel: 3.7.10

Não duplicado

Minha pergunta não é uma duplicata de É possível descobrir qual programa ou script criou um determinado arquivo? desde ....:

  • Não consigo usar o inotify, pois a árvore de diretórios contém muitos subdiretórios.
  • Não consigo usar o loggedfs: não consigo alterar o tipo de sistema de arquivos desse diretório.

Recompensa

Já existem duas boas respostas. Mas estou curioso, talvez existam outras maneiras: Recompensa de 50: -)

    
por guettli 26.04.2016 / 12:29

3 respostas

7

Você deve ser capaz de usar auditd (embora dependa da distribuição do Linux disponível).

O comando auditctl é usado para configurar a auditoria, e a página man deve descrever como conseguir o que você precisa.

Algo como

auditctl -w /home/foo -p war -k foo-watch

Você pode pesquisar o log de auditoria mais tarde usando

ausearch -k foo-watch

Um exemplo de como fazer isso no SUSE pode ser encontrado aqui .

    
por 26.04.2016 / 12:40
5

Não sei se está habilitado no SuSE, mas o fanotify api observa todo um sistema de arquivos. Existe até um utilitário simples fatrace que mostrará cada arquivo sendo aberto, lido, escrito, fechado. Exemplo

$ cd; sudo fatrace -f O -c 
tail(1500): CO /home/meuh/dot/privoxy/logs/160426
ls(28599): O /home/meuh
bash(2075): O /home/meuh/dot/bashhistory.xt-right

O -f O é apenas para rastrear as aberturas e -c para rastrear apenas o sistema de arquivos inteiro que contém o diretório de trabalho atual. Você pode, opcionalmente, obter um timestamp também.

    
por 26.04.2016 / 13:57
1

Eu posso ver várias maneiras:

  • se o seu sistema de arquivos contendo / home / foo for montado com o atime (ou equivalente para o tipo do seu sistema de arquivos), você poderá usar find /home/foo -atime +10 -ls para ver se algum de seus arquivos foi acessado em menos de 11 dias

  • ou se você preferir "cutucar" e ver se agora algo é acessado sob este diretório: lsof | grep /home/foo deve dar uma pista (para testar: cd /home/foo ; lsof | grep /home/foo : should pelo menos produz o pid do seu shell, já que agora ele tem seu cwd (diretório de trabalho atual) sob esse caminho ...)

(nota: não posso testar os dois agora, sem linux à mão ... mas acho que ambos devem funcionar)

    
por 18.05.2016 / 11:08

Tags