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

OSCHINA-MIRROR/openeuler-secpaver

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
manual.md 25 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 10:08 7eb31a0

Файл определения проекта

В проекте 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"
    }
}

4.3 Файл информации о ресурсах

Все файлы ресурсов, которые включены в создаваемую 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

Примечание:

  1. Для основных приложений стратегии нельзя устанавливать isSysFile в значение true.
  2. Поля isSysFile и isPrivateFile не могут быть установлены в значение true одновременно.

4.3.1 Типы файлов ресурсов

Ключевые слова типов файлов secPaver перечислены в следующей таблице. Если введено пустое значение, это означает, что все типы файлов соответствуют ключевому слову all:

Тип Описание
all Все типы файлов
file Обычный файл
sock_file Файл сокета
lnk_file Связанный файл
fifo_file Канал
chr_file Символьное устройство
blk_file Блочное устройство
dir Каталог
exec_file Исполняемый файл (обычный файл)

4.3.2 Путь к файлу

Путь к файлу должен быть абсолютным путём, и каждый путь может быть определён только один раз. Можно использовать подстановочные знаки в пути, но из-за различий в представлении путей к файлам в разных механизмах безопасности (например, AppArmor использует подстановочные знаки, а SELinux использует регулярные выражения), в настоящее время пользователям разрешено использовать только ограниченное количество подстановочных знаков:

(1) Использование подстановочного знака в конце пути к файлу:

Представление пути Описание
/dir/* Файлы в каталоге dir, кроме файлов в подкаталогах, и сам каталог dir
/dir/** Файлы в каталоге dir и его подкаталогах, включая сам каталог dir
/dir{,/*} Файлы в каталоге dir, включая сам каталог dir, но не файлы в подкаталогах
/dir{,/**} Файлы в каталоге dir и его подкаталогах, включая сам каталог dir

(2) Использование подстановочного знака в середине пути к файлу:

Подстановочный знак Описание
* Означает 0 или более символов, отличных от "/"
? Означает один символ, отличный от "/"

(3) Специальные символы, которые необходимо экранировать пользователю:

* ? { } \

4.3.3 Макроопределения

Пользователи могут использовать макросы для упрощения написания путей к файлам. Макросы должны быть определены в файле информации о ресурсах. Имя макроса должно соответствовать правилам именования C-языка, может включать буквы, цифры и подчёркивание и не может начинаться с цифры. Рекомендуется использовать заглавные буквы, такие как BIN_DIR, WORK_DIR и т. д.

Конфигурационный элемент Подэлемент конфигурации Тип Атрибут Описание
macroList name string required Имя макроса
value string required Значение макроса

Используйте «$()» для вызова имени макроса в пути к ресурсу, например $(BIN_DIR)/pav, $(WORK_DIR)/project и т.д.

4.3.4 Группы ресурсов

Для некоторых файлов ресурсов с одинаковыми правами доступа пользователи могут добавить их в группу ресурсов для управления. В файле спецификаций можно напрямую ссылаться на эти группы ресурсов, чтобы упростить написание и улучшить читаемость. Пути к ресурсам в группе ресурсов должны быть определены в «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"
            }
        }
    ]
}

4.4 Файл определения прав приложения

Файл определения прав приложения используется для объявления разрешений на действия для каждого приложения в проекте. Соответствующие конфигурации включают:

配置项 子配置项 类型 属性 说明
applicationList application struct required 应用程序信息(详见4.4.1)
permissionList struct array required 应用程序权限描述(详见4.4.2)

4.4.1 Информация об приложении

配置项 子配置项 类型 属性 说明
application path string required 应用程序路径
isPermissive bool required 是否将该进程设为permissive模式
isUnconfined bool required 是否将该进цесс设为unconfined模式

Примечание:

  1. Путь к приложению должен быть абсолютным и должен быть определён в файле информации о ресурсах. permissionList | type | string | required | ---|---|---|---| 权限类型, в настоящее время поддерживаются: filesystem, capability и network | | resources | string array | required | Список ресурсов приложения | | actions | string array | required| Действия приложения над ресурсами |

Различные типы разрешений имеют следующие конфигурации полей:

Тип разрешения type resources actions Описание ключевых слов Примечание
Файл разрешения filesystem Путь к файлу или группа ресурсов Права доступа к файлам Ключевые слова прав доступа к файлам
Разрешение capability capability Не требуется заполнять Тип capability Ключевые слова capability
Сетевое разрешение network Сетевые ресурсы Права доступа к сетевым ресурсам Ключевые слова сетевых ресурсов

4.4.3 Пример файла спецификации

{
    "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"
                    ]
                }
            ]
        }
    ]
}

4.5 Конфигурация файла генерации стратегии

4.5.1 Описание конфигурации файла стратегии SELinux

Формат файла конфигурации стратегии SELinux — это файл JSON. Рекомендуется называть его selinux.json. Определения полей следующие:

Конфигурация Подконфигурация Атрибут Тип Описание
extraRules N/A optional string array Дополнительные правила SELinux, которые будут добавлены
policy monolithic required bool Режим генерации политики. Если установлено значение true, генерируется один модуль политики; если установлено значение false, генерируются несколько подмодулей политики и один публичный модуль (см. 6.1.1)

4.5.3 Пример конфигурации файла стратегии SELinux

{
    "policy":{
        "monolithic_policy": true
    },
    "extraRules":[
        "allow pav_t sysfs_t:file { open read };",
        "allow pavd_t user_devpts_t:chr_file { append read write };"
    ]
}

6 Описание файлов стратегий

В этой главе приводится описание файлов стратегий, созданных secPaver.

6.1 Файлы стратегий SELinux

6.1.1 Модуль стратегии

Стратегии 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 следует использовать только в качестве справочных материалов.

7 LICENSE

Проект secPaver использует лицензию BY-SA 4.0.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/openeuler-secpaver.git
git@api.gitlife.ru:oschina-mirror/openeuler-secpaver.git
oschina-mirror
openeuler-secpaver
openeuler-secpaver
master