суббота, 11 августа 2012 г.

Ezjail - легкое управление клетками в FreeBSD

Плюсы ezjail:

  • экономия места за счет создания базовой клетки на основе которой создаются все остальные (к примеру, директория basejail занимает 1,1 гигабайта, а вновь созданная клетка до запуска - 3 мегабайта), 
  • возможность легкого обновления клеток за счет обновления базовой клетки,
  • возможность базовой конфигурации новых клеток за счет использования шаблонов flavours,
  • автоматическое создание клеток в виртуальных дисках,
  • облегчение административных задач.

Пошаговая инструкция по запуску клеток с помощью ezjail:

1. Обновляем базовую систему из исходников. Кроме того, необходимо все возможные сервисы повесить на конкретные IP-адреса чтобы в будущем не было конфликтов сервисов запущенных в базовой системе и в клетках. Такими сервисами могут быть ftpd, sshd, dhcpd, syslogd, natd и прочие.

2. Устанавливаем ezjail из портов.
cd /usr/ports/sysutils/ezjail
make && make install
3. Создаем шаблон из которого будут создаваться клетки.

Просмотр списка жестких дисков в FreeBSD

Меня довольно долго волновал вопрос, как узнать какие физические жесткие диски установлены в системе, но еще не смонтированы и ответ никак не находился, но недавно нужная информация случайно попала мне в руки и, как всегда, оказалось, что все просто.

Просмотреть список жестких дисков установленных в системе в ОС FreeBSD можно командой:

fdisk -s

воскресенье, 24 июня 2012 г.

Как включить вывод ошибок в php

Лучший способ - включить вывод ошибок php с помощью файла .htaccess. Простой вариант:

php_value display_errors on
php_value display_startup_errors on
Расширенный вариант:
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag track_errors on
php_flag display_errors on
php_flag display_startup_errors on
php_flag log_errors on
php_flag mysql.trace_mode on
php_value error_reporting -1
php_value error_log /path/to/site/php-errors.log
Таким образом ошибки php будут выводиться на экран, а также логироваться в файл php-errors.log

Кроме того, можно включить вывод ошибок прямо из php скрипта:

Как изменить командную оболочку

Узнать, какая сейчас используется командная оболочка можно командой:

echo $SHELL
Изменить текущую оболочку можно с помощью команды vipw. Данная команда открывает содержимое файла passwd в редакторе vi. Для перехода в режим правки нужно нажать клавишу с символом i. Затем внести правку. К примеру, в строке вида:
root:$1$faKI$/PhoNgxjbCibJ3/:0:0::0:0:Charlie &:/root:/bin/сsh
изменить последний параметр на путь к необходимой оболочке. К примеру: /usr/local/bin/bash.

После этого необходимо сохранить изменения, для этого нажмите клавишу Esc, затем наберите с клавиатуры :wq и нажмите клавишу Enter.

Также можно использовать команду вида:
chpass username
которая откроет тот же vi, но парметры будут снабжены комментариями и не будет отображатся информация, относящаяся к другим пользователям. То есть информация выдается в более удобоваримом и безопасном виде. Также можно использовать команду chpass без параметров, тогда откроются параметры для текущего пользователя.

Но, наиболее простым способом изменить командную оболочку, на мой взгляд, является следующая команда:
pw user mod username -s /usr/local/bin/bash
То есть не нужно мучаться с vi и напрямую указать на какой путь необходимо изменить путь к оболочке и для какого пользователя. Вообще говоря, команда pw достойна отдельной статьи, но она дает не плохие подсказки в процессе использования.

Теперь при повторном входе в систему будет запущена новая, указанная вами, оболочка.

P. S. Менять оболочку пользователю root не рекомендуется, во избежание ошибок и последующей невозможности войти в систему. Если Вы хотите иметь привилегии пользователя root, но пользоваться другой оболочкой в FreeBSD предусмотрен пользователь toor. По умолчанию он отключен. Чтобы активировать пользователя toor, зайдите под пользователя root и выполните команду passwd toor и задайте пароль.

понедельник, 18 июня 2012 г.

Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)

При использовании нескольких jail вам может понадобиться ограничить доступные им ресурсы, к примеру, при оказании услуг VDS-хостинга.

Ранее не было встроенных механизмов ограничения доступных частоты процессора и оперативной памяти. В версии FreeBSD версии 9.0 появился механизм управления ресурсами RCTL (Hierarchical Resource Limits). Эта система позволяет ограничивать ресурсы как отдельным пользователям и процессам, так и целым jail.

По умолчанию, rctl не работает. Протестировать это можно командой:

/usr/bin/rctl ; echo $?

Результатом будет:

rctl: rctl_get_rules: Function not implemented
1

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

options RACCT
options RCTL

После того, как система начнет работать с модифицированным ядром будет запущен демон racctd. Та же команда будет выводить результат 0, что будет означать, что функция работоспособна.

Для управления правилами используется утилита rctl. Когда она выполняется без опций, то результатом будет вывод текущих правил на стандартный выход. Существуют следующие параметры команды rctl:

пятница, 15 июня 2012 г.

Настройка и управление jail в FreeBSD.

В файле /etc/sysctl.conf можно задать ряд параметров связаных с jail:

  • security.jail.set_hostname_allowed - разрешает менять имя хоста внутри jail, если задано реальное DNS имя, то лучше запретить,
  • security.jail.socket_unixiproute_only - позволяет создвавать сокеты в jail только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
  • security.jail.sysvipc_allowed - позволяет получить доступ к глобальному System V IPC;
  • security.jail.getfsstatroot_only - если установлена 1, то в jail можно получить информацию (df) только о той файловой системе на которой создан jail;
  • security.jail.allow_raw_sockets - разрешает создавать raw sockets, что позволяет использовать ping и некоторые другие сетевые утилиты;
  • security.jail.chflags_allow - если задана 1, то в jail появляется возможность модифицировать флаги ФС, если запретить, то можно создавать неизменяемые и неудаляемые файлы.

Все эти параметры могут принимать значения 0 или 1 и записываются, к примеру, так: security.jail.chflags_allow=0.

Параметры команды jail.

Чувствую, тут требуется полный перевод man jail, но мы сделаем лишь частичный:

Start translation mode.

Утилита jail создает новую клетку или меняет существующую, дополнительно заключая в тюрьму текущий процесс внутри неё.

Доступные опции:

-d - разрешает делать изменения в разрушающейся клетке

среда, 13 июня 2012 г.

Создание и настройка jail окружения в FeeBSD

1. Создание jail.

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

setenv D /usr/jails/base
mkdir -p $D
cd /usr/src
make buildworld
make installworld DESTDIR=$D
make distribution DESTDIR=$D
mount -t devfs devfs $D/dev

То есть переходим в каталог с исходниками, в качестве значения переменной JAIL указываем путь к директории, где будет располагаться jail. Далее создаем эту директорию, создаем "мир", устанавливаем его куда нужно, затем монтируем туда же файловую систему dev. Этот вариант хорош тем, что собрав "мир" один раз, мы можем достаточно быстро установить его в несколько директорий, если будет нужно создать несколько jail.

2. Настройка сети в корневой системе

Необходимо создать алиас сетевого интерфейса корневой системы, на котором будет работать jail. Каждой jail необходим свой алиас.

вторник, 22 мая 2012 г.

Утилита screen или как запустить процесс в фоне.

Если у вас когда-нибудь отваливалась консоль в процессе компиляции ядра или какой-нибудь толстой программы, то мысль о том, как бы запустить процесс на сервере без привязки к удаленному соединению обязательно вас посещала.

Пожалуй, самое популярное решение - утилита screen. Screen имеет широкий функционал, но даже при использовании по минимуму может принести много пользы. Итак, устанавливаем:

cd /usr/ports/sysutils/screen
make config && make && make install

Утилита готова к использованию:

screen
[Enter]

Всё, вот ваша заскриненая консоль. Можно запустить процесс, к примеру, компиляции, затем нажать Ctrl+a, затем d. И запущенный процесс будет идти в фоне на сервере, без привязки к удаленной консоли и даже если она отвалится работа не остановится. Вернуться в screen можно командой:

суббота, 19 мая 2012 г.

Быстрое обновление FreeBSD

Если нет желания перекомпилировать все компоненты системы, долго ждать и совершать много операций, то можно провести быстрое бинарное обновление системы, то существует волшебная утилита freebsd-update.

Действуем:

freebsd-update fetch
freebsd-update -r 9.0-RELEASE upgrade

Система проинформирует о том, что будет обновлено. Нужно будет согласиться с предложением.

freebsd-update install

Затем требуется перезагрузка для установки нового ядра. Ставится новое GENERIC ядро. Как следствие, внесенных вами изменений в нем не будет, то есть, может отвалиться файрволл, поллинг и прочее. Это может быть особенно неприятно, если вы используете сервер в качестве роутера. В этом случае в сетке не будет интернета, хорошо если вообще останется удаленный доступ к серверу. Будьте осторожны.

reboot
freebsd-update install

Далее, при необходимости пересобираем ядро:

Добавляем необходимые параметры в файл  /usr/src/sys/amd64/conf/GENERIC (для 64 разрядной версии, для 32 разрядной: меняем amd64 на i386), затем:

cd /usr/src
make -j4 buildkernel
make installkernel
reboot

Если обновление прошло не так, как вам хотелось бы, то можно откатиться к предыдущему состоянию:

freebsd-update rollback

Последнее замечание. Система использует конфигурационный файл /etc/freebsd-update.conf
В нем можно указать, что конкретно вы хотите обновлять, где хранить файлы и ещё ряд параметров.

вторник, 8 мая 2012 г.

FreeBSD управление алиасами сетевых интерфейсов

Чтобы добавить алиас сетевого интерфейса используйте команду вида:

ifconfig em0 inet alias 192.168.0.101 netmask 255.255.255.0

Чтобы удалить алиас:

 ifconfig em0 -alias 192.168.0.101

Чтобы алиасы сетевых интерфейсов создавались автоматически при старте системы, добавьте в /etc/rc.conf строки вида:

ifconfig_em0_alias0="inet 192.168.0.101 netmask 255.255.255.0"
ifconfig_em0_alias1="inet 192.168.0.102 netmask 255.255.255.0"