Механизм управления доступом (часть 2)

Этот абстрактный риск становится более ясным при использовании реального практического примера: многие провайдеры веб-служб используют FreeBSD для размещения веб-сайтов заказчиков. Эти провайдеры должны защитить целостность и конфиденциальность своих собственных файлов и служб от своих заказчиков. Они должны также защищать файлы и службы одного заказчика от (случайного или умышленного) доступа другим заказчиком. Провайдер хотел бы предоставить заказчикам значительную автономию, позволяя им устанавливать и поддерживать свое собственное программное обеспечение и управлять своими собственными службами, такими, как веб-серверы и другие программы-демоны, связанные с содержанием.

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

Управление доступом в стиле FreeBSD делает общеизвестно трудным возможности разделения на отсеки. Хотя такие механизмы, как chroot, предоставляют умеренный уровень обособления, у этого механизма есть серьезные недостатки как в масштабах его возможностей, так и предоставляемой эффективности. Системный вызов chroot впервые был добавлен для предоставления альтернативной среды построения для системы. Затем он был приспособлен для изолирования анонимного доступа ftp к системе.

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

С годами были обнаружены три класса ухода за границы созданной chroot файловой системы

  • Рекурсивные уходы chroot.
  • Уходы с использованием ...
  • Уходы с использованием fchdir.

Все эти уходы использовали отсутствие наблюдения за применением нового корневого каталога.

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

Даже с более строгой семантикой системного вызова chroot недостаточно для обеспечения полного разделения. Его обособление не простирается на пространства процессов или сетей. Следовательно, возможно как наблюдение, так и вмешательство в процессы за пределами своих отделений. Для предоставления окружения безопасной виртуальной машины FreeBSD добавило новое средство «тюрьма» (jail), построенное поверх chroot. Процессам в тюрьме предоставляется полный доступ к файлам, которыми они могут манипулировать, процессам, на которые они могут влиять, и сетевым службам за пределами их тюрьмы.

В отличие от других решений проблемы безопасности с точным уровнем модульности тюрьма не повышает в существенной степени требования к управлению политикой для системного администратора. Каждая тюрьма является виртуальной средой FreeBSD, которая допускает независимое управление локальной политикой. Среда внутри тюрьмы имеет те же свойства, как для центральной системы. Таким образом, среда тюрьмы знакома администратору и совместима с приложениями.

Еще материалы

  • Процедуры вычисления приоритета потока -

    Вычисления приоритета, использованные в алгоритме кратковременного планирования, разбросаны в различных частях системы. Периодически запускаются две процедуры, schedcpuQ и roundrobinQ. SchedcpuQ пересчитывает приоритеты потоков раз в секунду, используя формулу 4.2, и обновляет значение kg_slptime для потоков, заблокированных вызовом sleepQ. Процедура roundrobinQ запускается 10 раз в секунду и заставляет систе­му перепланировать потоки в (непустой) очереди с самым высоким приоритетом в режиме карусели, что дает каждому потоку квант времени в 100 миллисекунд.

  • Учет использования ресурсов -

    Система поддерживает простую форму учета использования ресурсов. По завершении каждого процесса учетная запись, описывающая использованные этим процессом ре­сурсы, записывается в системный файл учета.

  • Идентификаторы и SETID -

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

  • Идентификаторы (Часть 2) -

    Часто пользователю нужно предоставить дополнительные ограниченные привиле­гии. Например, пользователь, который хочет отправить сообщение, должен иметь воз­можность добавить сообщение в почтовый ящик другого пользователя. Разрешение записи в почтовый ящик назначения для всех пользователей дало бы возможность пользователю, не являющемуся владельцем ящика, изменять в нем сообщения (злона­меренно или неумышленно). Чтобы решить эту проблему, ядро допускает создание программ, которым предоставляются при их выполнении дополнительные привиле­гии.

  • Корректировка времени и интервальное время -

    Часто желательно на всех машинах сети поддерживать одно и то же время. Можно также поддерживать более точное время, чем возможно от базовых часов процессора. Например, без труда доступно оборудование, прослушивающее ряд радиостанций, рассылающих в Соединенных Штатах синхронизирующие сигналы UTC. Когда про­цессы на различных машинах приходят к соглашению относительно общего времени, им нужно изменить часы процессора своего хоста, чтобы согласовать их с сетевым значением времени.