Создание jail’ов в FreeBSD
Опубликовано 4 января, 2010 | рубрика:
freebsd
1. Создание джейла
Перед продолжением убедитесь, что у Вас уже установлены исходники в /usr/src и ip адрес x.x.x.x висит альясом на одном из интерфейсов.
Для управления джейлами установим jailadmin:
cd /usr/ports/sysutils/jailadmin/
make install clean
Определимся где будут жить джейлы. Например, это будет /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
Список запущенных джейлов:
Перейти в джейл:
где N – номер джейла из jls
OpenSSH chroot в FreeBSD
Опубликовано 12 августа, 2009 | рубрика:
freebsd
1. Установка OpenSSH.
Поддержка chroot появилась в OpenSSH начиная с версии 4.8. Если у вас FreeBSD версии 7.1 и выше – вы можете пропустить этот шаг и перейти сразу к конфигурированию, т.к. поддержка chroot уже имеется в sshd поставляющемся в дистрибутиве.
Собираем порт:
# cd /usr/ports/security/openssh-portable/
# make config
Оставляем опции по умолчанию и нажимаем “ок”.
Включим запуск openssh в /etc/rc.conf:
Что бы установленный из портов 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.
Опубликовано 12 августа, 2009 | рубрика:
bash
#!/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
Опубликовано 19 марта, 2009 | рубрика:
книги
Выложил документ “PF: Пакетный фильтр“. В документе подробно описывается синтаксис правил фильтра PF с указанием примеров.
Оглавление документа:
- PF: Начало
- Списки и макросы
- Таблицы
- Фильтрация пакетов
- NAT
- Перенаправление трафика
- Шаблоны для создания наборов правил
BASH. Добавление системного пользователя в FreeBSD.
Опубликовано 19 марта, 2009 | рубрика:
bash
Если мы решим написать скрипт для автоматизированного добавления системных пользователей, то неминуемо столкнемся с двумя вопросами.
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"