Provided by: selinux-utils_3.5-2ubuntu2.1_amd64 bug

ИМЯ

       selabel_db - интерфейс проставления меток SELinux в пространстве пользователя и формат файла конфигурации
       для внутренней службы контекстов объектов RDBMS (реляционная СУБД)

ОБЗОР

       #include <selinux/label.h>

       int selabel_lookup(struct selabel_handle *hnd,
                          char **context,
                          const char *object_name, int object_type);

       int selabel_lookup_raw(struct selabel_handle *hnd,
                          char **context,
                          const char *object_name, int object_type);

ОПИСАНИЕ

       Внутренняя  служба контекста базы данных сопоставляет имя и класс объекта с контекстами безопасности. Это
       действие позволяет найти правильный контекст для объектов базы данных при  повторном  проставлении  меток
       для определённой базы данных. Необходимо освободить возвращённый context с помощью freecon(3).
       selabel_lookup(3) описывает функцию с её возвращаемыми значениями и кодами ошибок.

       object_name  должно  быть  полным  именем,  которое  использует  иерархию объектов базы данных. Например,
       таблица pg_class в базе данных postgres и схема pg_catalog должны быть указаны следующим образом:
              postgres.pg_catalog.pg_class

       В разделе ПРИМЕЧАНИЯ доступны более подробные сведения о поддержке баз данных для  иерархий  пространства
       имён.

       Для аргумента object_type должно быть установлено одно из следующих значений:

              SELABEL_DB_DATABASE
                     Аргумент object_name определяет имя самой базы данных, например, "postgres".

              SELABEL_DB_SCHEMA
                     Аргумент object_name определяет имя объекта схемы, например, "postgres.public".

              SELABEL_DB_TABLE
                     Аргумент object_name определяет имя объекта таблицы, например, "postgres.public.my_table"

              SELABEL_DB_COLUMN
                     Аргумент      object_name      определяет      имя      объекта      столбца,     например,
                     "postgres.public.my_table.user_id"

              SELABEL_DB_TUPLE
                     Аргумент object_name определяет  имя  объекта  таблицы,  содержащей  кортежи,  для  которых
                     требуется   повторно  проставить  метки,  например,  "postgresql.public.my_table".  Следует
                     учитывать, что нет способа  идентифицировать  отдельные  объекты  кортежа  (за  исключением
                     условия WHERE для инструкций DML), потому что у них нет имён.

              SELABEL_DB_PROCEDURE
                     Аргумент object_name определяет имя объекта процедуры, например, "postgres.public.my_func".
                     Следует  учитывать,  что поиск отдельных контекстов безопасности для процедур с одинаковыми
                     именами, но разными аргументами не поддерживается.

              SELABEL_DB_SEQUENCE
                     Аргумент    object_name    определяет    имя    объекта    последовательности,    например,
                     "postgres.public.my_seq".

              SELABEL_DB_BLOB
                     Аргумент  object_name определяет имя большого объекта, например, "postgres.16308".  Следует
                     учитывать, что у большого объекта  нет  имени,  поэтому  он  идентифицируется  по  значению
                     соответствующего идентификатора.

              SELABEL_DB_VIEW
                     Аргумент object_name определяет имя объекта просмотра, например, "postgres.public.my_view".

              SELABEL_DB_LANGUAGE
                     Аргумент object_name определяет имя объекта языка, например, "postgres.public.tcl".

              SELABEL_DB_EXCEPTION
                     Аргумент object_name определяет имя объекта исключения.

              SELABEL_DB_DATATYPE
                     Аргумент    object_name    определяет    имя    объекта    типа   или   домена,   например,
                     postgres.public.my_type.

       Все сообщения, созданные с помощью selabel_lookup(3), по умолчанию отправляются в stderr.  Это  поведение
       можно изменить с помощью selinux_set_callback(3).

       selabel_lookup_raw(3) работает аналогично selabel_lookup(3), но не выполняет преобразование контекста.

       В  разделе  ФАЙЛЫ приводится описание файлов конфигурации, которые используются для определения контекста
       объекта базы данных.

ПАРАМЕТРЫ

       Помимо глобальных параметров,  описание  которых  приведено  в  selabel_open(3),  эта  внутренняя  служба
       распознаёт следующие параметры:

              SELABEL_OPT_PATH
                     Значение  этого  параметра, отличное от null, определяет путь к файлу, который будет открыт
                     вместо стандартного файла контекста базы данных.  По умолчанию  параметр  пытается  открыть
                     файл  спецификации,  предназначенный  для  SE-PostgreSQL;  если этот интерфейс используется
                     другой реляционной СУБД, параметр должен явно объявить файл  спецификации,  предназначенный
                     для такой реляционной СУБД (подробные сведения см. в разделе ФАЙЛЫ).

ФАЙЛЫ

       То,  какой файл контекстов базы данных будет использоваться для получения контекста, зависит от параметра
       SELABEL_OPT_PATH, переданного в selabel_open(3). Если NULL, то значением  SELABEL_OPT_PATH  по  умолчанию
       станет      расположение      контекстов      базы     данных     активной     политики     (возвращённое
       selinux_sepgsql_context_path(3)). В ином  случае  будет  использоваться  фактическое  указанное  значение
       SELABEL_OPT_PATH  (этот  вариант  необходимо  использовать  для  поддержки  баз  данных,  отличных от SE-
       PostgreSQL).

       Файл контекстов объекта базы данных по умолчанию:
              /etc/selinux/{SELINUXTYPE}/contexts/sepgsql_context

       Где {SELINUXTYPE} - запись из файла конфигурации selinux config (см. selinux_config(5)).

       Записи внутри файла контекстов базы данных показаны в разделах Значения строки  имени  объекта  и  ФОРМАТ
       ФАЙЛА.

Значения строки имени объекта

       Имена  строк,  назначенные  аргументам  object_type, которые могут присутствовать в файле контекстов базы
       данных:
                                       ┌──────────────────────┬───────────────┐
                                       │ object_typeТекстовое имя │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_DATABASE  │ db_database   │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_SCHEMA    │ db_schema     │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_VIEW      │ db_view       │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_LANGUAGE  │ db_language   │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_TABLE     │ db_table      │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_COLUMN    │ db_column     │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_TUPLE     │ db_tuple      │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_PROCEDURE │ db_procedure  │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_SEQUENCE  │ db_sequence   │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_BLOB      │ db_blob       │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_EXCEPTION │ db_exception  │
                                       ├──────────────────────┼───────────────┤
                                       │ SELABEL_DB_DATATYPE  │ db_datatype   │
                                       └──────────────────────┴───────────────┘

ФОРМАТ ФАЙЛА

       Каждая строка внутри файла контекстов базы данных имеет следующий вид:
              object_type object_name context

       Где:
              object_type
                     Строковое представление типа объекта, показанное в разделе Значения строки имени объекта.
              object_name
                     Ключ, который используется для получения контекста на основе object_type.

                     Запись может содержать подстановочные знаки '*' или  '?'  для  выполнения  сопоставления  с
                     дополнением или подстановкой.

                     Следует учитывать, что при использовании '*' важен порядок записей в файле. '*' в отдельном
                     виде  используется для того, чтобы обеспечить назначение резервного контекста по умолчанию,
                     это должна быть последняя запись в блоке object_type.
              context
                     К объекту будет применён этот контекст безопасности.

       Далее приведён пример для SE-PostgreSQL:

       # ./contexts/sepgsql_contexts file
       # object_type  object_name   context
       db_database    my_database   system_u:object_r:sepgsql_db_t:s0
       db_database    *             system_u:object_r:sepgsql_db_t:s0
       db_schema      *.*           system_u:object_r:sepgsql_schema_t:s0
       db_tuple       row_low       system_u:object_r:sepgsql_table_t:s0
       db_tuple       row_high      system_u:object_r:sepgsql_table_t:s0:c1023
       db_tuple       *.*.*         system_u:object_r:sepgsql_table_t:s0

ПРИМЕЧАНИЯ

       1.  Для  целевой  реляционной  СУБД  необходимо  записать  подходящий  файл  контекстов  базы  данных   и
           использовать для его загрузки параметр SELABEL_OPT_PATH в selabel_open(3).

       2.  Иерархия  пространства  имён  для  объектов  базы  данных  зависит от реляционной СУБД, но интерфейсы
           selabel* не предусматривают какой-либо особой поддержки иерархии пространства имён.

           В иерархии пространства имён SE-PostgreSQL объектом верхнего уровня является  база  данных,  объектом
           следующего  уровня  -  схема.  На  следующем  после объекта схемы уровне могут находиться другие типы
           объектов, например, таблицы и процедуры. Эта иерархия поддерживается следующим образом:

                  Если для таблицы "my_table" в схеме "public" внутри базы данных "postgres" требуется  контекст
                  безопасности,  то  параметрами  selabel_lookup(3)  для object_type будет SELABEL_DB_TABLE, для
                  object_name  -  "postgres.public.my_table",  контекст  безопасности  (если   доступно)   будет
                  возвращён в context.

       3.  Если  контексты  должны  быть проверены, необходимо указать глобальный параметр  SELABEL_OPT_VALIDATE
           перед вызовом selabel_open(3). Если этот параметр не указан, может  быть  возвращён  недействительный
           контекст.

СМОТРИТЕ ТАКЖЕ

       selinux(8), selabel_open(3), selabel_lookup(3), selabel_stats(3), selabel_close(3),
       selinux_set_callback(3), selinux_sepgsql_context_path(3), freecon(3), selinux_config(5)

АВТОРЫ

       Перевод на русский язык выполнила Герасименко Олеся <gammaray@basealt.ru>.

Security Enhanced Linux                          01 декабря 2011                                   selabel_db(5)