Skip to content

1 Май 2013

3

Ubuntu SSH: Изолированный SFTP доступ

sftp-jail

В одну из приятных особенностей SSH входит возможность как угодно ограничивать аккаунт и создавать изолированные файловые пространства с помощью chroot, что бывает незаменимо полезно во многих ситуациях. Например, таким способом можно дать доступ веб мастеру к сайту.

:!:  Зачем оно нам?

Предлагаю еще раз определиться для чего мы это делаем. Очень часто нам нужно дать человеку возможность загрузить или скачать что-то с сервера. Такую возможность можно дать с помощью веб сервера, с помощью ftp, а можно с помощью стандартного SSH…и на мой взгляд, этот способ легче и удобнее всех остальных.

 

:!:  Что такое chroot?

Основной смысл заключается в возможности SSH сделать chroot на аккаунт пользователя. chroot создает изолированное файловое пространство, фактически новую систему. Что интересно, для полноценной работы в таком изолированном пространстве понадобится скопировать часть системных файлов из основной системы. Каталоги /bin, /etc и прочее. Иначе просто ничего не будет работать. Поэтому для SSH доступа полноценный chroot делать трудоемко и к этому редко прибегают. Но в случае SFTP доступа — нам НЕ нужен полноценный шел! Нам вообще не нужен шел  :eek:

 

:!:  Поехали:

  1. Если еще не создан, создаем пользователя, для которого делаем доступ. Его home каталог должен быть папкой, в которую мы хотим дать доступ.
    useradd -d/opt/www/site.ru -s/bin/bash webmaster
  2. Настраиваем SSH, открываем /etc/ssh/sshd_config и добавляем в конец (обязательно после строчки Subsystem sftp …)

    Match user webmaster, webmaster2
        X11Forwarding no
        AllowTcpForwarding no
        AllowAgentForwarding no
        PermitTunnel no
        ForceCommand internal-sftp
        ChrootDirectory %h
  3. Можно сделать настройки для группы (Match group)
  4. /etc/init.d/ssh restart

 

:?:  ВНИМАНИЕ! Каталог, в которые даете доступ, он же ChrootDirectory, он же home dir, должен быть ОБЯЗАТЕЛЬНО с владельцем root и без прав на запись у других пользователей/групп!