selabel_file
Section: Документация API SELinux (5)
Updated: 01 декабря 2011
Page Index
 
ИМЯ
selabel_file - интерфейс проставления меток SELinux в пространстве пользователя и формат файла конфигурации для внутренней службы контекстов файлов
 
ОБЗОР
#include <selinux/label.h>
int selabel_lookup(struct selabel_handle *hnd,
char **context,
const char *path, int mode);
int selabel_lookup_raw(struct selabel_handle *hnd,
char **context,
const char *path, int mode);
 
ОПИСАНИЕ
Внутренняя служба контекстов файлов сопоставляет сочетания 'путь/режим' с контекстами безопасности. Это действие служит для нахождения правильного контекста для каждого файла при повторном проставлении меток в файловой системе. Необходимо освободить возвращённый 
context с помощью 
freecon(3).
selabel_lookup(3) описывает функцию с её возвращаемыми значениями и кодами ошибок. Тем не менее, далее приводится более подробное описание следующих значений 
errno для внутренней службы контекстов файлов:
- 
- ENOENT
 - 
Не найден контекст, соответствующий path и mode, - это сообщение будет возвращено и в том случае, если серия файлов контекстов файлов имеет контекст <<none>> относительно path (см. раздел ФОРМАТ ФАЙЛА).
 
 
Аргумент path должен быть установлен в полный путь к файлу, назначенный контекст которого проверяется. Аргумент mode должен быть установлен в биты режима файла, как определено lstat(2). Аргумент mode может быть нулевым, но в этом случае, возможно, не удастся установить полное соответствие.
Все сообщения, созданные с помощью selabel_lookup(3), по умолчанию отправляются в stderr. Это поведение можно изменить с помощью selinux_set_callback(3).
selabel_lookup_raw(3)
работает аналогично selabel_lookup(3), но не выполняет преобразование контекста.
В разделе ФАЙЛЫ приводится описание файлов конфигурации, которые используются для определения контекста файла.
 
ПАРАМЕТРЫ
Помимо глобальных параметров, описание которых приведено в 
selabel_open(3),
эта внутренняя служба распознаёт следующие параметры:
- 
- SELABEL_OPT_PATH
 - 
Значение этого параметра, отличное от null, определяет путь к файлу, который будет открыт вместо стандартного файла контекстов файлов. Это значение также используется как базовое имя для определения имён локальных файлов настройки.
 - SELABEL_OPT_BASEONLY
 - 
Отличное от null значение этого параметра означает, что любую локальную настройку сопоставления контекста файла следует игнорировать.
 - SELABEL_OPT_SUBSET
 - 
Отличное от null значение этого параметра интерпретируется как префикс пути, например, "/etc". Будут загружены только те спецификации контекстов файлов, первый компонент которых совпадает с указанным префиксом. Это может ускорить выполнение поиска, но, возможно, не удастся найти путь, который не начинается с указанного префикса. Данная оптимизация поиска больше не требуется (и устарела), вместо неё используется
file_contexts.bin.
 
 
 
ФАЙЛЫ
То, какие файлы контекстов файлов используются для получения контекста по умолчанию, зависит от параметра 
SELABEL_OPT_PATH, переданного в 
selabel_open(3). Если это 
NULL, то 
SELABEL_OPT_PATH по умолчанию примет значение расположения контекстов файлов активной политики (которое возвращает 
selinux_file_context_path(3)), в ином случае будет использовано фактическое указанное значение 
SELABEL_OPT_PATH.
Если параметр SELABEL_OPT_BASEONLY задан, будут обрабатываться следующие файлы:
- 
- 1.
 - 
Обязательный файл контекстов файлов - это либо полное имя файла из SELABEL_OPT_PATH.value, либо (если NULL) путь, который возвращает selinux_file_context_path(3).
 - 2.
 - 
Необязательные файлы для замены имён (файл для локального использования и файл для использования с дистрибутивами), которые присваивают псевдонимы пути для 'находящейся в памяти' версии файла контекстов файлов.
Эти файлы имеют то же имя, что и у обязательного файла контекстов файлов, и расширения .subs и .subs_dist.
 
 
Если параметр SELABEL_OPT_BASEONLY не задан, будут обработаны следующие файлы:
- 
- 1.
 - 
Обязательный файл контекстов файлов, который является либо полным именем файла из SELABEL_OPT_PATH.value, либо (если NULL) путём, который возвращает selinux_file_context_path(3).
 - 2.
 - 
Необязательный файл локальной настройки, имеющий то же имя, что и обязательный файл контекстов файлов, и расширение .local.
selinux_file_context_local_path(3) вернёт путь по умолчанию к этому файлу.
 - 3.
 - 
Необязательный файл настройки домашнего каталога пользователя, имеющий то же имя, что и обязательный файл контекстов файлов, и расширение .homedirs.
selinux_file_context_homedir_path(3) вернёт путь по умолчанию к этому файлу.
 - 4.
 - 
Необязательные файлы для замены имён (файл для локального использования и файл для использования с дистрибутивами), которые присваивают псевдонимы пути для 'находящейся в памяти' версии файла контекстов файлов (и .local и/или .homedirs, если они имеются). Эти файлы имеют то же имя, что и обязательный файл контекстов файлов, и расширения .subs и .subs_dist.
selinux_file_context_subs_path(3) и selinux_file_context_subs_dist_path(3) вернут пути по умолчанию к этим файлам.
 
 
По умолчанию серия файлов контекстов файлов:
- 
/etc/selinux/{SELINUXTYPE}/contexts/files/file_contexts
/etc/selinux/{SELINUXTYPE}/contexts/files/file_contexts.local
/etc/selinux/{SELINUXTYPE}/contexts/files/file_contexts.homedirs
/etc/selinux/{SELINUXTYPE}/contexts/files/file_contexts.subs
/etc/selinux/{SELINUXTYPE}/contexts/files/file_contexts.subs_dist
 
Где {SELINUXTYPE} - запись из файла конфигурации selinux config (см. selinux_config(5)).
Обязательным является только файл file_contexts, все остальные являются необязательными.
Записи внутри серии файлов контекстов файлов показаны в разделе ФОРМАТ ФАЙЛА.
 
ФОРМАТ ФАЙЛА
 
Формат контекстов файлов
Каждая строка внутри file_contexts и двух файлов настройки (.local и .homedirs) имеет следующий вид:
- 
pathname [file_type] context
 
Где:
- 
pathname
- 
Определяющая имя пути запись, которая может быть в виде регулярного выражения.
 
file_type
- 
Необязательный тип файла, который состоит из:
- 
-b - устройство блочного ввода-вывода      -c - устройство символьного ввода-вывода
-d - каталог                               -p - именованный канал
-l - символическая ссылка                  -s - сокет
-- - обычный файл
 
 
context
- 
Запись может быть одним из следующих:
- 
- a.
 - 
Контекст безопасности, который будет назначен этому файлу (то есть возвращён как context).
 - b.
 - 
Значение <<none>> можно использовать, чтобы указать, что для соответствующих файлов не следует повторно проставлять метки, а также при этом значении selabel_lookup(3) вернёт -1 при установке errno в ENOENT.
 
 
 
 
Пример:
- 
# ./contexts/files/file_contexts
# pathname file_type  context
/.*                   system_u:object_r:default_t:s0
/[^/]+        --      system_u:object_r:etc_runtime_t:s0
/tmp/.*               <<none>>
 
 
Формат файла подстановки
Каждая строка внутри файлов подстановки (.subs и .subs_dist) имеет вид:
- 
subs_pathname pathname
 
Где:
- 
pathname
- 
Путь, который соответствует записи в одном или нескольких файлах конфигурации политики контекстов файлов.
 
subs_pathname
- 
Путь, который станет псевдонимом имени пути (считается равнозначным при поиске).
 
 
Пример:
- 
# ./contexts/files/file_contexts.subs
# pathname  subs_pathname
/myweb      /var/www
/myspool    /var/spool/mail
Пример выше: когда в selabel_lookup(3) передаётся путь /myweb/index.html, функция заменяет компонент /myweb
на /var/www, поэтому будет использоваться следующий путь:
- 
/var/www/index.html
 
 
 
ПРИМЕЧАНИЯ
- 1.
 - 
Если контексты должны быть проверены, необходимо указать глобальный параметр SELABEL_OPT_VALIDATE перед вызовом selabel_open(3). Если этот параметр не указан, может быть возвращён недействительный контекст.
 - 2.
 - 
Если серия файлов контекстов файлов содержит много записей, selabel_open(3) может медленно выполнять чтение в файлах и (если это запрошено) проверку записей.
 - 3.
 - 
В некоторых версиях SELinux также может присутствовать файл file_contexts.template, но он устарел.
Файл шаблона имеет тот же формат, что и файл file_contexts, а также может содержать ключевые слова HOME_ROOT, HOME_DIR, ROLE и USER. Эта функциональность была перемещена в хранилище политик и управляется semodule(8) и genhomedircon(8).
 
 
СМОТРИТЕ ТАКЖЕ
selinux(8), 
selabel_open(3), 
selabel_lookup(3), 
selabel_stats(3), 
selabel_close(3), 
selinux_set_callback(3), 
selinux_file_context_path(3), 
freecon(3), 
selinux_config(5), 
lstat(2), 
selinux_file_context_subs_path(3), selinux_file_context_subs_dist_path(3), selinux_file_context_homedir_path(3), selinux_file_context_local_path(3), 
semodule(8), 
genhomedircon(8) 
 
АВТОРЫ
Перевод на русский язык выполнила Герасименко Олеся <
gammaray@basealt.ru>.