Украинская Баннерная Сеть

Аренда сервера. Выделенные серверы в Украине и Нидерландах
Аренда сервера

VPS, VDS, Windows VPS - от $10
VPS
Создание jail’ов в FreeBSD

1. Создание джейла

Перед продолжением убедитесь, что у Вас уже установлены исходники в /usr/src и ip адрес x.x.x.x висит альясом на одном из интерфейсов.

Для управления джейлами установим jailadmin:

cd /usr/ports/sysutils/jailadmin/
make install clean

Определимся где будут жить джейлы. Например, это будет /jails. Создадим эту директорию:

mkdir /jails

Создадим директорию для джейла с именем www.

mkdir /jails/www

Скопируем туда мир:

cd /usr/src
make buildworld
make installworld DESTDIR=/jails/www
make distribution DESTDIR=/jails/www

Отредатируем /etc/fstab, добавим туда:

devfs     /jails/www/dev     devfs   rw,noauto  0 0
proc      /jails/www/proc    procfs  rw,noauto 0 0

Отредактируем /usr/local/etc/jailadmin.conf:

jaildir=/jails
maxparallel=5
debug=1
default_devfsruleset=devfsrules_jail
default_fstab=/etc/fstab
default_shutdown=naive
default_startcommand=/bin/sh /etc/rc
default_usejtools=1

# ========= Jails ======
www
    ip: x.x.x.x
    hostname: www.example.com
    mount: /proc,/dev

2. Запуск, остановка, работа с джейлом

Запуск джейла и остановка выполняются командами:

jailadmin start www
jailadmin stop www

Список запущенных джейлов:

jls

Перейти в джейл:

jexec N sh

где N – номер джейла из jls

OpenSSH chroot в FreeBSD

1. Установка OpenSSH.

Поддержка chroot появилась в OpenSSH начиная с версии 4.8. Если у вас FreeBSD версии 7.1 и выше – вы можете пропустить этот шаг и перейти сразу к конфигурированию, т.к. поддержка chroot уже имеется в sshd поставляющемся в дистрибутиве.

Собираем порт:

# cd /usr/ports/security/openssh-portable/
# make config

Оставляем опции по умолчанию и нажимаем “ок”.

# make install clean

Включим запуск openssh в /etc/rc.conf:

openssh_enable="YES"

Что бы установленный из портов openssh заменил встроенный sshd из /etc/rc.conf убираем запуск встроенного sshd, для этого удаляем строку: sshd_enable=”YES”.

Установка завершена, переходим к конфигурированию.

2. Конфигурирование OpenSSH.

Редактируем /usr/local/etc/ssh/sshd_config (для 7.1 – /etc/ssh/sshd_config)

# Использовать только протокол версии 2
Protocol 2

# Включить поддержку SFTP
Subsystem       sftp    internal-sftp

# chroot'им пользователей группы chrootgroup
Match group chrootgroup
    ChrootDirectory /home/%u

Теперь все пользователи группы chrootgroup будут chroot’ится в свою домашнюю директорию. На пользователей остальных групп это не распространяется.

3. Создание базового набора файлов для chroot окружения.
Воспользуйтесь готовым скриптом создания chroot окружения

BASH. Создание chroot окружения для SSH chroot в FreeBSD.
#!/usr/local/bin/bash

# Проверка задано ли имя пользователя
if [ "$1" = "" ] ; then
  echo "    Usage: $0 [ username ]"
  exit
fi


USER=$1
GID=`cat /etc/master.passwd | grep "^$USER:" | cut -d ":" -f 4`
HOMEDIR=/home/$USER

# Задаем список бинарных файлов,
# которые хотим предоставить пользователю
BINARIES="
/bin/cat \
/bin/chmod \
/bin/cp \
/bin/csh \
/bin/date \
/bin/echo \
/bin/expr \
/bin/ln \
/bin/ls \
/bin/mkdir \
/bin/mv \
/bin/ps \
/bin/pwd \
/bin/rm \
/bin/rmdir \
/bin/sh \
/usr/bin/awk \
/usr/bin/bzip2 \
/usr/bin/diff \
/usr/bin/du \
/usr/bin/ee \
/usr/bin/fetch \
/usr/bin/find \
/usr/bin/grep \
/usr/bin/gunzip \
/usr/bin/gzip \
/usr/bin/less \
/usr/bin/sed \
/usr/bin/sort \
/usr/bin/tail \
/usr/bin/tar \
/usr/bin/touch \
/usr/bin/vi \
/usr/local/bin/bash \
/usr/local/bin/mc \
/usr/local/bin/mcedit \
/usr/local/bin/mcmfmt \
/usr/local/bin/unrar \
/usr/local/bin/unzip \
/usr/local/bin/wget"


# Создаем структуру каталогов внутри chroot окружения
mkdir $HOMEDIR/bin
mkdir $HOMEDIR/etc
mkdir $HOMEDIR/home
mkdir $HOMEDIR/home/$USER
mkdir $HOMEDIR/lib
mkdir $HOMEDIR/libexec
mkdir $HOMEDIR/tmp
mkdir $HOMEDIR/usr
mkdir $HOMEDIR/usr/bin
mkdir $HOMEDIR/usr/local
mkdir $HOMEDIR/usr/local/bin
mkdir $HOMEDIR/usr/local/etc
mkdir $HOMEDIR/usr/local/share

# Копируем бинарники внутрь chroot окружения
for item in $BINARIES;
do
  cp $item $HOMEDIR$item
done

# Определяем какие библиотеки необходимо скопировать
for item in $BINARIES;
do
  ldd $item |awk '{print $3}'|grep "."  >> /tmp/chroot_liblist
done

# Копируем библиотеки
for item in `cat /tmp/chroot_liblist|sort|uniq`;
do
  cp $item $HOMEDIR/lib/
done

# Копируем оставшиеся необходимые файлы и библиотеки
cp /etc/termcap $HOMEDIR/etc/termcap
cp /etc/resolv.conf $HOMEDIR/etc/resolv.conf
cp /etc/nsswitch.conf $HOMEDIR/etc/nsswitch.conf
cp -R /usr/local/share/mc $HOMEDIR/usr/local/share/mc
cp /libexec/ld-elf.so.1 $HOMEDIR/libexec/ld-elf.so.1
cp /libexec/ld-elf32.so.1 $HOMEDIR/libexec/ld-elf32.so.1

# Генерируем /etc/motd для chroot окружения
echo 'Welcome to chroot environment' > $HOMEDIR/etc/motd

# Генерируем /etc/profile для chroot окружения
echo 'export TERMCAP=/etc/termcap' > $HOMEDIR/etc/profile
echo 'export PS1="[ w ]$ "' >> $HOMEDIR/etc/profile

# Генерируем /etc/group для chroot окружения
cat /etc/group | grep $GID > $HOMEDIR/etc/group

# Переносим запись о пользователе
cat /etc/master.passwd|grep "^$USER:" > $HOMEDIR/etc/master.passwd
pwd_mkdb -d $HOMEDIR/etc $HOMEDIR/etc/master.passwd

# Выставляем права
chown root:wheel  $HOMEDIR
chmod 755 $HOMEDIR
chown -R $USER:$GID $HOMEDIR/bin
chown -R $USER:$GID $HOMEDIR/etc
chown -R $USER:$GID $HOMEDIR/home
chown -R $USER:$GID $HOMEDIR/lib
chown -R $USER:$GID $HOMEDIR/libexec
chown -R $USER:$GID $HOMEDIR/tmp
chown -R $USER:$GID $HOMEDIR/usr
chmod 777 $HOMEDIR/tmp

# Подчищаем за собой
rm /tmp/chroot_liblist
Новый документ – pf.pdf

Выложил документ “PF: Пакетный фильтр“. В документе подробно описывается синтаксис правил фильтра PF с указанием примеров.

Оглавление документа:

  • PF: Начало
  • Списки и макросы
  • Таблицы
  • Фильтрация пакетов
  • NAT
  • Перенаправление трафика
  • Шаблоны для создания наборов правил
BASH. Добавление системного пользователя в FreeBSD.

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

1. Как установить пользователю пароль?
Утилиты adduser и passwd являются интерактивными и мы не сможем передать им пароль параметром. Прийдется либо вводить пароль вручную, либо исхитрятся с expect. На помощь может прийти неинтерактивная утилита pw. Если вызывать pw с флагом “-h 0″, то утилите можно передавать пароль из командной строки, примерно так: “echo secret | pw useradd someuser -h 0″.

2. Как сгенерировать пароль?
Для генерации пароля можно воспользоватся утилитами типа pwgen, но для этого потребуется установить pwgen из /usr/ports/. Чтобы ничего не устанавливать можно воспользоваться штатными средствами и использовать /dev/urandom в качестве источника для генерации символов. Команда генерации пароля из восьми символов будет выглядеть так: “cat /dev/urandom | tr -dc a-zA-Z0123456789 | head -c 8″. Я намеренно использовал конструкцию a-zA-Z0123456789, а не a-zA-Z0-9. Дело в том, что по пока непонятным мне причинам при задании 0-9 в некоторых случаях в паролях присутствует символ “*” (проверялось на FreeBSD 6.2, как в остальных версиях – не знаю).

Теперь мы можем перейти к написанию скрипта для добавления системных пользователей. Приведу пример самого простенького скрипта.

#!/usr/local/bin/bash

if [ -z "$3" ]; then
echo "usage: $0   "
exit
fi

u_name="$1"
u_class="$2"
u_shell="$3"
pass=`cat /dev/urandom | tr -dc a-zA-Z0123456789 | head -c 8`

echo "$pass"|pw useradd -n $u_name -L $u_class -s $u_shell -h 0
mkdir /home/$u_name
chown $u_name:$u_name /home/$u_name
echo "User $u_name succesfully added with password $pass"

Украинская Баннерная Сеть
Hosting Catalog Rambler's Top100