Debian GNU/kFreeBSD
- 1 year ago
- 0
- 0
FreeBSD Jail ( англ. jail — «тюрьма») — механизм виртуализации в системе FreeBSD , позволяющий создавать внутри одной операционной системы FreeBSD несколько независимо работающих FreeBSD на том же ядре операционной системы, но совершенно независимо настраиваемых с независимым набором установленных приложений.
В основу FreeBSD Jail вошёл системный вызов chroot(2) , при котором для текущего процесса и всех его потомков, корневой каталог переносится в определённое место на файловой системе . При этом это место для процесса становится корневым каталогом. Таким образом, изолированный процесс может иметь доступ только к низлежащему дереву каталогов.
Однако FreeBSD Jail также имеет поддержку на уровне ядра , что позволяет ограничивать доступ к сети, общей памяти, переменным ядра sysctl и ограничивать видимость процессов вне jail.
Процесс, заключённый в Jail, может иметь доступ только к определённым IP-адресам операционной системы и использовать определённый . Такой процесс называется «изолированный процесс» или «Jailed-процесс».
Таким образом, создаётся безопасная «клетка», внутри которой можно исполнять даже потенциально опасное программное обеспечение, которое не сможет никак повредить основной системе или другим таким же «клеткам». До версии 9.0-RELEASE, FreeBSD Jail не имела средств контроля по использованию ресурсов (как это делает, например, OpenVZ под Linux ). С версии 9.0-RELEASE, подобные механизмы были введены через утилиту rctl(8) и фреймворк RACCT.
На уровне sysctl системы настраиваются привилегии Jailed-процессов:
Идентификатор sysctl | Контролируемая функциональность |
---|---|
security.jail.chflags_allowed | Возможность менять системные флаги файлов |
security.jail.allow_raw_sockets | Возможность создавать низкоуровневые сокеты |
security.jail.sysvipc_allowed | Возможность использовать System V IPC |
security.jail.set_hostname_allowed | Возможность задавать собственные hostname внутри Jailed-процессов (обычно hostname задаётся при вызове jail) |
security.jail.enforce_statfs | Возможность видеть все монтированные файловые системы внутри Jailed-процессов |
security.jail.socket_unixiproute_only | Ограничение по возможности создания UNIX/IPv4/route сокетов |
security.jail.list | Список запущенных JAIL'ов |
Наиболее частое использование FreeBSD Jail — создание изолированных безопасных виртуальных машин. В этом случае с помощью jail(8) запускается инициализирующий скрипт /etc/rc , который инициализирует запуск отдельной изолированной виртуальной системы. В случае даже самого деструктивного взлома виртуальной системы и вывода её функциональности из строя, остальных запущенных виртуальных систем это не коснется.
В практической деятельности хостинг-провайдеров механизм jail может быть использован для построения администрируемых (managed) систем на выделенных серверах . В таком варианте клиенту предоставляется доступ только к jail, а техническому персоналу компании-провайдера к мастер-системе.
FreeBSD Jail, при использовании в качестве виртуальной машины для запуска произвольного программного обеспечения, потребует полной эмуляции окружения системы, включая:
Каждая виртуальная машина на хостовой системе (до версии FreeBSD 7.2) обязательно потребует выделения одного IP-адреса для своего запуска. Также можно использовать один IP-адрес для нескольких машин, но при этом службы на этих виртуальных машинах не должны использовать одинаковые TCP/UDP порты .
Начиная с FreeBSD 8.0 каждой виртуальной машине можно присваивать несколько IP-адресов.
Более подробно об установке и использовании FreeBSD Jail можно прочитать в страницах man jail(8) или в официальной документации.
add path 'bpf*' unhide