Традиционно используемым методом ограничения процесса является использование
системного вызова chroot()
. Этот системный вызов меняет
корневой каталог, относительно которого определяются все остальные пути в самом процессе
и всех порожденных ими процессах. Для того, чтобы этот вызов был выполнен успешно,
процесс должен иметь право на выполнение (поиск) каталога, о котором идет речь. Новая
среда реально не вступит в силу, пока вы не выполните вызов chdir()
в вашей новой среде. Следует также отметить, что процесс
может с легкостью выйти из chroot-среды, если он имеет привилегии администратора. Это
может быть достигнуто созданием файлов устройств для чтения памяти ядра, подключением
отладчика к процессу вне узницы и многими другими способами.
Поведение системного вызова chroot()
можно некоторым
образом контролировать sysctl-переменной
kern.chroot_allow_open_directories. Когда эта переменная установлена в 0, chroot()
не сработает с ошибкой EPERM, если есть какие-либо
открытые каталоги. Если она установлена в значение по умолчанию, равное 1, то chroot()
не сработает с ошибкой EPERM, если есть какие-либо
открытые каталоги и процесс уже подвергнут вызову chroot()
.
Для всех других значений проверка открытости каталогов будет полностью опущена.
Концепция джейлов (Jail) расширяет возможности chroot()
,
ограничивая власть администратора созданием настоящих `виртуальных серверов'. Как только
тюремная камера создана, все сетевые коммуникации должны осуществляться через выделенный
адрес IP, а сила "привилегий пользователя root" в этой тюрьме довольно ограничена.
При работе внутри тюрьмы, любые проверки силы администратора в ядре при помощи вызова
suser()
будут оканчиваться неудачно. Однако некоторые
вызовы к suser()
были изменены на новый интерфейс suser_xxx()
. Эта функция отвечает за распознание и разрешение
доступа к власти администратора для процессов, не находящихся в неволе.
Процесс администратора внутри среды джейла имеет право:
Манипулировать привилегиями с помощью setuid
, seteuid
, setgid
, setegid
, setgroups
, setreuid
, setregid
и setlogin
Устанавливать ограничения на использование ресурсов при помощи setrlimit
Модифицировать некоторые sysctl-переменные (kern.hostname)
chroot()
Устанавливать следующие флаги на vnode: chflags
, fchflags
Устанавливать такие атрибуты vnode, как права доступа к файлу, изменять его владельца, группу, размер, время доступа и модификации.
Осуществлять привязку к привилегированному порту в области портов Интернет (порты с номерами < 1024)
Jail
является очень полезным инструментом для запуска
приложений в защищенном окружении, но есть и некоторые недостатки. На текущий момент к
формату suser_xxx
не преобразованы механизмы IPC, так что
такие приложения, как MySQL, не могут работать в джейле. Права администратора могут имеет
малую силу внутри джейла, но нет способа определить, что значит "малую".
POSIX® выпустила рабочий документ, который добавляет аудит событий, списки управления доступом, тонко настраиваемые привилегии, метки информации и жесткое управление доступом.
Этот документ находится в работе и находится в центре внимания проекта TrustedBSD. Некоторая начальная функциональность уже была добавлена во FreeBSD-CURRENT (cap_set_proc(3)).
Пред. | Начало | След. |
Проблемы с установленным битом UID | Уровень выше | Доверие |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.