С начальной точкой выполнения
sepolgen /path/to/binary
, которая дает вам:
app.fc
app.sh
app.if
app.spec
app.te
Для создания нового контекста файла SELinux
для применения к родительскому каталогу, содержащему файлы, которые будет изменять ваша программа / демон, вы редактируете приложение.te и добавьте:
type app_var_t;
files_type(app_var_t)
Первая строка объявляет новый тип, а вторая строка вызывает макрос, который творит чудеса и делает его типом файла (оказывается, вы не можете использовать строку контекста процесса app_exec_t для файла или каталога), см. «Возвращение к типам SELinux» для получения дополнительной информации о различных типах
После того, как вы объявили тип, вам нужно сообщить SELinux, что вашему приложению разрешено его использовать, в моем случае я добавил
allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };
Эти две строки в основном говорят, что разрешить типу app_t, который является доменом моего приложения, записывать / искать / и т. Д. Каталоги с контекстом app_var_t
и разрешать ему создавать / открывать / удалять / т. Д. Файлы с context app_var_t
Последняя часть головоломки состоит в том, чтобы каким-то образом указать SELinux, какие папки и файлы должны получить каждый тип. Для этого нужно отредактировать файл app.fc
(fc = > контекст файла)
в моем случае в этом файле есть только две строки:
/srv/bot/app -- gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)? gen_context(system_u:object_r:app_var_t,s0)
первая строка указывает прямо на двоичный файл, развернутый на моих серверах, поэтому этот файл получает app_exe c_t context.
Вторая строка означает:
Применить app_var_t к каталогу / srv / bot, а также ко всем файлам внутри каталога / srv / bot.
Обратите внимание на то, что первая строка имеет -
между путь и вызов gen_context
. -
означает применять только к файлам. во втором случае у нас ничего нет (только пробелы), что означает, что применить ко всем совпадающим каталогам и файлам, что я и хотел, другой вариант - использовать -d
для применения только каталогов.
Теперь у меня есть рабочая политика, я могу развернуть свое приложение с настраиваемой политикой, и все работает.(в моей политике гораздо больше записей в файле .te
, но это выходит за рамки этого вопроса.)
Дополнительные материалы для чтения, которые помогли мне найти это решение:
Подумайте, прежде чем просто слепо audit2allow -M mydomain
SELinux ДЛЯ РАЗРАБОТЧИКОВ КРАСНОЙ ШЛЯПЫ (Длинный PDF)
Модуль SElinux (1): типы и правила
Вам не нужен root-доступ, чтобы изменить свою собственную оболочку на любую оболочку, перечисленную в /etc/shells
.
Просто выполните chsh -s /bin/bash
.
Обычный пользователь может изменить только свою собственную оболочку. И только на одну из оболочек, перечисленных в /etc/shells
. Root может изменить оболочку любого пользователя на любую другую.
Подробности смотрите в man chsh
.
ПРИМЕЧАНИЕ: root может отключить это по своему усмотрению, например, удалив бит setuid в /usr/bin/chsh
или указав только одну или две оболочки в /etc/shells
. Однако в этом нет особого смысла, поскольку (как указывает MelBursian в своем комментарии) пользователь всегда может выполнить exec bash
в файле .rc или .profile для своей текущей оболочки. или просто ввести exec bash
в качестве первой команды при входе в систему.