Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>root ssh chroot openssh sftp сhroot}} ====== Chroot-окружение SSH/SFTP ====== С версии 4.8 OpenSSH нативно поддерживает установку chroot-окружения и для этого больше не нужны патчи. Эта статья описывает настройку chroot-окружения для ваших пользователей при использовании SSH/SFTP. Пользователь будет “заперт” в своем каталоге без возможности доступа к основной системе ===== Предисловие ===== Описывается настройка chroot-окружения для OpenSSH версии 4.8 для Debian Lenny Для примера я буду использовать пользователя boombick с домашней директорией /home/boombick. Пользователь boombick входит в группу users. Chroot-окружение будет ограничено директорией /home Установка OpenSSH Если OpenSSH-сервер еще не установлен в вашей системе, то установите его командой # aptitude install ssh openssh-server ===== Настройка SFTP ===== Включить SFTP-доступ очень просто. Отредактируйте файл /etc/ssh/sshd_config следующим образом: # vim /etc/ssh/sshd_config [...] Subsystem sftp /usr/lib/openssh/sftp-server [...] и добавьте в конец файла следующие строки (для каждого пользователя, которого вы хотите поместить в chroot): [...] Match User boombick ChrootDirectory /home AllowTCPForwarding no X11Forwarding no ForceCommand /usr/lib/openssh/sftp-server … либо для группы пользователей: [...] Match Group users ChrootDirectory /home AllowTCPForwarding no X11Forwarding no ForceCommand /usr/lib/openssh/sftp-server Последний вариант поместит всех пользователей, входящих в группу users, в chroot Перезапустите ssh-сервер # /etc/init.d/ssh restart Если вы настраиваете chroot для нескольких пользователей в одну директорию (/home в нашем примере) и не хотите, чтобы они просматривали личные директории друг друга, то не забудьте присвоить верные права для директорий: chmod 700 /home/boombick Теперь вы можете зайти на сервер при помощи SFTP-клиента и работать в chroot-окружении. SSH в chroot-окружении ===== Настройка chroot для SSH ===== Настройка chroot для SSH более трудоемка из-за того, что необходимо настроить еще и программное окружение, то есть поместить в chroot такие программы как /bin/bash, /bin/cp и т. д. Это значит, что мы должны будем скопировать эти программы и библиотеки, которые они используют, в наше chroot-окружение. Вы можете сделать это вручную, с помощью команды cp, а **узнать список библиотек** вам поможет команда **ldd**: # ldd /bin/bash linux-gate.so.1 => (0xb7fbd000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7f75000) libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7f71000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7e0f000) /lib/ld-linux.so.2 (0xb7fbe000) Также надо создать системные устройства /dev/null, /dev/zero, /dev/tty и /dev/urandom. Это можно сделать командой **mknod** Но делать это вручную весьма утомительно :) Хорошо, что есть люди, которые помогли облегчить нам эту процедуру. **Wolfgang Fuschlberger** написал [[http://boombick.org/make_chroot_jail.sh|bash-скрипт]], который позволяет автоматизировать процесс создания chroot-окружения. Для начала установим некоторые необходимые пакеты: aptitutde install sudo debianutils coreutils Затем скачаем скрипт, пометим его в /usr/local/sbin сделаем его исполняемым chmod 700 /usr/local/sbin/make_chroot_jail.sh Но перед стартом добавим некоторые приложения, которые мы хотим сделать доступными для использования в chroot, например, vim vim /usr/local/sbin/make_chroot_jail.sh [...] elif [ "$DISTRO" = DEBIAN ]; then APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp /sbin/unix_chkpwd /usr/bin/vim" else [...] Затем создадим симлинк в /home, указывающий на сам /home cd /home ln -s . home Теперь можно запускать скрипт. Его запускают со следующими параметрами make_chroot_jail.sh username [/path/to/chroot-shell [/path/to/chroot]] chroot-shell – это специальная оболочка для пользователей в chroot, которую создает скрипт. Но OpenSSH поддерживает chroot нативно, поэтому мы будем использовать обычный /bin/bash или /bin/sh Не имеет значения, существует ли пользователь в системе или нет. Если пользователя нет, то он будет создан. Если есть – его данные будут обновлены. # make_chroot_jail.sh boombick /bin/bash /home Эта команда создаст/обновит данные пользователя boombick для его работы в chroot Для обновления всех файлов/библиотек в chroot выполните make_chroot_jail.sh update /bin/bash /home Теперь немного подредактируем конфиг (примерно так же, как мы делали для SFTP) vim /etc/ssh/sshd_config И добавим следующие строки для каждого пользователя в chroot [...] Match User boombick ChrootDirectory /home AllowTCPForwarding no X11Forwarding no Или для группы пользователей [...] Match Group users ChrootDirectory /home AllowTCPForwarding no X11Forwarding no Разница в том, что мы не добавляем строку ForceCommand /usr/lib/openssh/sftp-server в выражение Match Таким образом пользователи могут использовать не только chroot-SFTP (убедитесь, что в /etc/ssh/sshd_config есть строка Subsystem sftp /usr/lib/openssh/sftp-server) Не забудьте перезапустить ssh-сервер # /etc/init.d/ssh restartСохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal