Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Безопасность работы с системой Linux

Запуск ssh/sftp в chroot-окружении на Fedora 7

Оригинал: Chrooted SSH/SFTP On Fedora 7
Автор: Oliver Meyer
Дата: 10 августа 2007 г.
Перевод: Андрей Синицын aka boombick
Дата перевода: 9 февраля 2008

При копировании материала обязательны указание автора, переводчика и ссылки на оригинал статьи и настоящую страницу как первоисточник перевода!

Этот документ описывает настройку chroot-окружения для SSH/SFTP на Fedora 7. Chroot-пользователи будут заперты в пределах одной директории и не смогут покинуть ее. Доступ к этой директории будет осуществляться при помощт SSH/SFTP.

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

Хочу оговориться, что данный способ далеко не единственный, и существует немало других вариантов. Я выбрал этот способ, но я не даю никаких гарантий, что он максимально соответствует вашим потребностям.

Метод 1 - ручная настройка

Для начала установим некоторые необходимые пакеты

yum install openssl-devel pam-devel
yum groupinstall 'Development Tools'
и поправим конфигурационные файлы. В /etc/ssh/sshd_config закомментируйте следующие строки
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
а в /etc/ssh/ssh_config закомментируйте строку
GSSAPIAuthentication yes
Затем мы скачаем патчи к OpenSSH и сконфигурируем их для наших целей (/usr для исполняемых файлов, /etc/ssh для конфигурационных файлов и использование PAM для аутентификации):
cd /tmp/
wget http://chrootssh.sourceforge.net/download/openssh-4.5p1-chroot.tar.bz2
tar xvfj openssh-4.5p1-chroot.tar.bz2
cd openssh-4.5p1-chroot
./configure --exec-prefix=/usr --sysconfdir=/etc/ssh --with-pam
make
make install

Создание chroot-окружения

Теперь создадим chroot-окружение в /home/chroot - здесь будут размещаться каталоги для всех наших SSH-пользователей.

mkdir -p /home/chroot/home/
cd /home/chroot
mkdir -p usr/lib/openssh/
mkdir bin lib usr/bin dev etc
mknod dev/null c 1 3
mknod dev/zero c 1 5
chmod 666 dev/null dev/zero

Теперь, когда необходимые директории созданы, скопируем некоторые бинарные файлы и зависимые от них библиотеки в наш chroot. Для этого мы используемый небольшой bash-сценарий, написанный Falko Timme и адаптированный автором статьи для корректной работы в Fedora 7. Примечание: Вы можете разрешить chroot-пользователям доступ к бОльшему количеству программ. Просто добавьте их в переменную APPS.

Разместим наш сценарий в /usr/local/sbin, назовем его create_chroot_env, сделаем его исполняемым и запустим:

chmod 700 /usr/local/sbin/create_chroot_env
create_chroot_env
Скопируем еще несколько дополнительных библиотек в наше chroot-окружение: Далее выполните следующее:
echo '#!/bin/bash' > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
touch etc/passwd
grep /etc/passwd -e "^root" > etc/passwd

Также мы должны выбрать группу для пользователей chroot и поместить ее в файл /home/chroot/etc/group. Группа должна существовать и в основной системе. В этом руководстве мы будем использовать группу users:
grep /etc/group -e "^root" -e "^users" > etc/group
Теперь перезапустим SSH-сервер:
/etc/init.d/sshd restart

Создание пользователей chroot

Мы установили chroot-окружение для OpenSSH, но необходимо разделить пользователей, имеющих полный доступ к системе (например, вы можете захотеть залогиниться как root) и тех, кто будет работать в ограниченном окружении. Разделение будет выполняться при помощи точки в пути к домашней директории, в файле /etc/passwd. Если путь содержит точку, пользователь будет заперт в пределах chroot.

Пользователь работает в ограниченном окружении:

user_b:x:2003:100:User B:/home/chroot/./home/user_b:/bin/bash
Пользователь имеет полный доступ:
user_a:x:2002:100:User A:/home/user_a:/bin/bash

Создадим пользователя testuser с домашней директорией /home/chroot/./home/testuser/, принадлежащего к группе users:

useradd -s /bin/bash -m -d /home/chroot/./home/testuser/ -c "testuser" -g users testuser
После создания нового аккаунта необходимо задать пароль для него
passwd testuser
Теперь скопируем запись для нового пользователя из /etc/passwd в /home/chroot/etc/passwd
grep /etc/passwd -e "^testuser" >> /home/chroot/etc/passwd
Так как мы уже скопировали группу для chroot-пользователей из /etc/group в /home/chroot/etc/group, нам больше не надо этого делать. Если вы хотите использовать какие-то дополнительные группы, их так же необходимо продублировать в файле /home/chroot/etc/passwd
grep /etc/group -e "^othergroup" >> /home/chroot/etc/group
Все готово. Попытайтесь авторизоваться в системе через SSH или SFTP как пользователь testuser. Вы попадете в chroot-окружение.

Метод 2 - использование сценария

Существует сценарий, который называется make_chroot_jail.sh. Он автоматизирует работы с chroot-окружением, найти его можно по адресу: http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/. Сценарий нормально работает под Fedora 7, хотя в вашей системе могут отстутствовать файлы ld-ldb.so.3 и/или libxcrypt.so.1 (вы увидите соответствующие сообщения во время исполнения сценария). Не волнуйтесь, все нормально работает и без них. Установим необходимые пакеты:
yum install sudo
Скачаем сценарий и сделаем его исполняемым
cd /usr/local/sbin
wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 make_chroot_jail.sh
Теперь вы можете создавать chroot-пользователей при помощи следующей команды:
make_chroot_jail.sh %username% [%path_to_chrootshell% [%path_to_chroot%]]
Например
make_chroot_jail.sh testuser /bin/chroot-shell /home/chroot
Если пользователь не существует - он будет создан. Если существует, то данные о нем будут обновлены. Параметры %path_to_chrootshell% и %path_to_chroot% не являются обязательными. Если вы не укажете их, то будут использованы значения по умолчанию: /bin/chroot-shell и /home/jail.

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

make_chroot_jail.sh update [%path_to_chrootshell% [%path_to_chroot%]]
Например
make_chroot_jail.sh update /bin/chroot-shell /home/chroot
Параметры %path_to_chrootshell% и %path_to_chroot% не являются обязательными и зависят от того, как вы создавали пользователя.

Пользователям proFTPd

Замечание для пользователей proFTPd: при использовании сценария http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/ вы НЕ должны указывать chroot-оболочку /bin/chroot-shell в файле /etc/shells, потому что это создает угрозу безопасности и может позволить пользователю покинуть пределы chroot. Но proFTPd требует, чтобы пользователь имел оболочку, описанную в /etc/shells.

Проблема решается добавлением в конфигурационный файл /etc/proftpd/proftpd.conf следующего параметра:

RequireValidShell	off
После внесения изменения перезапустите proFTPd
/etc/init.d/proftpd restart
Теперь все пользователи, вне зависимости от используемой оболочки, смогут использовать proFTPd. Но, на мой взгляд, куда более лучшим и безопасным решением будет отказ от использования FTP и полный переход на SFTP.