Воскресенье, 21.12.2025, 13:42

Блог Владимира Степанова

Реклама
Статистика
Яндекс.Метрика
Онлайн всего: 2
Гостей: 2
Пользователей: 0
Меню
Категории раздела
FreeBSD OpenBSD [1]
Установка [4]
Настройка [21]
WWW [1]
Мелочи [1]
Файловая система [0]
Вход на сайт
Реклама
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Unix системы » Настройка

    Установка и настройка клеток (jail) на FreeBSD6.1

    Установка и настройка клеток (jail) на FreeBSD6.1


        И снова по просьбам трудящихся :))) На самом деле, статья эта не столько по просьбам народа, а больше по собственной необходимости - мне понадобилось поднять три самбы на одном хосте, в качестве контроллеров домена для трёх разных доменов. Подумавши, рассудил, что колупаться с тремя стартовыми конфигами, тремя конфигами, и т.д. не хочу. К тому же, не было уверенности, что всё удастся сделать через конфиги и параметры запуска, может придётся ковырять исходники, или Makefile, накрайняк. Кроче - ломало. Поэтому и затеял это - поднять их в отдельных клетках, и пусть себе пашут.
       Итак - теория :). Клетки (jail) появились с FreeBSD4.0 - причём в плане кодинга обошлись они поразительно дёшево - всего чё-то около 400 строк в коде ядра, для добавления туда поддержки клеток. Ну и всё. В клетке всё как вреальной машине, за тем исключением, что не работают сетевые приложения которым нужен прямой доступ к сетевым сокетам (например ping). Ну а в остальном - полноценная машина, кроме мелочей - shutdown не работает и т.п.
       Исходные данные: двухголовая машина 2xPIII 450MHz, чё-то около 512RAM, пара SCSI-дисков - под сиcтему и под раздел /usr, FreeBSD6.1. После вдумчивого прочтения "man jail", где кстати, всё расписано, для своего удобства, стругаем такой скриптик:
    /usr/home/lissyara/jail/>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

    Ну и запускаем его:
    /usr/home/lissyara/jail/>
    /usr/home/lissyara/jail/>./jail_create.sh /usr/local/jails/jail_test create


    /usr/home/lissyara/jail/>./jail_create.sh /usr/local/jails/jail_test create
    --------------------------------------------------------------
    >>> make world started on Wed Aug 9 12:58:26 MSD 2006
    --------------------------------------------------------------

    --------------------------------------------------------------
    >>> Rebuilding the temporary build tree
    --------------------------------------------------------------

    Понеслась. Пока он собирает мир, готовимся - надо на родительской машине (реальной) завести альясы для клеток - у каждой клетки должен быть свой IP адрес. Добавляем в /etc/rc.conf такие строки:
    # IP реальной машины
    ifconfig_ed0="inet 192.168.0.200 netmask 255.255.255.0"
    # альяс для первого jail`a
    ifconfig_ed0_alias0="inet 192.168.0.201 netmask 255.255.255.0"
    # альяс для второго jail`a
    ifconfig_ed0_alias1="inet 192.168.0.202 netmask 255.255.255.0"

    Заставляем работать sshd на одном адресе:
    /usr/home/lissyara/>cat /etc/ssh/sshd_config | grep ListenAddress
    ListenAddress 192.168.0.200
    #ListenAddress ::
    /usr/home/lissyara/>

    Вешаем syslogd на тот же адрес:
    /usr/home/lissyara/>cat /etc/rc.conf | grep syslo
    syslogd_flags="-b 192.168.0.200"
    /usr/home/lissyara/>

    После чего, если мир дособирался и проинсталлился (у меня ушло часа три-четыре), перезагружаем машину - можно и без перезагрузки, но с ней надёжней - вылезут все возможные ошибки. До перезагрузки у меня было так:
    /usr/home/lissyara/>sockstat | grep "*."
    root inetd 494 5 tcp4 *:21 *:*
    root sendmail 451 3 tcp4 127.0.0.1:25 *:*
    root sshd 445 3 tcp4 *:22 *:*
    root syslogd 325 6 udp4 *:514 *:*
    /usr/home/lissyara/>

    Ну а после стало так:
    /usr/home/lissyara/>sockstat | grep "*."
    root inetd 462 5 tcp4 192.168.0.200:21 *:*
    root sendmail 417 3 tcp4 127.0.0.1:25 *:*
    root sshd 411 3 tcp4 192.168.0.200:22 *:*
    root syslogd 291 6 udp4 192.168.0.200:514 *:*
    /usr/home/lissyara/>

    Проверяем, все ли альясы подцепились:
    /usr/home/lissyara/>ifconfig
    plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
    ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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
    inet 192.168.0.202 netmask 0xffffff00 broadcast 192.168.0.255
    ether 00:80:c8:24:a5:d2
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    inet 127.0.0.1 netmask 0xff000000

    Создаём в клетке пусой файл /etc/fstab
    /usr/home/lissyara/>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"
    inetd_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"

    Затем заводим пользователя и даём руту в клетке пароль, для этого входим в клетку:
    /usr/home/lissyara/>jail /usr/local/jails/jail_test/ test 192.168.0.201 /bin/csh

    И заводим пользователя командой useradd. Не забываем задать пароль для рута. Выходим из клетки командой exit, и можно запускать:
    /usr/home/lissyara/>/etc/rc.d/jail start
    Configuring jails:.
    Starting jails: test-jail.local.
    /usr/home/lissyara/>

    Запуск может занять много времени (минут 5), т.к. sshd генерит ключи. Последующие запуски будут гораздо быстрей. Для ускорения, можно положить свои ключи, с реального хоста.
       C клеткой можно работать точно также как и с реальной машиной - ставить приложения, запускать. Едиственое что - на -реальной машине, при установке любых приложений нужно не забывать вешать их на тот IP адрес который ей принадлеит - большинство приложений по дефолту слушают все адреса. Работает всё точно также шустро как и на реальной машине.



    Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=7122.

    размещено: 2006-08-10,
    последнее обновление: 2007-01-17,
    автор: lissyara

    Категория: Настройка | Добавил: Raxxell5059 (22.12.2010)
    Просмотров: 955 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]