É possível descobrir qual programa ou script criou um determinado arquivo?

31

Três arquivos apareceram de repente no meu diretório pessoal, chamado "client_state.xml", "lockfile" e "time_stats_log". Os dois últimos estão vazios. Eu estou querendo saber como eles chegaram lá. Não é a primeira vez que isso acontece, mas a última vez foi há semanas; Eu apaguei os arquivos e nada quebrou ou reclamei. Não consegui pensar no que estava fazendo no momento informado por stat $filename . Existe alguma maneira de descobrir de onde eles vieram?

Como alternativa, existe uma maneira de monitorar o diretório inicial (mas não os subdiretórios) para a criação de arquivos?

    
por Wolf 18.01.2011 / 20:40

4 respostas

18

Eu não acredito que exista uma maneira de determinar qual programa criou um arquivo, uma vez que ele existe. Você pode observar o arquivo a ser recriado, usando inotify . inotifywait é uma interface da linha de comandos para o subsistema inotify ; você pode dizer para procurar create eventos no seu diretório pessoal:

$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526

$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file

Você provavelmente deseja executá-lo com -m (monitor), que diz para não sair depois de ver o primeiro evento

    
por 18.01.2011 / 20:47
21

Você pode assistir a tudo que acontece em um sistema de arquivos acessando-o LoggedFS . Este é um sistema de arquivos empilhados que registra todos os acessos em uma árvore de diretórios.

loggedfs -l /var/tmp/$USER-home-fs.log ~

Registrar todo o seu diretório home pode diminuir seu sistema. Você pelo menos deseja escrever um arquivo de configuração com filtros rigorosos.

Se você tem acesso root, no Linux, você pode usar o subsistema de auditoria para registrar um grande número de coisas , incluindo acessos ao sistema de arquivos. Certifique-se de que o daemon auditd foi iniciado e configure o que você deseja registrar com auditctl . Cada operação registrada é registrada em /var/log/audit/audit.log (em distribuições típicas). Para começar a assistir a um arquivo específico:

auditctl -w /path/to/file

ou na forma longa

auditctl -a exit,always -F path=/path/to/file

Se você colocar um relógio em um diretório (com -w ou -F dir= ), os arquivos nele e seus subdiretórios serão também assistidos recursivamente.

    
por 18.01.2011 / 22:30
3

Você pode querer dar uma olhada em auditd , este pacote permite fazer auditoria de segurança e obter muitas informações sobre quem alterou o que está no sistema de arquivos.

    
por 13.10.2011 / 12:46
2

Você não tem inotify para poder escrever um script que verifique o arquivo em um loop:

#!/bin/sh

while [ true ]; do                     # Run for as long as nessesary
  if [ -f /path/to/file ]; then        # If fileexists
    echo "Found file"                  # Notify and stop monitoring
    exit 0
  fi
  sleep 5                             # Else wait 5 secs
done
    
por 18.01.2011 / 20:53