No Linux, como executo um programa quando um arquivo não existente dentro de um determinado diretório é lido?

2

Eu tenho uma partição em um disco rígido que é criptografado com dm-crypt usando uma frase secreta. O que eu quero fazer é ter um prompt de senha pop-up quando algum programa tenta ler um arquivo dentro desse ponto de montagem de destino de partições.

Eu normalmente montei o meu volume dm-crypt no diretório /mnt/crypt . Quando montado, dentro deste diretório é uma pasta "Music" que tem o arquivo goodmusic.mp3 nele. Então o caminho é /mnt/crypt/Music/goodmusic.mp3.

Se eu iniciar o Clementine e tentar reproduzir esse arquivo sem o volume criptografado sendo montado, receberei um erro "arquivo não encontrado".

O que eu quero fazer é, quando o Clementine tentar abrir um arquivo neste diretório ( /mnt/crypt ), ter um prompt que solicite a minha senha de montagem e monte o volume. Eu acho que, para que isso funcione, o syscall de "leitura" precisa ser bloqueado enquanto o prompt de senha é mostrado, para que o syscall de leitura não retorne um erro imediatamente, antes de eu ter a chance de digitar meu frase secreta.

Isso é possível?

Eu tenho jogado com inotify, mas parece não suportar eventos para arquivos não existentes.

    
por runeks 02.11.2013 / 19:29

1 resposta

1

(1)
inotify não relata tentativas de acesso / leitura / gravação em arquivos não existentes.
Na verdade, eles não são tratados como eventos porque esses arquivos não existem.

(2)

What I want to do is, when Clementine tries to open a file in this directory (/mnt/crypt), have a prompt pop up that asks for my mount password and mounts the volume. I guess, in order for it to work, the "read" syscall needs to block while the password prompt is shown, so that the read syscall won't report back an error immediately, before I've had a chance to type in my passphrase.

É bem complicado. Uma solução possível é ligar a chamada de sistema open da glibc e redefinir sua própria versão. Sua versão de open apenas age como o que você descreve, de acordo com o arquivo / dirctory que um processo tenta acessar.

referência:
link

    
por 05.12.2013 / 10:27

Tags