Для меня встал вопрос именно по безопасности, хотя сути это не меняет.
Учитывая, что большинство взломов производится не из-за "дырявой" системы (по крайней мере это относится к FreeBSD ), а из-за уязвимостей сервисов или неправильной их настройки.
Самым часто взламываемым сервисом является Веб.
Чтобы минимизировать ущерб от вероятного взлома, лучше поместить каждый сервис в свою отдельную "тюрьму" - виртуальную среду, за пределы которой злоумышленник не сможет выйти (или это будет крайне затруднительно).
Итак, поехали :)
Перед созданием jail необходимо обновить систему(обновить порты, пересобрать мир и ядро) + поставить набор базовых программ.
Создание jail.
Используем следующий скрипт (был взят у lissyara)
cat jail_create.sh
#!/bin/sh
# скрипт создания клеток
case "$2" in
create)
# стругаем клетку
jail_dir="$1"
mkdir -p ${jail_dir}
cd /usr/src
mkdir -p ${jail_dir}
make world DESTDIR=${jail_dir}
cd /usr/src/etc
make distribution DESTDIR=${jail_dir}
mount_devfs devfs ${jail_dir}/dev
;;
*)
echo ""
echo "Usage: `basename $0` { /path/to/jail/directory create }"
echo ""
exit 64
;;
esac
Запускаем его (учитывая, что будет собираться мир, то выполнение этого скрипта займет значительное время)
#./jail_create.sh /usr/local/jails/jail_test create
Пока идет сборка мира, подготовим родительскую машину.Заводим алиасы для каждого jail. У каждого jailа должен быть свой ip адрес!
# Переназываем интерфейс (для удобства)
ifconfig_em0_name="net0"
# IP реальной машины
ifconfig_net0="inet 192.168.0.200 netmask 255.255.255.0"
# альяс для первого jail`a
ifconfig_net0_alias0="inet 192.168.0.201 netmask 255.255.255.0"
Заставляем работать sshd в родительской системе на одном адресе:
>cat /etc/ssh/sshd_config | grep ListenAddress
ListenAddress 192.168.0.200
#ListenAddress ::
Вешаем syslogd на тот же адрес:
>cat /etc/rc.conf | grep syslo
syslogd_flags="-b 192.168.0.200"
Ждем пока соберется мир. После чего для надежности перезагружаем сервак (лучше сразу все поправить, чем потом разгребать...)
Проверяем, все ли альясы подцепились:
>ifconfig
plip0: flags=108810 mtu 1500
net0: flags=8843 mtu 1500
inet 192.168.0.200 netmask 0xffffff00 broadcast 192.168.0.255
inet 192.168.0.201 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:80:c8:24:a5:d2
lo0: flags=8049 mtu 16384
inet 127.0.0.1 netmask 0xff000000
Создаём в клетке пусой файл /etc/fstab
>touch /usr/local/jails/jail_test/etc/fstab
Создаём в ней файл /usr/local/jails/jail_test/etc/resolv.conf такого содержания:
nameserver 192.168.0.3
Добавляем в файл /usr/local/jails/jail_test/etc/rc.conf такую строку (если там нужен этот демон, аналогично и для других необходимых демонов)
sshd_enable="YES"
Затем на родительской машине добавляем такие строки в /etc/rc.conf
# запускать ли клетки
jail_enable="YES"
# список имён jail`ов разделённый пробелами, типа
# jail_list="test tets1 test2 test3"
jail_list="test"
# Разрешить руту в клетке изменять её имя хоста
jail_set_hostname_allow="YES"
# дальше настроки специфичные для кажой клетки
# корневая директория клетки `test`
jail_test_rootdir="/usr/local/jails/jail_test"
# имя хоста для клетки `test`
jail_test_hostname="test-jail.local"
# IP-адрес клетки `test`
jail_test_ip="192.168.0.201"
# Монтировать devfs в клетке `test`
jail_test_devfs_enable="YES"
# монтировать procfs в клетке `test`
jail_test_procfs_enable="YES"
# Флаги для клетки `test`
jail_test_flags="-l -U root"
Затем заводим пользователя и даём руту в клетке пароль, для этого входим в клетку:
>jail /usr/local/jails/jail_test/ test 192.168.0.201 /bin/csh
И заводим пользователя командой useradd. Не забываем задать пароль для рута. Выходим из клетки командой exit, и можно запускать:
>/etc/rc.d/jail start
Configuring jails:.
Starting jails: test-jail.local.
Первый запуск может занять много времени (до 5 мин, в зависимости от компа),т.к. sshd генерит ключи.
Последующие запуски будут гораздо быстрей.
Для ускорения, можно положить свои ключи, с реального хоста.
C клеткой можно работать точно также как и с реальной машиной - ставить приложения, запускать. Едиственое что - на -реальной машине, при установке любых приложений нужно не забывать вешать их на тот IP адрес который ей принадлеит - большинство приложений по дефолту слушают все адреса. Работает всё точно также шустро как и на реальной машине
Источники:
Установка и настройка клеток (jail) на FreeBSD6.1 + полезные коментарии
BSDA-jail-howto
Комментариев нет:
Отправить комментарий