Это руководство повествует о том как установить и запустить OpenSSH с
chroot-ограничением. При помощи такой настройки появляется возможность дать
пользователю shell доступ без опасения, что он сможет порушить весь сервер.
Таким образом "входящий" юзер будет заперт в своей домашней директории без
возможности покинуть ее.
В примере расстраивается система Debian Sarge (Debian 3.1), а SSH в chroot
будет установлен так, что по прежнему будет использовать стандартный файл
конфигурации /etc/ssh/ и останется возможность работать со старым скриптом /etc/init.d/ssh.
1. Устанавливаем новую версию Zlib
Для работы необходима новая версия архиватора, так как в старой была
обнаружена ошибка, способная скомпрометировать систему:
cd /tmp
wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar xvfz zlib-1.2.3.tar.gz
cd zlib-1.2.3
make clean
./configure -s
make
make install
2. Устанавливаем chroot-нутый SSH
Это достаточно просто. Скачиваем пропатченные исходники OpenSSH, настраиваем
директории (/usr для исполняемых файлов и /etc/ssh для конфигурационных файлов)
и разрешаем PAM аутентификацию:
cd /tmp
apt-get install libpam0g-dev openssl libcrypto++-dev libssl0.9.7 libssl-dev ssh
wget http://chrootssh.sourceforge.net/download/openssh-4.2p1-chroot.tar.gz
tar xvfz openssh-4.2p1-chroot.tar.gz
cd openssh-4.2p1-chroot
./configure --exec-prefix=/usr --sysconfdir=/etc/ssh --with-pam
make
make install
3. Настрйока chroot
Создаем среду для работы пользователя /home/chroot, это и будет та директория
куда попадет SSH пользователь и откуда выхода он иметь
не будет. Для работы потребуется создать ряд директорий и скопировать нужные
бинарники с библиотеками:
mkdir /home/chroot/
mkdir /home/chroot/home/
cd /home/chroot
mkdir etc
mkdir bin
mkdir lib
mkdir usr
mkdir usr/bin
mkdir dev
mknod dev/null c 1 3
mknod dev/zero c 1 5
Для автоматизации можно использовать скрипт, который сделает все правильно и
более быстро: create_chroot_env. Если есть
потребность расширить список приложений, то их можно просто прописать в скрипте
в параметр APPS.
Затем делаем следующее:
cp /lib/libnss_compat.so.2 /lib/libnsl.so.1 /lib/libnss_files.so.2 ./lib/
echo '#!/bin/bash' > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
touch etc/passwd
grep /etc/passwd -e "^root" > etc/passwd
Следует так же скопировать строчку с группой в которой создадим пользователя
из /etc/group в /home/chroot/etc/group. В данном примере мы создадим
пользователя в группе user и, соответственно, копирование будет выглядеть так:
grep /etc/group -e "^root" -e "^users" > etc/group
Рестартуем SSH:
/etc/init.d/ssh restart
4 Создаем пользователя для chroot
Даже с SSH, запущенным в chroot среде, остается возможность зайти на машину
вне ограничений, накладываемых средой. Как же SSH решить кого ограничивать, а
кого нет? Это решается просто: "закрытая" SSH ищет заходящего пользователя в
/etc/passwd и если домашняя директория пользователя содержит в названии ".", то
пользователь подвергается ограничениям chroot.
Пример:
user_a:x:2002:100:User A:/home/user_a:/bin/bash
user_b:x:2003:100:User B:/home/chroot/./home/user_b:/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
Группу мы уже скопировали, но если вы создали пользователя в другой группе, то
необходимо скопировать запись о группе в /home/chroot/etc/group:
grep /etc/group -e "^othergroup" >> /home/chroot/etc/group
Теперь можно попробовать залогиниться в SSH под testuser. если все прошло
правильно, то дальше /home/chroot выйти не получится.
Ссылки:
- Chroot патч для SSH:
http://chrootssh.sourceforge.net/index.php - OpenSSH:
http://www.openssh.org - CHROOT или сведи админа с ума:
http://www.xakep.ru/post/22203/default.asp