Monitoramento do acesso a arquivos do Linux

17

Existe alguma maneira no unix para descobrir quem acessou determinado arquivo na última semana? Pode ser usuário ou algum script ftp para algum outro lugar. Posso obter uma lista de nome de usuário que acessou determinado arquivo? Como posso descobrir quem está acessando determinado arquivo?

    
por Jack 28.04.2011 / 22:36

4 respostas

34

A menos que você tenha políticas de log extremamente incomuns, quem acessou o arquivo que não está logado (isso seria uma enorme quantidade de informações). Você pode descobrir quem estava logado em que horas nos logs do sistema; o comando last fornece um histórico de login e outros registros, como /var/log/auth.log , informam como usuários autenticados e de onde efetuaram login (qual terminal ou qual host, se remotamente).

A data em que um arquivo foi lido pela última vez é chamada de tempo de acesso ou atime . Todos os sistemas de arquivos unix podem armazená-lo, mas muitos sistemas não o registram, porque ele tem uma penalidade de desempenho (geralmente pequena). ls -ltu /path/to/file ou stat /path/to/file mostra o tempo de acesso do arquivo.

Se um usuário acessou o arquivo e não estava tentando ocultar suas faixas, seu histórico de shell (por exemplo, ~/.bash_history ) pode ter pistas.

Para descobrir o que ou quem tem um arquivo aberto agora, use lsof /path/to/file .

Para registrar o que acontece com um arquivo no futuro, existem algumas maneiras:

  • Use inotifywait . inotifywait -e access /path/to imprimirá uma linha /path/to/ ACCESS file quando alguém ler file . Essa interface não informa quem acessou o arquivo; você pode chamar lsof /path/to/file assim que esta linha aparecer, mas há uma condição de corrida (o acesso pode terminar no momento em que o lsof estiver indo).

  • LoggedFS é um sistema de arquivos empilhável que fornece uma visão de uma árvore do sistema de arquivos, e pode realizar registros mais extravagantes de todos os acessos através de essa visão. Para configurá-lo, consulte Sintaxe do arquivo de configuração do LoggedFS .

  • Você pode usar o subsistema de auditoria do Linux 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
    

    Se você colocar um relógio em um diretório, os arquivos nele e seus subdiretórios também serão assistidos de forma recursiva.

por 28.04.2011 / 23:05
4

A resposta anterior é não a melhor prática para fazer o que você pede. O Linux tem uma API para isso. O link inotify API

  1. Você pode escrever um programa em C para fazer o que quiser, apenas chamando a API inotify diretamente
  2. Você pode usar o kfsmd, link , um daemon que usa inotify
  3. Se você quiser algo que funcione em plataformas ( inotify é específico do Linux) e estiver usando Java, o JNotify funciona em várias plataformas (Linux, Mac, Windows), abstraindo a API subjacente do sistema operacional nativo.
por 29.04.2011 / 10:47
4

O exemplo acima com inotifywait deve ser um dos (veja man page para mais informações):

inotifywait /path/to/file
inotifywait -e open /pat/to/file

Ou com o modo de monitoramento e o registro de data e hora:

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'
    
por 05.09.2016 / 10:05
3

Isso não é, em geral, viável. Eu vi sistemas de arquivos com auditoria suficiente para tornar isso possível de uma forma ou de outra, mas não é uma coisa geral do Unix, não.

    
por 28.04.2011 / 23:07