Файл определения проекта
В проекте secPaver должен существовать файл определения проекта с именем «pav.proj». Этот файл необходимо разместить в корневом каталоге проекта. В файле определяются основные сведения о проекте и файлы проекта. Формат файла — JSON.
Содержание таблицы:
Элемент конфигурации первого уровня | Элемент конфигурации второго уровня | Тип | Атрибут | Описание |
---|---|---|---|---|
name | N/A | string | required | Название проекта |
ver | N/A | string | required | Версия проекта |
resources | N/A | string | required | Относительный путь к файлу с информацией о ресурсах |
specs | N/A | array of strings | required | Относительные пути к файлам спецификаций |
selinux | config | string | required | Относительный путь к конфигурационному файлу стратегии SELinux |
Примечание: в файле определения структуры файлов проекта значения полей, определяющих структуру, представляют собой относительные пути к каждому файлу относительно корневого каталога проекта. Путь не должен содержать «../».
Пример файла определения проекта:
{
"version": "3",
"name": "secpaver",
"resources": "resources.json",
"specs": [
"specs/module_pavd.json",
"specs/module_pav.json"
],
"selinux": {
"config": "selinux.json"
}
}
Все файлы ресурсов, которые включены в создаваемую secPaver безопасную стратегию, должны быть определены в этом файле. В проекте должен быть только один файл информации о ресурсах. Формат файла — JSON, рекомендуется назвать его «resources.json». Определяются поля и описание файла информации о ресурсах:
Элемент конфигурации первого уровня | Элемент конфигурации второго уровня | Элемент конфигурации третьего уровня | Тип | Атрибут | Описание |
---|---|---|---|---|---|
resourceList | type | N/A | string | required | Тип файла ресурсов (см. 4.3.1) |
path | N/A | string | required | Путь к файлу ресурсов (см. 4.3.2) | |
extended | N/A | string | optional | Расширенное свойство файла ресурсов (в настоящее время не используется) | |
selinux | isSysFile | bool | required | Эффективно для генерации стратегии SELinux, указывает, является ли файл системным общим файлом ресурсов. Если установлено значение true, наследуется системный контекст безопасности по умолчанию, в противном случае используется пользовательский контекст безопасности или автоматически генерируется контекст безопасности | |
isPrivateFile | bool | required | Эффективен для генерации стратегии SELinux, isSysFile должен быть установлен в false. Если установлено в true, тип SELinux для файла не связан с атрибутом file_type при определении типа SELinux файла. Конфигурация базовой стратегии на основе атрибута file_type может влиять на доступ других процессов к этому файлу | ||
type | string | optional | Пользовательский тип файла SELinux. Может быть установлен, только если isSysFile имеет значение false | ||
domain | string | optional | Тип процесса, который выполняется после выполнения файла, когда isSysFile имеет значение false. Может быть установлен, только если isSysFile имеет значение false |
Примечание:
Ключевые слова типов файлов secPaver перечислены в следующей таблице. Если введено пустое значение, это означает, что все типы файлов соответствуют ключевому слову all:
Тип | Описание |
---|---|
all | Все типы файлов |
file | Обычный файл |
sock_file | Файл сокета |
lnk_file | Связанный файл |
fifo_file | Канал |
chr_file | Символьное устройство |
blk_file | Блочное устройство |
dir | Каталог |
exec_file | Исполняемый файл (обычный файл) |
Путь к файлу должен быть абсолютным путём, и каждый путь может быть определён только один раз. Можно использовать подстановочные знаки в пути, но из-за различий в представлении путей к файлам в разных механизмах безопасности (например, AppArmor использует подстановочные знаки, а SELinux использует регулярные выражения), в настоящее время пользователям разрешено использовать только ограниченное количество подстановочных знаков:
(1) Использование подстановочного знака в конце пути к файлу:
Представление пути | Описание |
---|---|
/dir/* | Файлы в каталоге dir, кроме файлов в подкаталогах, и сам каталог dir |
/dir/** | Файлы в каталоге dir и его подкаталогах, включая сам каталог dir |
/dir{,/*} | Файлы в каталоге dir, включая сам каталог dir, но не файлы в подкаталогах |
/dir{,/**} | Файлы в каталоге dir и его подкаталогах, включая сам каталог dir |
(2) Использование подстановочного знака в середине пути к файлу:
Подстановочный знак | Описание |
---|---|
* | Означает 0 или более символов, отличных от "/" |
? | Означает один символ, отличный от "/" |
(3) Специальные символы, которые необходимо экранировать пользователю:
* ? { } \
Пользователи могут использовать макросы для упрощения написания путей к файлам. Макросы должны быть определены в файле информации о ресурсах. Имя макроса должно соответствовать правилам именования C-языка, может включать буквы, цифры и подчёркивание и не может начинаться с цифры. Рекомендуется использовать заглавные буквы, такие как BIN_DIR, WORK_DIR и т. д.
Конфигурационный элемент | Подэлемент конфигурации | Тип | Атрибут | Описание |
---|---|---|---|---|
macroList | name | string | required | Имя макроса |
value | string | required | Значение макроса |
Используйте «$()» для вызова имени макроса в пути к ресурсу, например $(BIN_DIR)/pav, $(WORK_DIR)/project и т.д.
Для некоторых файлов ресурсов с одинаковыми правами доступа пользователи могут добавить их в группу ресурсов для управления. В файле спецификаций можно напрямую ссылаться на эти группы ресурсов, чтобы упростить написание и улучшить читаемость. Пути к ресурсам в группе ресурсов должны быть определены в «resourceList».
Конфигурационный элемент | Подэлемент конфигурации | Тип | Атрибут | Описание |
---|---|---|---|---|
groupList | name | string | required | Наименование группы ресурсов |
resources | array of strings | required | Информация о пути к ресурсам группы |
{
"macroList": [
{
"name": "VSEC_PROJDIR",
"value": "/root/pavprojects"
}
],
"groupList": [
{
"name": "MANAGE_GROUP",
"resources": [
"/var/run/secpaver{,/**}",
"/var/log/secpaver{,/**}",
"/var/local/secpaver{,/**}",
"/tmp/secpaver{,/**}"
]
}
],
"resourceList": [
{
"type": "",
"path": "/var/run/secpaver{,/**}",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type": "pavd_run_t"
}
},
{
"type": "",
"path": "$(VSEC_PROJDIR){,/**}",
"selinux": {
"isSysFile": false,
"isPrivateFile": false
}
},
{
"type": "",
"path": "/tmp/secpaver{,/**}",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type":"pavd_tmp_t"
}
},
{
"type": "exec_file",
"path": "/usr/bin/make",
"selinux": {
"isSysFile": true,
"isPrivateFile": false
}
},
{
"type": "file",
"path": "/usr/share/selinux/devel/Makefile",
"selinux": {
"isSysFile": true,
"isPrivateFile": false
}
},
{
"type": "",
"path": "/var/local/secpaver{,/**}",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type": "pavd_local_t"
}
},
{
"type": "",
"path": "/etc/secpaver{,/**}",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type": "pavd_etc_t"
}
},
{
"type": "",
"path": "/var/log/secpaver{,/**}",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type": "pavd_log_t"
}
},
{
"type": "exec_file",
"path": "/usr/bin/pavd",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type": "pavd_exec_t",
"domain": "pavd_t"
}
},
{
"type": "exec_file",
"path": "/usr/bin/pav",
"selinux": {
"isSysFile": false,
"isPrivateFile": false,
"type": "pav_exec_t",
"domain": "pav_t"
}
}
]
}
Файл определения прав приложения используется для объявления разрешений на действия для каждого приложения в проекте. Соответствующие конфигурации включают:
配置项 | 子配置项 | 类型 | 属性 | 说明 |
---|---|---|---|---|
applicationList | application | struct | required | 应用程序信息(详见4.4.1) |
permissionList | struct array | required | 应用程序权限描述(详见4.4.2) |
配置项 | 子配置项 | 类型 | 属性 | 说明 |
---|---|---|---|---|
application | path | string | required | 应用程序路径 |
isPermissive | bool | required | 是否将该进程设为permissive模式 | |
isUnconfined | bool | required | 是否将该进цесс设为unconfined模式 |
Примечание:
Различные типы разрешений имеют следующие конфигурации полей:
Тип разрешения | type | resources | actions | Описание ключевых слов | Примечание |
---|---|---|---|---|---|
Файл разрешения | filesystem | Путь к файлу или группа ресурсов | Права доступа к файлам | Ключевые слова прав доступа к файлам | |
Разрешение capability | capability | Не требуется заполнять | Тип capability | Ключевые слова capability | |
Сетевое разрешение | network | Сетевые ресурсы | Права доступа к сетевым ресурсам | Ключевые слова сетевых ресурсов |
{
"applicationList":[
{
"application":{
"path":"/usr/bin/pavd"
},
"permissionList":[
{
"type":"filesystem",
"resources":[
"$(WORK_GROUP)"
],
"actions":[
"read",
"write"
]
},
{
"type":"capablilty",
"actions":[
"setuid",
"net_raw"
]
},
{
"type":"network",
"resources":[
"domain:inet,type:stream,protocol:tcp,port:55000"
],
"actions":[
"connect",
"send"
]
}
]
}
]
}
Формат файла конфигурации стратегии SELinux — это файл JSON. Рекомендуется называть его selinux.json. Определения полей следующие:
Конфигурация | Подконфигурация | Атрибут | Тип | Описание |
---|---|---|---|---|
extraRules | N/A | optional | string array | Дополнительные правила SELinux, которые будут добавлены |
policy | monolithic | required | bool | Режим генерации политики. Если установлено значение true, генерируется один модуль политики; если установлено значение false, генерируются несколько подмодулей политики и один публичный модуль (см. 6.1.1) |
{
"policy":{
"monolithic_policy": true
},
"extraRules":[
"allow pav_t sysfs_t:file { open read };",
"allow pavd_t user_devpts_t:chr_file { append read write };"
]
}
В этой главе приводится описание файлов стратегий, созданных secPaver.
Стратегии SELinux управляются в виде модулей. Один модуль стратегии содержит объявления безопасного контекста файла и определения безопасных правил. В зависимости от конфигурации monolithic в файле конфигурации SELinux генерируются разные модули стратегии:
monolithic | Описание |
---|---|
false | Создаётся один модуль с именем «<имя проекта>public», который предоставляет общие определения типов SELinux и безопасного контекста. Также создаются несколько подмодулей с именами «<имя проекта><имя спецификации» для реализации определённых безопасных правил в каждом файле спецификации. |
true | Создаётся только один модуль с именем проекта, который содержит всю информацию о стратегии. |
Имя модуля стратегии secPaver будет иметь суффикс «_selinux». Например:
Создано несколько модулей стратегии:
# ls specs/
module_1.json module_2.json module_3.json
# pav policy list
Name Status
demo_module_1_selinux disable
demo_module_2_selinux disable
demo_module_3_selinux disable
demo_public_selinux disable
Создан один модуль стратегии:
# pav policy list
Name Status
demo_selinux disable
Примечание: 1) Обычно генерация нескольких модулей стратегии подходит для отладки стратегии или сценариев, где некоторые стратегии необходимо динамически загружать и выгружать. Генерация одного модуля стратегии подходит для публикации стратегии вместе с приложением или для фактического развёртывания.
2) При генерации нескольких модулей стратегии подмодули зависят от публичного модуля, поэтому при загрузке стратегии необходимо соблюдать порядок загрузки публичного модуля перед подмодулями. Порядок выгрузки обратный. Во время генерации стратегии secPaver создаст в каталоге стратегии несколько файлов скриптов, которые включают в себя часто используемые операции, такие как создание и развёртывание стратегии:
Файл скрипта | Описание |
---|---|
install.sh | Загружает все модули стратегии из каталога стратегии в систему (при наличии модулей с одинаковыми именами они будут удалены) и обновляет безопасный контекст используемых файловых ресурсов модуля. |
uninstall.sh | Удаляет модули стратегии из системы, загруженные из каталога стратегии, и обновляет безопасный контекст используемых файловых ресурсов модуля. |
update.sh | Перекомпилирует модуль стратегии после того, как пользователь вручную изменит файлы te или fc стратегии. |
audit.sh | Анализирует журнал аудита с помощью инструмента audit2allow и экспортирует правила, связанные с проектом. |
restorecon.sh | Обновляет безопасный контекст файловых ресурсов, используемых модулем стратегии, с помощью команды restorecon. |
Файлы скриптов по умолчанию хранятся в каталоге /usr/share/secpaver, который может быть изменён пользователем.
Примечание: Процесс работы со стратегиями SELinux довольно сложен и включает в себя изменение безопасного контекста. В зависимости от среды применения продукта фактическая схема развёртывания может отличаться. Поэтому предоставленные скрипты secPaver следует использовать только в качестве справочных материалов.
Проект secPaver использует лицензию BY-SA 4.0.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )