Chroot-окружение SSH/SFTP в Debian Lenny

С версии 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 такие программы как /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 написал 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

Оригинал: http://howtoforge.org/chrooted-ssh-sftp-tutorial-debian-lenny

Система Orphus

 


 

Comments: 11

  1. GiNeR March 20th, 2009 at 3:22 pm

    Это хорошая новость.

  2. Валентинов March 22nd, 2009 at 10:56 pm

    <<Разница в том, что мы не добавляем строку ForceCommand /usr/lib/openssh/sftp-server в выражение Match
    Ого как все оказывается просто :) Спасиб большое!

  3. 4Rino May 6th, 2009 at 10:35 am

    Проделал все до слов:
    Теперь вы можете зайти на сервер при помощи SFTP-клиента и работать в chroot-окружении.

    При коннекте юзера которому указоно окружене chroot ошибка:
    debian sshd[2723]: fatal: bad ownership or modes for chroot directory "/home/kom1"

    Под тем у кого не указано все норм.
    Как исправить?

  4. boombick May 6th, 2009 at 10:37 am

    translate.google.com

  5. semlanik August 28th, 2009 at 10:22 am

    debian sshd[2723]: fatal: bad ownership or modes for chroot directory аналогично. не понятно на какую директорию у пользователя нет прав это A
    не понятно какие права назначать на какие директории это B.
    И C почему chroot делается на home а не на /home/username

  6. Сергей November 12th, 2009 at 2:01 pm

    Сделал chroot, заработал как по ssh так и по sftp, но вот одновременно для одного пользователя не работает. Если делаю так
    Match group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    то работает sftp только, а если так
    Match group sftponly
    ChrootDirectory %h
    AllowTcpForwarding no
    X11Forwarding no
    то ssh а по sftp не заходит.
    Народ помогите разобраться как сделать чтоб то и то работало, а то два логина не хочится заводить.

  7. Rett Pop November 20th, 2009 at 11:34 am

    Настроил по этому мануалу. Правда, не в дебиане, а в слаке. Теперь вопрос как добавить русскую локаль? Русского там нет совсем. Не подскажешь?

  8. boombick November 20th, 2009 at 11:52 am

    Русскую локаль куда?

  9. PeoneEr December 3rd, 2009 at 3:47 pm

    Copying necessary library-files to jail (may take some time)
    mv: после `.bak’ пропущен операнд, задающий целевой файл
    Попробуйте `mv –help’ для получения более подробного описания.
    mv: после `.bak’ пропущен операнд, задающий целевой файл
    Попробуйте `mv –help’ для получения более подробного описания.
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    /usr/local/sbin/make_chroot_jail.sh: 428: cannot create : Directory nonexistent
    На этом все останавливается. Что не так?
    Система убунту 9.10

  10. boombick December 3rd, 2009 at 9:10 pm

    Убунту это все-таки не дебиан :) А вообще надо смотреть скрипт

  11. Emerald December 5th, 2009 at 3:10 am

    чтобы одновренно работало и SFTP и SSH в chroote надо Субстистем заменить на
    Subsystem sftp internal-sftp

    чем отличаеться от /usr/lib/openssh/sftp-server или /usr/local/libexec/sftp-server я незнаю(возможно камне преткновения служит патч который уже включен в последние версии но на взаимодествие с sftp-server не распространяеться), но это работает.

Add a Comment