Изменение оболочки на / bin / bash без корневого доступа через файл [дубликат]

С начальной точкой выполнения

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 , но это выходит за рамки этого вопроса.)

Дополнительные материалы для чтения, которые помогли мне найти это решение:

Упрощение работы с sepolgen

Подумайте, прежде чем просто слепо audit2allow -M mydomain

SELinux ДЛЯ РАЗРАБОТЧИКОВ КРАСНОЙ ШЛЯПЫ (Длинный PDF)

Модуль SElinux (1): типы и правила

Пример политики (особенно postgresql)

Общие сведения о файлах контекстов файлов

2
24.03.2016, 06:33
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 в качестве первой команды при входе в систему.

5
27.01.2020, 21:56

Теги

Похожие вопросы