selabel_db
Section: Документация API SELinux (5)
Updated: 01 декабря 2011
Page Index
 
ИМЯ
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>.