Existe alguma maneira no unix de descobrir quem acessou determinado arquivo na última semana? Pode ser usuário ou algum script, faça o ftp para outro local. Posso obter uma lista do nome de usuário que acessou determinado arquivo? Como posso descobrir quem está acessando um arquivo específico?
A menos que você tenha políticas de registro extremamente incomuns, quem acessou o arquivo que não está registrado (isso seria uma enorme quantidade de informações). Você pode descobrir quem estava conectado a que horas nos logs do sistema; o lastcomando fornece o histórico de login e outros logs, como /var/log/auth.logo dirá como os usuários se autenticaram e de onde eles fizeram 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 gravam, porque ele tem uma (geralmente pequena) penalidade de desempenho. ls -ltu /path/to/fileou stat /path/to/filemostra 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/toimprimirá uma linha /path/to/ ACCESS filequando alguém ler file. Essa interface não informa quem acessou o arquivo; você pode ligar lsof /path/to/fileassim que essa linha aparecer, mas há uma condição de corrida (o acesso pode terminar quando lsof começar).
O LoggedFS é um sistema de arquivos empilhável que fornece uma visão de uma árvore do sistema de arquivos e pode executar um log mais sofisticado de todos os acessos através dessa 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. Verifique se o auditddaemon foi iniciado e, em seguida, configure com o qual deseja fazer logon auditctl. Cada operação registrada é registrada em /var/log/audit/audit.log(em distribuições típicas). Para começar a assistir um arquivo específico:
auditctl -w /path/to/file
Se você colocar uma observação em um diretório, os arquivos nele e seus subdiretórios recursivamente também serão observados.
Obrigado Gilles .. Eu tenho esse arquivo dat criado pelo script. Eu só quero saber o que acontece com esse arquivo depois que ele está sendo criado .. não dos outros scripts são pegá-la para posterior processo assim que eu quero ver se alguém está acessando manualmente que dat arquivo
Jack
@Jack: É difícil dizer sem saber muito mais sobre sua configuração, mas enquanto nada remover ou renomear o arquivo, estará disponível para os outros scripts buscá-lo, independentemente de alguém estar acessando ou não. Pelo seu comentário, acho que você deveria observar o que acontece quando você executa seus scripts.
Gilles 'SO- stop be evil'
2
Ei, você poderia criar um loop circular agradável com este:syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
penguin359
7
O exemplo acima com inotifywait deve ser um dos (consulte a página do manual para obter mais informações):
inotifywait /path/to/file
inotifywait -e open /pat/to/file
Ou com o modo de monitoramento e o carimbo de data e hora:
Se você deseja algo que funcione em várias plataformas ( inotifyé específico do Linux) e está usando Java, o JNotify funciona em várias plataformas (Linux, Mac, Windows), abstraindo a API subjacente do SO nativo.
Bem-vindo ao Stack Exchange . As respostas não são apresentadas em ordem cronológica; portanto, a "resposta anterior" não indica qual resposta você quer dizer. Eu me pergunto a qual dos outros dois você está se referindo de qualquer maneira: um não tem nada que pareça uma boa ou má prática e o outro menciona a API inotify.
Gilles 'SO- stop be evil'
Provavelmente Glen se refere à resposta acima com a classificação padrão dos votos. De fato, a resposta mais popular falha em apresentar uma solução para a pergunta. Pode haver várias razões pelas quais é necessário ver quantas vezes um arquivo é acessado por um determinado período de tempo.
Wtower 3/03/2017
1
Conforme explicado em unix.stackexchange.com/a/12251/20336, a API inotify não fornece informações sobre quem acessou um determinado arquivo. Além disso, o inotify realmente não ajuda a descobrir quem acessou o arquivo na semana passada. Você precisa de recursos de auditoria para isso, o que requer o uso de software chamado auditd(no entanto, mesmo isso não ajuda em descobrir quem acessou o arquivo na semana passada, a menos que você já auditdestivesse executando na semana passada).
Mikko Rantalainen
3
Isso não é, em geral, viável. Eu já vi sistemas de arquivos com auditoria suficiente para tornar isso possível de uma maneira ou de outra, mas não é uma coisa geral do Unix, não.
syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
O exemplo acima com inotifywait deve ser um dos (consulte a página do manual para obter mais informações):
Ou com o modo de monitoramento e o carimbo de data e hora:
fonte
A resposta anterior não é a melhor prática para fazer o que você pede. O Linux tem uma API para isso. A
inotify
API http://linux.die.net/man/7/inotifyinotify
API diretamenteinotify
inotify
é específico do Linux) e está usando Java, o JNotify funciona em várias plataformas (Linux, Mac, Windows), abstraindo a API subjacente do SO nativo.fonte
auditd
(no entanto, mesmo isso não ajuda em descobrir quem acessou o arquivo na semana passada, a menos que você jáauditd
estivesse executando na semana passada).Isso não é, em geral, viável. Eu já vi sistemas de arquivos com auditoria suficiente para tornar isso possível de uma maneira ou de outra, mas não é uma coisa geral do Unix, não.
fonte