Pyinotify, abordagem simples
Como você solicitou Python
entre possíveis variações de soluções, existe o módulo pyinotify
do Python. Estou usando pessoalmente o Python 3. A solução pode ser tão simples quanto python3 -m pyinotify <FILE>
ou você pode escrever um script completo, se necessário.
Veja um exemplo em ação:
Script
Umapossibilidadedeumscriptpersonalizadopodeserfeitaatravésdamodificaçãodotutorialfornecidono
#!/usr/bin/env python3
import pyinotify
import sys
class EventHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
print("File",sys.argv[1]," was modified:",event.pathname)
wm = pyinotify.WatchManager()
mask = pyinotify.IN_MODIFY
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch(sys.argv, mask, rec=True)
notifier.loop()
E aqui está um pequeno teste:
Levandomaislonge
Emambososcasos,tudooquevocêprecisafazeréiniciarocomandocomprivilégiosderootpormeiode/etc/rc.local
ouviacron
,eéisso.Asaídapodeserenviadaparaalgumtipodearquivodelogouparaenviarumanotificaçãoaousuárioadmin.Pessoalmente,eulançariadoiscomandos-umcomprivilégiosderootquegravaemumarquivodelogeoutroqueobservaoarquivodelogembuscadealteraçõeseenviaumanotificaçãodaGUIparaousuário.Possibilidadessãoinfinitasaqui,entãousesuaimaginação.
Aprocuradealteraçõespodeserfeitaatravésdamanutençãodobackupdoarquivo(talvezfeitonoiníciodoscript),eassimqueoarquivoformodificado-executediff
ouviapróprioscriptPythonviamd5
ou sha256
hashsums na equação, mas eles não são muito úteis, exceto por saber que o arquivo foi alterado. Outro problema é que a execução de um script notificador não impede alterações que possam ter ocorrido enquanto o sistema estava off-line, ou seja, se alguém inicializasse o USB ao vivo ou saísse do disco rígido e estivesse conectado à máquina dele e só modificasse o arquivo. Isso pode ser mitigado criptografando o disco rígido. Isso também significa que você provavelmente deve verificar as alterações assim que o script for iniciado.
Quanto a descobrir quem alterou o arquivo, considere a possibilidade de correlacionar a data de modificação e a data de login dos usuários como root / sudo. É claro que tenho que avisar: essa é uma tarefa um pouco sem esperança. Um usuário desonesto com habilidades de root pode alterar os logs e apagar a presença desse usuário, deixando pouca ou nenhuma indicação de quem possa ter sido. Os usuários que adquiriram poderes de root podem até alterar seu script. Concluindo, a melhor segurança para evitar que seu arquivo confidencial seja modificado é impedir que qualquer pessoa possa abrir o arquivo em primeiro lugar.