Документация
ОС Аврора 5.1.5

Сервис идентификации приложений

Сервис идентификации приложений предоставляет безопасный API для идентификации стороннего процесса, который отправляет D-Bus запрос текущему процессу. Подробнее…

Шина: сессионная / системная
Служба: ru.omp.am
Объект: /ru/omp/am
Интерфейс: ru.omp.am.Identify

Методы

Подробное описание

Сервис управления приложениями Application Management предоставляет доступ к сервису идентификации приложений.

Сервис идентификации может работать с изолированными, находящимися в контейнере, и с неизолированными процессами, и поддерживает идентификацию процессов, подключенных только к сессионной или системной шине.

Так как приложения, находящиеся в изоляции, имеют собственные PID namespace и обрабатывают все D-Bus запросы через dbus-proxy, необходимо использовать сервис идентификации, чтобы корректно идентифицировать процесс.

Если приложение получает изолированное сообщение с неопределенного адреса, сервис идентификации позволяет проверить всю цепочку и определить, кто был адресатом изначально через dbus-proxy и предоставить реальные идентификаторы обратившегося процесса в системе.

Для изолированных процессов используется D-Bus интерфейс сервиса ru.omp.am.Identify, в частности метод IdentifyByBusName().

Данный сервис имеет широкий спектр предоставляемой информации по процессу, который может быть открыт в API для публичного пользования и получения расширенной информации.

Такой механизм может быть использован, например, если разработчик предоставляет какой-либо интерфейс, но не хочет, чтобы другие процессы могли использовать его, в том числе и системные. В таком случае разработчик сам настраивает фильтрацию того, какие процессы имеют доступ к данному интерфейсу. В целом, consumer может сам распоряжаться полученной информацией. Сервис лишь подтверждает, что процесс находится в системе легально и предоставляет минимально необходимую информацию для его идентификации в системе.

Если consumer разместит свой сервис на сторонней шине, отличной от системной и сессионной, результат идентификации будет неверным, либо возникнет ошибка идентификации. Например, процесс решил обратиться к сервису на сторонней шине и получил в момент подключения к сторонней шине адрес :1.1. Если сервис выполнит идентификацию данного процесса при помощи сервиса идентификации на системной/сессионной шине, он может получить в ответ данные другого процесса, который ранее был зарегистрирован на системной/сессионной шине с именем :1.1, либо может получить ошибку, так как процесс с таким именем на системной/сессионной шине отсутствует.

Разработчику следует использовать шину, на которой зарегистрирован его сервис D-Bus.

В случае, если процесс, находящийся на сессионной шине, обращается к другому процессу, подключенному к системной шине, идентификация будет успешной. Так как процесс на сессионной шине во время запроса на системную шину, автоматически регистрируется на ней.

Описание методов

IdentifyByBusName(string name, string &exe, string &keyid)

Метод идентифицирует процесс по его D-Bus-адресу.

name — это D-Bus-адрес, с которого была совершена попытка вызова метода. Адрес может быть указан в формате :x.xxx либо именованный адрес org.test.service.

Метод возвращает полный путь до исполняемого файла процесса exe и keyid процесса.

Полученный keyid берётся из расширенного атрибута security.ima, а именно из заголовочного файла подписи, что является достаточной и необходимой мерой для идентификации данного процесса в системе как доверенного.

Пример метода в Qt может использоваться в обработчике пользовательского метода для получения D-Bus имени процесса, который вызвал данный метод. В gdbus можно использовать метод g_dbus_method_invocation_get_sender().

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.