Interceptando eventos de acesso a arquivos

0

Eu gostaria de criar um código que possa saber quando outro aplicativo está tentando abrir ou gravar um arquivo e também impedir esse acesso. É possível ? Como ?

Por exemplo, para um arquivo zip contendo um vídeo, abrir o arquivo com o VLC levaria minha ferramenta a impedir que o VLC abra o arquivo, descompacte o arquivo em uma pasta temporária e reabra o vídeo com vlc.

Não estou interessado em quão ruim é essa idéia, é mais sobre curiosidade pessoal e desafio técnico. E não é sobre zip e VLC, é o meu próprio contêiner de arquivos.

Sou novo no kernel do Linux.

    
por Krag 25.09.2017 / 15:33

2 respostas

1

Módulos de segurança do Linux são projetados para controlar o acesso a recursos, como arquivos:

LSM was designed to provide the specific needs of everything needed to successfully implement a mandatory access control module ... LSM inserts "hooks" (upcalls to the module) at every point in the kernel where a user-level system call is about to result in access to an important internal kernel object such as inodes and task control blocks.

Para implementar isso, acho que você teria que criar um driver de dispositivo que transmitisse eventos como " open() foi chamado. O VLC está abrindo um arquivo zip com um vídeo" para um processo de espaço do usuário que descompactaria o arquivo apropriado e retornaria o nome do arquivo descompactado, o qual seu módulo LSM passaria então para a chamada real de kernal open . E, em seguida, na chamada close() correspondente, você passaria esse evento do seu módulo LSM para o processo de espaço do usuário para que ele pudesse excluir o arquivo de vídeo descompactado.

Não é uma tarefa trivial. Entre outras coisas, você precisa ter muito cuidado para não apresentar grandes falhas de segurança: "Ei, isso pode ser usado para reescrever /etc/shadow !"

    
por 26.09.2017 / 12:48
-1

Não tenho certeza se os recursos padrão do Solaris permitiriam monitorar open() chamadas, mas é possível monitorar o acesso de gravação.

Verifique as páginas do manual por exemplo port_create() e dê uma olhada em /usr/include/port.h .

Também pode ser interessante verificar usr / src / cmd / tail no Illumos para a implementação de tail -f acionada por eventos.

    
por 28.06.2018 / 14:35