Библиотека MDM
Управление мобильными устройствами (Mobile device management, MDM) является важным требованием для многих сценариев использования, позволяя ограничивать или контролировать функциональность конкретного устройства или парка устройств различными способами или в ответ на определённые события (например, в случае утери или кражи устройства).
ОС Аврора предоставляет фреймворк MDM. Разработанные с его помощью приложения (далее — MDM-приложения) позволяют применять ограничительные политики, а также в ручном режиме включать, отключать или вызывать конкретные функциональные возможности устройства.
Отказ от ответственности! API, предоставляемый в составе фреймворка MDM, в настоящий момент активно развивается и в некоторой степени может быть изменён. Обычно обещания об обратной совместимости для сторонних API не выполняются.
Использование фреймворка MDM
Программный интерфейс фреймворка MDM состоит из двух отдельных аспектов.
Первый аспект предоставляется библиотекой libsailfishpolicy
и состоит из политик,
которые определяют, может ли пользователь изменять определённые настройки
или получать доступ к определённым функциям.
Второй аспект предоставляется библиотекой libsailfishmdm
и состоит из конкретных функциональных возможностей системы,
которые предлагаются приложениям MDM,
но могут или не могут быть доступны через другие системные API.
Для использования данных библиотек приложения MDM должны использовать
файлы pkgconfig sailfishpolicy.pc
и sailfishmdm.pc
, соответственно.
Например, в проекте, управляемом qmake:
CONFIG += link_pkgconfig
PKGCONFIG += sailfishpolicy sailfishmdm
Управляющие запросы к MDM API должны быть выполнены от имени пользователя sailfish-mdm. С другой стороны, получение политик MDM доступно любому пользователю.
API политики ОС Аврора
API политики ОС Аврора позволяет приложению MDM задавать текущие политики для конкретных параметров или функций. Например, приложение MDM может запретить пользователю изменять настройки GPS.
Дополнительную информацию можно получить в документации о политиках в ОС Аврора.
MDM API
MDM API позволяет приложению MDM выполнять определённые действия или запускать определённые функции на устройстве. Например, приложение MDM может включить функцию GPS для получения текущего местоположения устройства.
Широкий спектр функциональных возможностей системы предоставляется через MDM API, который состоит из следующих классов:
Sailfish::Mdm::Applications | Информация об установленных приложениях и пакетах |
Sailfish::Mdm::Autostart | Управление автоматическим запуском приложений |
Sailfish::Mdm::BaseStation | Получение информации о базовых станциях |
Sailfish::Mdm::BatteryInfo | Информация о заряде батареи |
Sailfish::Mdm::Bluetooth | Конфигурация настроек Bluetooth |
Sailfish::Mdm::CallHistory | Доступ к истории телефонных вызовов |
Sailfish::Mdm::CallStatistics | Доступ к статистике телефонных вызовов |
Sailfish::Mdm::Certificates | Управляет системными сертификатами CA |
Sailfish::Mdm::ConnectivitySettings | Управление сетевыми подключениями |
Sailfish::Mdm::DateTimeSettings | Управление системными датой и временем |
Sailfish::Mdm::DeviceLock | Управление кодами безопасности и блокировкой устройства |
Sailfish::Mdm::DeviceLockSettings | Политика паролей и ограничения на вход для каждого пользователя |
Sailfish::Mdm::LocationInfo | Данные о местоположении устройства |
Sailfish::Mdm::LocationSettings | Управление функциями геопозиционирования устройства |
Sailfish::Mdm::NetProxy | Управление используемыми прокси-серверами |
Sailfish::Mdm::NetworkDataCounter | Мониторинг передачи данных |
Sailfish::Mdm::NotificationInfo | Управление пользовательскими уведомлениями |
Sailfish::Mdm::SecuritySettings | Управление установкой приложений из непроверенных источников |
Sailfish::Mdm::Settings | Управляет защищёнными настройками сброса |
Sailfish::Mdm::SimInfo | Доступ к информации о SIM-карте |
Sailfish::Mdm::SimMobileDataFilter | Управление правилами фильтрации мобильных данных |
Sailfish::Mdm::SimSlots | Управление слотами SIM |
Sailfish::Mdm::SimSmsFilter | Управление доступом к функциям SMS |
Sailfish::Mdm::SimVoiceCallFilter | Управление доступом к функциям голосового вызова |
Sailfish::Mdm::SimWhitelist | Управление списком доступных SIM |
Sailfish::Mdm::SMSHistory | Доступ к истории SMS-сообщений |
Sailfish::Mdm::Ssu | API для управления конфигурацией SSU |
Sailfish::Mdm::SystemdJournal | Управляет конфигурацией журнала systemd |
Sailfish::Mdm::SystemUpdate | Высокоуровневый API для управления обновлениями ОС |
Sailfish::Mdm::TrustedSources | Позволяет управлять списком доверенных источников на устройстве и управлять разрешением на установку пакетов без источника. |
Sailfish::Mdm::UserManager | Управление пользователями системы |
SSU можно настроить через D-Bus-интерфейс SsuProxy:
Управление пользователями для совместно используемого устройства осуществляется через D-Bus-интерфейс User Manager Daemon.
Разрешённый API и доступ
Запуск приложений MDM подразумевается из-под учётной записи пользователя sailfish-mdm, что даёт как дополнительные разрешения, так и накладывает некоторые ограничения на то, что можно сделать.
Во-первых, нет доступа ни к домашнему каталогу пользователя /home/<user>
,
ни к сессионной шине D-Bus.
Это также относится к библиотекам, работающим поверх D-Bus,
таким как notifications (библиотека уведомления) и dconf (библиотека конфигураций настроек).
Из-за этого MDM предоставляет собственный API для поддержки уведомлений пользователей.
Во-вторых, приложение MDM запускается в виде фонового сервиса без видимого пользователю интерфейса. При необходимости, пользовательский интерфейс должен быть реализован отдельным приложением, которое взаимодействует с сервисом через системную или собственную шину D-Bus.
В некоторых окружениях для разрешения доступа к сети также требуется группа inet. В отличие от обычного пользователя, sailfish-mdm не принадлежит к этой группе, поэтому если приложению MDM требуется доступ, оно должно быть вручную добавлено в данную группу. Следует помнить, что в некоторых рабочих окружениях такой группы может и вовсе не быть.
Создание приложения MDM
Фреймворк MDM включает примеры демона MDM и клиентского приложения, который подключается к нему. Однако, для совместимости с собственными существующими службами и ИТ-инфраструктурой, поставщикам рекомендуется использовать собственные реализации MDM-сервиса.
В большинстве случаев приложение MDM будет полноценным, постоянным системным процессом, запущенным при загрузке с помощью Systemd, который связан с библиотеками фреймворка MDM и использует их напрямую. Данные библиотеки предоставляют интерфейсы для разрешения или запрета действий (через libsailfishpolicy) и другие интерфейсы для изменения состояния системы (через libsailfishmdm).
Запуск приложения MDM с помощью Systemd
Чтобы обеспечить запуск приложения-демона MDM с помощью Systemd,
приложение MDM должно включать в пакет файл /usr/lib/systemd/system/mdm-application-name.service
и создавать на него символическую ссылку в multi-user.target.wants
,
как показано в следующем примере:
[Unit]
Description=An MDM application
Requires=basic.target network.target
After=basic.target network.target
[Service]
SupplementaryGroups=inet
User=sailfish-mdm
ExecStart=/usr/bin/mdm-application-name
Restart=always
[Install]
WantedBy=multi-user.target
Автоматизация запуска процесса сборки RPM-пакетов может быть выполнена в файле .spec
, например:
[...]
%install
[...]
mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants/
ln -sf ../mdm-application-name.service %{buildroot}%{_unitdir}/multi-user.target.wants/
%post
if [ "$1" = "1" ]; then
#install
systemctl daemon-reload || :
systemctl start mdm-application-name.service || :
elif [ "$1" = "2" ]; then
#upgrade
systemctl daemon-reload || :
systemctl restart mdm-application-name.service || :
fi
%preun
if [ "$1" = "0" ]; then
# remove
systemctl daemon-reload || :
systemctl stop mdm-application-name.service || :
fi
%files
%{_unitdir}/mdm-application-name.service
Файлы приложения MDM
Любая конфигурация, файлы кэша или данных, требуемые приложением MDM,
должны храниться в разделах /var
или /run
в соответствии со стандартом иерархии файловой системы, в подкаталогах,
специфичных для приложений MDM.
В частности, данные кэша должны храниться в /var/cache/
,
конфигурации, данные о состоянии и базы данных — в /var/lib/
,
файлы блокировки — в /run/lock/
, файлы журналов — в /var/log/
,
временные файлы — в /run/tmp/
.
Примечание.
В разделе /var/lib/sailfish-mdm
запись доступна только с root-правами,
чтение доступно пользователю sailfish-mdm
.