Archive

Posts Tagged ‘jail’

Настройка Jail в FreeBSD с помощью ezjail

July 14th, 2009 No comments

Перевод: Сгибнев Михаил
Оригинал: Setup FreeBSD Jail With ezjail

Зададимся вопросом – как, используя сервер на базе FreeBSD, получить несколько независимых окружений, в народе называемых jail? Например, как использовать одну из jail для почтового сервера, а вторую для web-сервера, при этом каждая jail должна иметь собственный IP-адрес?

Каждая jail на FreeBSD имеет собственные файлы, процессы и учетные записи. Находясь внутри, практически невозможно отличить jail от реальной системы. Самым простым способом определения, создания и модифицирования jail является использование среды ezjail.

Внимание! Сетевые демоны, перед использованием jail, должны быть сконфигурированы на использование адреса 127.0.0.1 или на работу с адресом интерфейса. По крайней мере, это необходимо сделать со службами sshd и syslogd.

Вводные данные

  • server.nixcraft.net.in : FreeBSD host server running v7.2 with 202.54.1.2
  • smtpd.nixcraft.net.in : Mail server jail with 202.54.1.3
  • httpd.nixcraft.net.in : Web server jail with 202.54.1.4

Шаг 1: Обновляем корневую систему

Убедитесь в том, что ваша система достаточно актуальна. Руководство по обновлению системы вы можете найти здесь.

Шаг 2: Устанавливаем ezjail

Для установки ezjail выполните нижеприведенные команды. Таким образом, мы получим два скрипта, позволяющие нам более просто управлять жизненным циклом jail.

    # cd /usr/ports/sysutils/ezjail
    # make install clean
    

Расположение файлов ezjail по умолчанию:

  1. /usr/jails/ каталог размещения шаблонов jail.
  2. /usr/jails/flavours/ настройка каждой jail может быть выполнена через flavours.
    Служит для того чтобы, например, добавить значение по умолчанию в файл /etc/resolv.conf или обновить существующий файл /etc/make.conf
  3. /usr/jails/basejail/ базовая система jail, которая монтируется в режиме “read only” и
    является одинаковой для всех jail, что позволяет сэкономить место на жестком диске.
  4. /usr/local/etc/rc.d/ezjail.sh скрипты Stop/Start/Restart
  5. /usr/local/etc/ezjail.conf конфигурационный файл ezjail, который содержит настройки для rc скрипта. Таже данный файл может быть просмотрен
    командой ezjail-admin.
  6. /usr/local/etc/ezjail/ все файлы конфигурации ваших jail хранятся здесь

Шаг 3: Создаем базовый шаблон jail

Для создания или обновления окружения ezjail (aka basejail) из исходных текстов, выполните следующую команду:

    # ezjail-admin update -p -i
    

 Где:

  • -p : Provide ports for jail.
  • -i : не запускать “make world”.

Если у вас нет /usr/src и вы никогда не запускали make world, вы можете установить шаблон с ftp сервера, используя утилиту ezjail-admin:

    # ezjail-admin install
    

 Шаг 4: Создаем SMTPD Mail Server Jail

 Для создания jail smtpd.nixcraft.net.in с адресом 202.54.1.3, располагающейся в каталоге /jails/smtpd.nixcraft.net.in, выполните следующую команду:

    # ezjail-admin create -r /jails/smtpd.nixcraft.net.in smtpd.nixcraft.net.in 202.54.1.3
    

 Обновление файла конфигурации SMTPD Jail

 По умолчанию, файл конфигурации расположен в /usr/local/etc/ezjail/smtpd_nixcraft_net_in. Откройте его и добавьте следующие строки:

    export jail_smtpd_nixcraft_net_in_hostname="smtpd.nixcraft.net.in"
    export jail_smtpd_nixcraft_net_in_ip="202.54.1.3,10.21.51.12"
    

 Шаг 5: Запускаем сервис jail

 Добавим строку запуска в файл /etc/rc.conf:

    # echo 'ezjail_enable="YES"' >> /etc/rc.conf
    

 После чего можем запустить службу:

    # /usr/local/etc/rc.d/ezjail.sh start
    

 Для управления конкретным jail можно воспользоваться следующими командами:

    # /usr/local/etc/rc.d/ezjail.sh {start/stop/restart} jail-name
    # /usr/local/etc/rc.d/ezjail.sh start httpd
    # /usr/local/etc/rc.d/ezjail.sh stop smtpd.nixcraft.net.in
    

 Просмотреть список jail можно командой:

    # jls
    

 Или, для получения дополнительной информации, воспользуйтесь синтаксисом:

    # jls -v
    

 Дя того, чтобы подключиться к jail, воспользуйтесь командой:

    # jexec jid csh
    

 При этом jid можно получить из вывода команды jls. В данном примере мы подключаемся к jail
smtpd.nixcraft.net.in с jid # 2:

    # jexec 2 csh
    

 После подключения к jail мы можем устанавливать необходимое нам ПО, например bash:

    # pkg_add -r -v bash
    

 Или сервер Apache 2.2:

    # cd /usr/ports/www/apache22
    # make install clean
    

 Для того, чтобы подключаться к jail удаленно, необходимо внести следующие изменения в ее файл /etc/rc.conf:

    # echo 'sshd_enable="YES"' >> /etc/rc.conf
    

 Затем откроем файл sshd_config и укажем в нем использовать только IP адрес, назначенный данной jail.
После чего запускаем сервер OpenSSH:

    # /etc/rc.d/sshd start
    # sockstat -4
    

 Обновить FreeBSD Jail можно так:

    # /usr/local/etc/rc.d/ezjail.sh stop
    # ezjail-admin update -p -i
    # /usr/local/etc/rc.d/ezjail.sh start
    

 Для обновления дерева портов используйте команду:

    # ezjail-admin update -P
    

 Журнальные файлы jail по умолчанию хранятся в каталоге /var/log.
Для того чтобы, к примеру, просмотреть логи jail smtpd.nixcraft.net.in, воспользуйтесь командой:

    # tail -f jail_smtpd_nixcraft_net_in_console.log
    # grep 'error' jail_smtpd_nixcraft_net_in_console.log
    

 Для добавления httpd jail выполните следующие действия:

    # ezjail-admin create -r /jails/httpd.nixcraft.net.in httpd.nixcraft.net.in 202.54.1.4
    # vi /usr/local/etc/ezjail/httpd_nixcraft_net_in
    # /usr/local/etc/rc.d/ezjail.sh start httpd.nixcraft.net.in
    # jls -v
    # jexec id csh
    

 Для резервного копированя jail рекомендую воспользоваться командами
tar,
rsync и
dump.

 Для сохранения данных на ленту, воспользуйтесь командой:

    # tar -zcvf /dev/sa0 /jails/smtpd.nixcraft.net.in
    

 Для сохранения всех jail, расположенных в каталоге /jails используйте:

    # /sbin/dump -0uLf /dev/sa0 /jails/
    

 А для инкрементных обновлений полученного архива:

    # /sbin/dump -1uLf /dev/sa0 /jails/
    

Используемая литература:

Раздел FreeBSD Jail FreeBSD handbook.

Tags: ,

Jail (3)

February 21st, 2006 No comments

Нашел прикольный скрипт на страницах maillist’ов freebsd

#——————- create jail script ———————–
#!/bin/sh
ID=${ARGV[1]}
DEST=/jails/jail.${ID}
IMAGE=/jails/images/jail.${ID}

# create a blank disk image of 512 Mb
dd if=/dev/zero of=${IMAGE} bs=1024k count=512
mdconfig -a -t vnode -f ${IMAGE} -u ${ID}
bsdlabel -w md${ID} auto
newfs md${ID}c
mount /dev/md${ID}c ${DEST}

# create jail using created image
cd /usr/src
mkdir -p ${DEST}
make world DESTDIR=${DEST}
cd etc
make distribution DESTDIR=${DEST}
mount_devfs devfs ${DEST}/dev
cd ${DEST}
ln -sf dev/null kernel
#———————— End script ———————–

Jail (2)

February 21st, 2006 No comments

1. Замечены глюки в sshd, лечится прописыванием ип алиаса в /etc/hosts
echo ’10.0.0.1 psyshit.myhost.com’ >> /etc/hosts
2. Что бы из jail’а можно было выходить в сеть, поднять нат еще надо..
# cat /etc/natd.conf
interface rl0
use_sockets yes
same_ports yes

# cat /etc/rc.firewall
ipfw -q add 50 divert natd all from any to any via rl0
ipfw -q add 100 allow all from any to any

# cat /usr/src/sys/i386/conf/AVRIL

options IPFIREWALL
options IPDIVERT

# cat /etc/rc.conf

natd_enable=”YES”
natd_interface=”rl0″
natd_flags=”-f /etc/natd.conf”
firewall_enable=”YES”

Jail

February 21st, 2006 No comments

Прикольная тема, виртуальная машина.. ее могут ебать до писинения даже из под рута.. а данные основной все ровно сохранятся.. попробуем значит перетащить туда все (ну или почти все) сетевые сервисы :) А может их в разные jail’ы надо? Надо еще почитать идеологию..

Как создать jail:
# cd /usr/src/
# mkdir /usr/jail
# make world DESTDIR=/usr/jail
# cd etc
# make distribution DESTDIR=/usr/jail
# cd /usr/jail
# mount_devfs devfs dev
# ln -sf dev/null kernel

После создаем алиас на интерфейс:
ifconfig fxp0 inet alias 10.0.0.1/32

Запускаем Jail:
jail /usr/jail psyshit 10.0.0.1 /bin/csh

Конфигурируем:
# echo ‘nameserver …’ > /etc/resolv.conf
# touch /etc/fstab
# newaliases
# echo ‘sendmail_enable=”NO”‘ >> /etc/rc.conf
# echo ‘sshd_enable=”YES”‘ >> /etc/rc.conf

rc.conf для автоматической настройки jail’а…
jail_enable=”YES”
jail_list=”psyshit”
jail_psyshit_rootdir=”/usr/jail”
jail_psyshit_hostname=”psyshit.myhost.com”
jail_psyshit_ip=”10.0.0.1″
jail_psyshit_exec=”/bin/sh /etc/rc”
jail_psyshit_devfs_enable=”YES”

ifconfig_rl0_alias0=”inet 10.0.0.1 netmask 255.255.255.255″