Wie führe ich unter Linux ein Programm aus, wenn versucht wird, eine nicht vorhandene Datei in einem bestimmten Verzeichnis zu lesen?

978
runeks

Ich habe eine Partition auf einer Festplatte, die mit dm-crypt mit einer Passphrase verschlüsselt ist. Was ich tun möchte, ist die Aufforderung zur Kennworteingabe, wenn ein Programm versucht, eine Datei innerhalb des Ziel-Mount-Punkts dieser Partitionen zu lesen.

Z.B. Normalerweise mounte ich mein dm-crypt-Volume im Verzeichnis /mnt/crypt. In diesem Verzeichnis befindet sich ein "Music" -Ordner, in dem sich die Datei goodmusic.mp3 befindet. Der Pfad lautet also /mnt/crypt/Music/goodmusic.mp3.

Wenn ich Clementine starte und versuche, diese Datei abzuspielen, ohne dass das verschlüsselte Volume angehängt ist, wird die Fehlermeldung "Datei nicht gefunden" angezeigt.

Was ich tun möchte, ist, wenn Clementine versucht, eine Datei in diesem Verzeichnis ( /mnt/crypt) zu öffnen, eine Eingabeaufforderung eingeblendet wird, in der nach meinem Mount-Kennwort gefragt wird und das Volume angehängt wird. Um zu funktionieren, muss der "read" -Syscall blockiert werden, während die Kennwort-Eingabeaufforderung angezeigt wird, damit der gelesene Syscall keinen Fehler sofort zurückmeldet, bevor ich die Möglichkeit hatte, meinen einzugeben Passphrase.

Ist das möglich?

Ich habe mit inotify gespielt, aber es scheint keine Ereignisse für nicht vorhandene Dateien zu unterstützen.

2
Audit-Subsystem Ignacio Vazquez-Abrams vor 10 Jahren 1
Sieht nach einer Frage für [su] aus. Michael Hampton vor 10 Jahren 0
Sie können ein Shell-Skript schreiben, das beim Starten von Clementine `/ mnt / crypt` einfügt. Nazar554 vor 10 Jahren 0

1 Antwort auf die Frage

1
zeekvfu

(1)
inotifymeldet keine Zugriffs- / Lese- / Schreibversuche für nicht vorhandene Dateien.
In der Tat werden sie nicht als Ereignisse behandelt, da diese Dateien überhaupt nicht existieren.

(2)

Was ich tun möchte, ist, wenn Clementine versucht, eine Datei in diesem Verzeichnis (/ mnt / crypt) zu öffnen, eine Eingabeaufforderung eingeblendet wird, die nach meinem Mount-Kennwort fragt und das Volume einbindet. Um zu funktionieren, muss der "read" -Syscall blockiert werden, während die Kennwort-Eingabeaufforderung angezeigt wird, damit der gelesene Syscall keinen Fehler sofort zurückmeldet, bevor ich die Möglichkeit hatte, meinen einzugeben Passphrase.

Das ist ziemlich kompliziert. Eine mögliche Lösung besteht darin, den openSystemaufruf der glibc anzuhängen und Ihre eigene Version neu zu definieren. Ihre Version openverhält sich genau wie das, was Sie beschreiben, je nach Datei / Verzeichnis, auf das ein Prozess zugreifen möchte.

Referenz:
http://en.wikipedia.org/wiki/Hooking
http://www.gilgalab.com.br/hacking/programming/linux/2013/01/11/Hooking-Linux-3-syscalls/