Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Службы ядра Реализация тюрьмы

Реализация тюрьмы

Реализация системного вызова jail проста. Выделяется и заполняется предоставленными аргументами структура данных prison. Структура prison связывается со структурой процесса вызывающего процесса. Значение счетчика ссылок структуры prison устанавливается в единицу, и для установки корневого каталога тюрьмы осуществляется системный вызов chroot. После своего создания структура prison не может быть изменена.

Ловушки в коде, реализующем создание и разрушение процесса, поддерживают счетчик ссылок на структуру prison и освобождают ее при освобождении последней ссылки. Любые новые процессы, созданные процессом в тюрьме, унаследуют ссылку на структуру prison, что помещает новый процесс в ту же самую тюрьму.

Потребовались некоторые изменения для ограничения видимости и взаимодействия процессов. Интерфейсы ядра, сообщающие о работающих процессах, были изменены, чтобы сообщать лишь о процессах, находящихся в той же самой тюрьме, что и запрашивающий процесс. Определение того, может ли один процесс отправить сигнал другому, основывается на значениях UID и GID отправляющего и получающего процессов. При наличии тюрьмы ядро добавляет требование, чтобы получающий процесс находился в той же самой тюрьме, если отправляющий процесс заключен в тюрьму.

Несколько изменений было добавлено в реализацию работы в сети.

Ограничение доступа через TCP и UDP лишь одним IP-адресом было сделано почти полностью в коде, который управляет управляющими блоками протоколов (см. раздел 13.1). Когда процесс, заключенный в тюрьму, привязывается к сокету, предоставленный процессом IP-адрес использоваться не будет; вместо этого используется предварительно сконфигурированный IP-адрес тюрьмы.

Для подключения к серверам на локальной машине процессами используется интерфейс обратной петли, имеющий IP-адрес 127.0.0.1. Когда к адресу 127.0.0.1 подключается процесс, работающий в тюрьме, ядро должно перехватить и перенаправить запрос соединения по IP-адресу, связанному с тюрьмой.

Интерфейсы, посредством которых можно запросить состояние соединения и сетевую конфигурацию, были изменены таким образом, чтобы предоставлять лишь сведения, имеющие отношение к сконфигурированному IP-адресу находящегося в тюрьме процесса.

Потребовалось изменить драйверы устройств для совместно используемых устройств, такие, как драйвер псевдотерминала, чтобы обеспечить невозможность доступа к определенному терминалу в одно и то же время более чем из одной тюрьмы.

Простейшим, но наиболее утомительным изменением была проверка всего ядра на предмет наличия мест, допускавших дополнительные привилегии суперпользователя. Лишь 35 из 300 проверенных в FreeBSD 5.2 были открыты для заключенных в тюрьму процессов, работающих с привилегиями суперпользователя. Поскольку по умолчанию находящиеся в тюрьме суперпользователи не получают привилегий, новый код или драйверы автоматически оказываются осведомленными о тюрьме: они будут отвергать привилегии суперпользователей, находящихся в тюрьме.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 70 гостей онлайн

Реклама на сайте: