ИМЯ
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>.