В Linux, как мне запустить программу, когда несуществующий файл в определенном каталоге пытается прочитать?
У меня есть раздел на жестком диске, который зашифрован с помощью dm-crypt с использованием ключевой фразы. То, что я хочу сделать, - это всплывающее окно с запросом пароля, когда какая-либо программа пытается прочитать файл в этой целевой точке монтирования разделов.
Например. Я обычно монтирую свой том dm-crypt в каталог /mnt/crypt
, При подключении внутри этого каталога находится папка "Музыка", в которой находится файл goodmusic.mp3. Таким образом, путь /mnt/crypt/Music/goodmusic.mp3.
Если я запускаю Clementine и пытаюсь воспроизвести этот файл без смонтированного зашифрованного тома, я получу ошибку "file not found".
Что я хочу сделать, это когда Клементина пытается открыть файл в этом каталоге (/mnt/crypt
), появится всплывающее окно с запросом моего пароля для монтирования и монтированием тома. Я предполагаю, что для того, чтобы он работал, системный вызов "read" должен блокироваться, пока отображается приглашение на ввод пароля, чтобы системный вызов read не сразу сообщал об ошибке, пока у меня не было возможности ввести свой ключевая фраза.
Это возможно?
Я играл с inotify, но он не поддерживает события для несуществующих файлов.
1 ответ
(1)inotify
не сообщает о попытках доступа / чтения / записи к несуществующим файлам.
На самом деле, они не рассматриваются как события, потому что эти файлы не существуют вообще.
(2)
Что я хочу сделать, так это то, что когда Клементина пытается открыть файл в этом каталоге (/mnt/crypt), появляется всплывающее окно с запросом моего пароля для монтирования и монтирования тома. Я предполагаю, что для того, чтобы он работал, системный вызов "read" должен блокироваться, пока отображается приглашение на ввод пароля, чтобы системный вызов read не сразу сообщал об ошибке, пока у меня не было возможности ввести свой ключевая фраза.
Это довольно сложно. Одним из возможных решений является зацепка open
Системный вызов и переопределите свою собственную версию. Ваша версия open
просто действует как то, что вы описываете, в соответствии с файлом / каталогом, к которому пытается получить доступ процесс.
ссылка:
http://en.wikipedia.org/wiki/Hooking
http://www.gilgalab.com.br/hacking/programming/linux/2013/01/11/Hooking-Linux-3-syscalls/