Под защитой песочного демона Евгений Зобнин ака j1m Хакер, номер #093, стр. 093-118-4 2 В каталог /bin корневой машины ложится файл ssh-shell, примерно такого содержания: # vi /bin/ssh-shell !#/bin/sh /usr/bin/sudo /usr/bin/chroot /usr/chroot/ssh /bin/su - $USER "$@" 3 В файл /etc/sudoers корневой машины добавляется запись следующего вида: # visudo user ALL=NOPASSWD: /usr/bin/chroot, /bin/su - user 4 Также в корневую машину добавляется юзер с домашним каталогом /usr/chroot/ssh/home/user и группой sshuser, причем в качестве шелла ему назначается /bin/ssh-shell. 5 В файл /etc/passwd chroot-окружения добавляются пользователи root и user, а в файл /etc/group группа root и sshusers. В результате вырисовывается очень интересная картина. После регистрации пользователь, у которого в качестве шелла указан /bin/ssh-shell, сам того не подозревая, выполняет прописанные в этом файле команды и попадает в chroot-окружение, а все остальные могут ходить по корню. Такой вот пример костыльно-велосипедного подхода, демонстрация "пути линуксойда" во всей красе. Лучше уж патчить OpenSSH. Хотя нет, погодите, ведь главная задача ssh, помимо шифрования трафика, авторизация пользователей. А эта процедура в последние годы неразрывно связана с технологией PAM. Может быть мы сможем использовать ее возможности в наших целях? PAM-модуль с нужной нам функциональностью действительно существует и входит в поставку многих дистрибутивов. Называется он pam_chroot, а принцип его работы прост, как сапог - он делает chroot для всех пользователей, прописанных в конфиге. Кроме того, способ, основанный на использовании этого модуля, является наименее трудозатратным из всех ранее изложенных. Смотри сам: 1 Создаем "песочницу", используя скрипт ~/bin/mkchroot. 2 Создаем группу sshusers и заводим пользователей. 3 Выполняем две команды (вторая должна быть продублирована для каждого юзера): # echo "session required pam_chroot.so" >> /etc/pam.d/ssh # echo "user /usr/chroot/ssh" >> /etc/security/chroot.conf 4 Перезапускаем sshd. Правда есть один маленький нюанс. Системный вызов chroot может исполнять только root, поэтому sshd до самого логина пользователя должен работать с соответствующими правами. По умолчанию sshd время от времени понижает свои привилегии до пользователя sshd, но это можно исправить, добавив в конфиг строку "UsePrivilegeSeparation no". [огнеупорный ssh] Поместить ssh в chroot-окружение и обеспечить его бесперебойную работу - еще половина дела. Необходимо также правильно настроить брандмауэр и защитить все остальные сервисы от проникновения из вне. Ниже приведен фрагмент конфига iptables (eth1 - это внешний сетевой интерфейс). Настраиваем брандмауэр IT='/usr/sbin/iptables' # очищаем правила $IT -F $IT -P INPUT DROP $IT -P FORWARD DROP $IT -P OUTPUT DROP # пропускаем все пакеты наружу $IT -A OUTPUT -j ACCEPT # принимаем все пакеты с интерфейса обратной петли $IT -A INPUT -i lo -d 127.0.0.1 -p ALL -j ACCEPT # принимаем трафик установленных соединений $IT -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT |