OSX: событие чтения файла хука - PullRequest
1 голос
/ 02 июля 2010

У меня есть определенный файл, который я хочу отслеживать для попыток чтения файлов всеми приложениями в OSX. Я хотел бы иметь возможность прерывать запросы, чтобы я мог решить, какие приложения имеют разрешение на чтение файла, а какие нет (путем запроса пользователя или проверки кэша пользовательских ответов). Возможно ли это с OSX API? Если нет, то возможно ли получить список приложений или процессов, которые читают файл?

Ответы [ 3 ]

1 голос
/ 02 июля 2010

Я не говорю, что нет никакого способа сделать это, но то, о чем @Jonathan говорит, не так ли.

Этот API предназначен для отслеживания создания, изменения и уничтожения файлов. В частности, этот инструмент используется такими вещами, как Spotlight, чтобы наблюдать активность в файловой системе новых интересных файлов.

Но, мудро, чтение не является одним из отслеживаемых событий.

И даже если чтение WAS отслеживается, это по-прежнему неправильный механизм, так как это система оповещения по факту, не соответствующая самому вызову.

Я серьезно сомневаюсь, что то, что вы хотите, возможно так, как вы это описываете.

С помощью Списков контроля доступа вы можете ограничить доступ на уровне пользователя (Фред может читать файл, но Боб не может). Это настройка самого файла. Но нет механизма, позволяющего Bobs App1 читать файл, в то время как Bobs App2 не может этого сделать, поскольку на самом деле не существует формального механизма «идентификации приложения», кроме выполняемой команды или чего-либо, что программа «говорит», его имя (оба из которых может быть подделан, если достаточно мотивирован).

Однако, не стесняйтесь сканировать источники Дарвина - без сомнения, ответ закопан где-то рядом с открытым (2) вызовом.

РЕДАКТИРОВАТЬ, относительно комментария.

Что вы пытаетесь сделать? Каков общий контекст?

Еще одна вещь, которую вы можете попробовать, это использовать FUSE.

FUSE - это утилита, которая позволяет вам иметь "файловые системы пространства пользователя". Люди используют FUSE для многих целей, таких как чтение томов NTFS или монтирование удаленной системы через SSH.

У них есть простой пример, который дает вам скелет, который вы можете заполнить для своих целей.

В большинстве случаев вы просто откладываете в систему. Однако для OPEN вы добавите свою логику. Затем вы можете указать вашей утилите FUSE каталог и «смонтировать его». Тогда все файлы в этом каталоге могут использовать ваше новое поведение.

Я все еще не уверен, как вы будете идентифицировать приложения по имени, но если это не настоящая проблема "безопасности", просто для локального контроля, я думаю, вы можете придумать что-нибудь. В Activity Monitor есть имена приложений, поэтому они должны быть доступны, и FUSE будет работать в пространстве процесса (я думаю), а не через какой-то внешний механизм.

С учетом всего вышесказанного, я думаю, что FUSE - ваша лучшая ставка, но, вероятно, это неуместно, если вы хотите сделать это для «любого файла» без предварительной подготовки пользователем (например, без установки FUSE). Если вы хотите сделать «любой файл», ваша система FUSE должна быть смонтирована в корне, и тогда у вас просто будет полный «клон» файловой системы, причем эти файлы из обычного корня «незащищены», а те от вашего нового FUSE root будет защищен. Так что, если кто-то хочет НЕ использовать вашу систему FUSE, реальный файл легко доступен для него через фактическое местоположение файла.

0 голосов
/ 28 июля 2011

Если нет, то возможно ли вообще получить список приложений или процессов, которые читают файл?

Инструмент командной строки fs_util позволяет отслеживать активность файловой системы, включаячтение.

0 голосов
/ 02 июля 2010

Писания Амита Сингха должны пригодиться.Он исследовал API, который предоставляет события FileSystem несколько лет назад, и предоставил образец инструмента , который позволяет перехватывать события FS.Это открытый исходный код!

Если я правильно помню его выводы, они не являются официальным API, но вы можете использовать инструменты Apple для достижения того, чего вы хотите.

...