Provided by: selinux-utils_3.0-1build2_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>.