Использование шаблонизации при создании описания политики безопасности решения на базе KasperskyOS

30 сентября 2026

ID ssp_descr_templating

При создании описания политики можно использовать шаблонизатор Ginger, интегрированный в генератор исходного кода модуля безопасности Kaspersky Security Module. Для управления шаблонизатором нужно использовать параметры CMake-команды build_vendor_romfs ().

PSL-шаблон Ginger представляет собой PSL-файл, который, помимо деклараций на языке PSL, содержит синтаксические конструкции шаблонизатора Ginger. Такие файлы, как security.psl, core.psl, являются PSL-шаблонами Ginger, если в них содержаться синтаксические конструкции шаблонизатора Ginger.

Описание синтаксических конструкций шаблонизатора Ginger приведено в официальной документации на этот шаблонизатор. Например, можно использовать макросы.

Пример определения макроса:

{% macro VMMSafe(src) %}

match method=Allocate {

match src={{ src }} { grant () }

}

{% endmacro %}

Пример вызова макроса:

{{ VMMSafe(["Einit"]) }}

В результате этого вызова будет создана следующая конструкция:

match method=Allocate {

match src=Einit { grant () }

}

Пример определения макроса с циклами:

{% macro VMMSafe(srcs) %}

{% for method in ["Allocate", "Commit", "Decommit"] %}

match method={{ method }} {

{% for src in srcs %}

match src={{ src }} { grant () }

{% endfor %}

}

{% endfor %}

{% endmacro %}

Пример конструкции с вызовом макроса:

match endpoint=vmm.VMM {

{{ VMMSafe(["Einit", "client.Client", "consumer.Consumer",

"kl.bc.BlobContainer", "kl.VfsEntity", "scm.Producer",

"execution_manager.ExecMgrEntity", "scm.SecurityConfigMgrEntity",

"kl.drivers.ATA", "kl.drivers.PCIE"]) }}

}

В результате раскрытия макроса в этой конструкции будет создана следующая конструкция:

match endpoint=vmm.VMM {

match method=Allocate {

match src=Einit { grant () }

match src=client.Client { grant () }

match src=consumer.Consumer { grant () }

match src=kl.bc.BlobContainer { grant () }

match src=kl.VfsEntity { grant () }

match src=scm.Producer { grant () }

match src=execution_manager.ExecMgrEntity { grant () }

match src=scm.SecurityConfigMgrEntity { grant () }

match src=kl.drivers.ATA { grant () }

match src=kl.drivers.PCIE { grant () }

}

match method=Commit {

match src=Einit { grant () }

match src=client.Client { grant () }

match src=consumer.Consumer { grant () }

match src=kl.bc.BlobContainer { grant () }

match src=kl.VfsEntity { grant () }

match src=scm.Producer { grant () }

match src=execution_manager.ExecMgrEntity { grant () }

match src=scm.SecurityConfigMgrEntity { grant () }

match src=kl.drivers.ATA { grant () }

match src=kl.drivers.PCIE { grant () }

}

match method=Decommit {

match src=Einit { grant () }

match src=client.Client { grant () }

match src=consumer.Consumer { grant () }

match src=kl.bc.BlobContainer { grant () }

match src=kl.VfsEntity { grant () }

match src=scm.Producer { grant () }

match src=execution_manager.ExecMgrEntity { grant () }

match src=scm.SecurityConfigMgrEntity { grant () }

match src=kl.drivers.ATA { grant () }

match src=kl.drivers.PCIE { grant () }

}

}

В PSL-шаблонах Ginger можно использовать комментарии:

{# Комментарий, который будет удален при раскрытии шаблона. #}

Также в PSL-шаблонах Ginger можно использовать конструкцию включения файла.

Пример конструкции включения файла:

{% include "defs.ginger" %}

Файл defs.ginger может содержать, например, определения макросов, используемых в PSL-шаблоне Ginger. Этот файл должен находиться в одной директории с PSL-шаблоном Ginger, который содержит эту конструкцию.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!