1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-security_permission_lite

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Управление Разрешениями Приложений

Введение

В OpenHarmony приложения и системные службы выполняются в независимых песочницах. Процессы и данные изолированы друг от друга для защиты безопасности данных приложений. Однако службы или приложения, работающие в песочницах, предоставляют некоторые API для реализации определенных функциональностей. Для доступа к этим API через процессы приложениям в других песочницах необходимы соответствующие разрешения, которые предоставляются и управляются на основе механизма управления разрешениями.

Управление разрешениями приложений предоставляет следующие функции:

  • Предоставляет механизм для определения разрешений, позволяющий системным службам и приложениям определять новые разрешения для своих чувствительных API. Для доступа к этим API другим приложениям необходимы соответствующие разрешения.
  • Позволяет приложениям запрашивать разрешения, определенные системой или другими приложениями. После получения разрешений приложения могут использовать чувствительные API, предоставляемые системой или другими приложениями.
  • Позволяет пользователям просматривать и управлять статусом предоставления разрешений.

Рисунок 1 Архитектура управления разрешениями приложений

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

  • Мини-система предназначена для устройств с памятью, равной или превышающей 128 КиБ, и оснащенных процессорами MCU, включая ARM Cortex-M и 32-битные RISC-V. Она предоставляет различные легковесные сетевые протоколы, легковесные графические фреймворки и компоненты чтения/записи IoT через шину. Мини-система применяется к продуктам умного дома, таким как модули LinkIoT, сенсоры и носимые устройства.
  • Малая система ориентирована на устройства с памятью, равной или превышающей 1 МиБ, и оснащенных процессорами, такими как ARM Cortex-A. Она предоставляет более высокие возможности безопасности, стандартные графические фреймворки и кодирование/декодирование видео. Малая система применяется к продуктам умного дома, таким как IP-камеры, глазки и маршрутизаторы, а также к продуктам умного путешествия, таким как регистраторы событий (EDRs).

Структура Директорий

/base/security/permission_lite
├── interfaces                         # API
│   ├── innerkits                      # Внутренние API
│   └── kits                           # Внешние API
└── services                           # Сервисы
    ├── ipc_auth                       # Аутентификация IPC-коммуникации
    ├── js_api                         # Обертка JS API
    ├── pms                            # Логика и сервер управления разрешениями
    ├── pms_base                       # Регистрация сервисов
    └── pms_client                     # Клиент управления разрешениями

Использование

Доступные API

API управления разрешениями приложений для мини- и малых систем могут вызываться только системными приложениями и службами. Следующая таблица описывает эти API.

API Описание
int CheckPermission(int uid, const char *permissionName) Проверяет, имеет ли приложение разрешение на доступ к API системной службы.
int CheckSelfPermission(const char *permissionName) Проверяет, имеет ли вызывающая сторона разрешение на доступ к API системной службы.
int QueryPermission(const char *identifier, PermissionSaved **permissions, int *permNum) Запрашивает все разрешения, запрошенные приложением, и проверяет, были ли запрошенные разрешения предоставлены.
int GrantPermission(const char *identifier, const char *permName) Предоставляет разрешение приложению.
int RevokePermission(const char *identifier, const char *permName) Отзывает разрешение у приложения.
int GrantRuntimePermission(int uid, const char *permissionName) Предоставляет разрешение во время выполнения приложения.
int RevokeRuntimePermission(int uid, const char *permissionName) Отзывает разрешение во время выполнения приложения.
int UpdatePermissionFlags(const char *identifier, const char *permissionName, const int flags) Обновляет флаги разрешения, указанного приложением.

Следующая таблица описывает API аутентификации IPC для мини- и малых систем.

API Описание
int GetCommunicationStrategy(RegParams params, PolicyTrans **policies, unsigned int *policyNum) Получает политики доступа для API службы. Этот API может вызываться только System Ability Manager (SAMGR).
int IsCommunicationAllowed(AuthParams params) Проверяет, имеет ли процесс разрешение на доступ к API другого процесса. Этот API может вызываться только SAMGR.

Как Использовать

Управление Разрешениями Приложений для Мини- или Малой Системы

Следующий пример использует разработку управления разрешениями приложений для службы управления пакетами (BMS). Во время разработки объявите необходимые чувствительные разрешения в файле config.json. Во время установки приложения BMS вызывает API компонента управления разрешениями приложений для проверки наличия необходимых разрешений. Если они есть, установка продолжается; в противном случае установка завершается неудачей.

  1. Во время разработки определите и объявите необходимое разрешение (ohos.permission.INSTALL_BUNDLE) для установки приложения. Если используется модель FA, объявите разрешение в файле config.json. Пример:

    {
      "module": {
          "package": "ohos.demo.kitframework",
          "deviceType": [
              "phone", "tv","tablet", "car","smartWatch","sportsWatch","smartCamera", "smartVision"
          ],
          "reqPermissions": [{
            "name": "ohos.permission.INSTALL_BUNDLE",
            "reason": "install bundle",
            "usedScene": {
              "ability": [
                "KitFramework"
                ],
              "when": "always"
            }
          },
          {
            "name": "ohos.permission.LISTEN_BUNDLE_CHANGE",
            "reason": "install bundle",
            "usedScene": {
              "ability": [
                "KitFramework"
                ],
              "when": "always"
            }
          },
          {
            "name": "ohos.permission.GET_BUNDLE_INFO",
            "reason": "install bundle",
            "usedScene": {
              "ability": [
                "KitFramework"
                ],
              "when": "always"
            }
          }
        ]
      }
    }

    Если используется модель stage, объявите разрешение в файле module.json5. Пример:

    {
      "module": {
        "requestPermissions": [{
          "name": "ohos.permission.INSTALL_BUNDLE",
          "reason": "install bundle",
          "usedScene": {
            "ability": [
              "KitFramework"
            ],
            "when": "always"
          }
        },
        {
          "name": "ohos.permission.LISTEN_BUNDLE_CHANGE",
          "reason": "install bundle",
          "usedScene": {
            "ability": [
              "KitFramework"
            ],
            "when": "always"
          }
        },
        {
          "name": "ohos.permission.GET_BUNDLE_INFO",
          "reason": "install bundle",
          "usedScene": {
            "ability": [
              "KitFramework"
            ],
            "when": "always"
          }
        }]
      }
    }
  2. При разработке API установки приложения используйте API CheckPermission() для проверки, имеет ли BMS разрешение на установку приложения. Например, CheckPermission() вызывается с именем разрешения ohos.permission.INSTALL_BUNDLE в качестве входного параметра для проверки, имеет ли BMS разрешение на установку приложения. Если у BMS есть это разрешение, установка продолжается; в противном случае установка завершается неудачей.

    constexpr static char PERMISSION_INSTALL_BUNDLE[] = "ohos.permission.INSTALL_BUNDLE";
    
    bool Install(const char *hapPath, const InstallParam *installParam, InstallerCallback installerCallback)
    {
        if ((hapPath == nullptr) || (installerCallback == nullptr) || (installParam == nullptr)) {
            HILOG_ERROR(HILOG_MODULE_APP, "BundleManager install failed due to nullptr parameters");
            return false;
        }
        // Проверьте, предоставлено ли разрешение ohos.permission.INSTALL_BUNDLE.
        if (CheckPermission(0, static_cast<const char *>(PERMISSION_INSTALL_BUNDLE)) != GRANTED) {
            HILOG_ERROR(HILOG_MODULE_APP, "BundleManager install failed due to permission denied");
            return false;  // Установка приложения завершается неудачей.
        }
        // Процесс установки.
        ...
    }

Аутентификация IPC для Мини- или Малой Системы

Следующий пример описывает, как использовать компонент аутентификации IPC для настройки политик доступа к функциям BMS. В этом примере служба, зарегистрированная BMS с SAMGR, называется bundlems, а зарегистрированная функция — BmsFeature.

  1. Настройте политику доступа в заголовочном файле base/security/permission_lite/services/ipc_auth/include/policy_preset.h в директории исходного кода. Существует три типа политик доступа:

    • RANGE: позволяет доступ из процессов с UID в указанном диапазоне. Должны быть указаны uidMin и uidMax.
    • FIXED: позволяет доступ из процессов с указанными UID. Должен быть указан fixedUid, и допускается максимум восемь UID.
    • BUNDLENAME: позволяет доступ из указанного приложения. Должен быть указан bundleName.
    FeaturePolicy bmsFeature[] = {
        {
            "BmsFeature",
            {
                {
                    .type=FIXED,    // Позволяет доступ из процессов с указанными UID.
                    .fixedUid={2, 3, 8}
                },
                {
                    .type=RANGE,    // Позволяет доступ из процессов с UID в указанном диапазоне.
                    .uidMin=100,
                    .uidMax=__INT_MAX__,
                },
            }
        },
        {
            "BmsInnerFeature",
            {
                {
                    .type=FIXED,    // Позволяет доступ из процессов с указанными UID.
                    .fixedUid={2, 3, 8}
                },
                {
                    .type=RANGE,
                    .uidMin=100,
                    .uidMax=999,
                },
            }
        },
    };
  2. Добавьте политики, настроенные на шаге 1, в глобальные настройки политик. Необходимо указать количество функций.

    static PolicySetting g_presetPolicies[] = {
        {"permissionms", pmsFeature, 1},
        {"abilityms", amsFeature, 2},
        {"bundlems", bmsFeature, 2}, // Функция BMS, определенная на шаге 1. Количество функций BMS равно 2.
        {"dtbschedsrv", dmsFeature, 1},
        {"samgr", samgrFeature, 1},
        {"appspawn", appspawnFeature, 1},
        {"WMS", wmsFeature, 1},
        {"bundle_daemon", bdsFeature, 1},
    };
  3. Зарегистрируйте BmsFeature, определенную на шаге 1, с SAMGR.

    const char BMS_SERVICE[] = "bundlems";
    const char BMS_FEATURE[] = "BmsFeature";
    static void Init()
    {
        SamgrLite *sm = SAMGR_GetInstance();
        if (sm == nullptr) {
            return;
        }
        // Зарегистрируйте службу с SAMGR.
        sm->RegisterFeature(BMS_SERVICE, reinterpret_cast<Feature *>(BundleMsFeature::GetInstance()));
        sm->RegisterFeatureApi(BMS_SERVICE, BMS_FEATURE,
            GetBmsFeatureApi(reinterpret_cast<Feature *>(BundleMsFeature::GetInstance())));
        HILOG_DEBUG(HILOG_MODULE_APP, "BundleMS feature start success");
    }
    APP_FEATURE_INIT(Init);

Когда указанные службы зарегистрированы с SAMGR, SAMGR вызывает GetCommunicationStrategy() компонента аутентификации IPC для получения политики доступа к службам. Когда другие службы или приложения обращаются к этим службам через IPC, SAMGR вызывает IsCommunicationAllowed() компонента аутентификации IPC для проверки прав вызывающей службы. Если политика доступа соблюдается, доступ предоставляется; в противном случае доступ отклоняется.

Заинтересованные Репозитории

Подсистема безопасности

security_permission_lite

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/openharmony-security_permission_lite.git
git@api.gitlife.ru:oschina-mirror/openharmony-security_permission_lite.git
oschina-mirror
openharmony-security_permission_lite
openharmony-security_permission_lite
master