Как установить безопасный SFTP сервер в Linux

SFTP служба обеспечивает безопасный механизм доступа и передачи файлов через туннель SSH. Если вы настраиваете SFTP сервер, доступ к которому будут иметь множество пользователей, то вам нужно настроить защиту не только от внешних угроз для защиты пользователей SFTP, но и для защиты от угроз от легитимных, но (потенциально) злонамеренных пользователей. Это достигается изолированием окружения индивидуальных пользователей SFTP.

В этой инструкции я покажу, как настроить безопасный SFTP сервер на Linux. Это будет достигнуто защитой SFTP сервера от SFTP пользователей и изолированием индивидуальных SFTP пользователей друг от друга. Эту цель можно достичь множеством способов, но я опишу как это сделать способом, основанном на применении MySecureShell.

MySecureShell — это SFTP сервер, основанный на OpenSSH, особенностью его является ряд функций безопасности:

  • Ограничение на ширину канала загрузки/выгрузки для каждого соединения
  • Ограничение на количество одновременных соединений на один аккаунт
  • Сокрытие владельца/группы/прав файла и каталога
  • Сокрытие файлов и каталогов, к которым пользователь не имеет доступа
  • Ограничение на время жизни соединения
  • Chroot для SFTP пользователей в его/её каталоге
  • Отклоняются выгрузки файлов или каталогов, которые соответствуют заданным регулярным выражениям

Установка MySecureShell на Linux

Для большинства популярных дистрибутивов MySecureShell распространяется в виде скомпилированных бинарных файлов. Но не для всех они включены в официальные репозитории.

Для пользователей свежей версии Debian всё просто — ставим из официального репозитория.

Debian 8 (Jessie)

apt-get update
apt-get install mysecureshell

Чтобы включить все функции, нужно установить уидный бит (setuid) для бинарного файла mysecureshell.

chmod 4755 /usr/bin/mysecureshell

В других дистрибутивах мы добавляем новый источник приложений.

Debian 7 (Wheezy)

echo "deb http://mysecureshell.free.fr/repository/index.php/debian/7.1 testing main
deb-src http://mysecureshell.free.fr/repository/index.php/debian/7.1 testing main" >> /etc/apt/sources

Импортируем ключи репозитория GPG:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys E328F22B
gpg --export E328F22B | apt-key add -

Ну и устанавливаем

apt-get update
apt-get install mysecureshell

CentOS/RedHat

CentOS 6

echo "[mysecureshell]
name=MySecureShell
baseurl=http://mysecureshell.free.fr/repository/index.php/centos/6.4/
enabled=1
gpgcheck=0" > /etc/yum.repos.d/mysecureshell.repo

yum install mysecureshell

CentOS 5

echo "[mysecureshell]
name=MySecureShell
baseurl=http://mysecureshell.free.fr/repository/index.php/centos/5.5/
enabled=1
gpgcheck=0" > /etc/yum.repos.d/mysecureshell.repo

yum install mysecureshell

Fedora

echo "[mysecureshell]
name=MySecureShell
baseurl=http://mysecureshell.free.fr/repository/index.php/fedora/19/
enabled=1
gpgcheck=0" > /etc/yum.repos.d/mysecureshell.repo

yum install mysecureshell

Ubuntu

Начать нужно с импорта ключей репозитория GPG:

apt-key adv --keyserver pool.sks-keyservers.net --recv-keys E328F22B

Затем добавляем строки репозитория MySecureShell:

add-apt-repository 'deb http://mysecureshell.free.fr/repository/index.php/ubuntu/12.04 testing main'

Всё готово для установки MySecureShell:

apt-get update
apt-get install mysecureshell

Установка MySecureShell из бинарных файлов

Установка необходимых зависимостей

Установка зависимостей на Ubuntu или Debian:

$ sudo apt-get install libssl0.9.8 ssh openssh-server gcc make

Установка зависимостей на CentOS, RHEL или Fedora:

$ sudo yum install openssl-devel openssh-server gcc make
$ git clone https://github.com/mysecureshell/mysecureshell
$ cd mysecureshell

$ ./configure --with-logcolor=yes

Если всё прошло хорошо, то должно быть что-то вроде этого:

MySecureShell has been configured with the following options:
Log file: /var/log/sftp-server.log (color: yes)
User binaries: /usr/bin
Shutdown file: /etc/sftp.shut
Configuration file: /etc/ssh/sftp_config
Supported:
Remote Admin : yes
UTF-8 Encoding : yes

Можно запускать компиляцию:

$ make all

И, наконец, устанавливаем (с правами root):

> make install

Настройка MySecureShell

После установки, проверяем, где наш MySecureShell установлен.

whereis mysecureshell
/usr/bin/mysecureshell

Чтобы управлять пользователями SFTP с MySecureShell, сначала создайте группу Linux, к которой будут принадлежать все пользователи SFTP. Давайте назовём эту группу «sftp».

Следующие команды нужно выполнять от суперпользователя. В зависимости от вашей системы, вы можете делать это через sudo или su —

groupadd sftp

Затем сконфигурируйте существующих пользователей SFTP (например mial) так, чтобы они принадлежали группе «sftp» и использовали MySecureShell шелл во время входа.

usermod -s /usr/bin/mysecureshell -g sftp mial

Если вы создаёте нового SFTP «с нуля», то тогда команда должна выглядеть так.

useradd -m -s /usr/bin/mysecureshell -g sftp alice

Для изменения дефолтных настроек MySecureShell, отредактируйте его конфигурационный файл, размещённый в /etc/ssh/sftp_config. В конфигурационном файле вы можете определить различные групповые настройки безопасности. Например, для группы Linux «sftp»:

vim /etc/ssh/sftp_config
<Group sftp>
        Download                50k     # лимит скорости загрузки для всех соединений
        Upload                  0       # неограниченная скорость аплоада для всех соединений
        StayAtHome              true    # ограничить пользователя его/её домашним каталогом
        VirtualChroot           true    # фальшивый chroot для домашнего аккаунта
        LimitConnectionByUser   1       # максимальное число соединений на одну учётную запись
        LimitConnectionByIP     1       # максимальное количество соединений на один IP для каждой учётной записи
        IdleTimeOut             300     # отсоединить пользователя при слишком долгой неактивности (в секундах)
        HideNoAccess            true    # спрятать файл/каталог к которым пользователь  не имеет доступа
</Group>

Когда конфигурация завершена, убедитесь, что перезапустили sshd следующим образом.

Для перезапуска sshd на Ubuntu или Debian:

$ sudo service ssh restart

Для перезапуска на CentOS, RHEL или Fedora:

$ sudo service sshd restart

Доступ и управление SFTP сервером

На клиентской стороне, вы можете входить в SFTP сервер следующим образом. Пользователям устанавливается корневой каталог в его собственной домашней папке, и никакие другие директории на сервере не видны для пользователя.

$ sftp [email protected]
[email protected]'s password:
Connected to 192.168.1.37.
sftp> pwd
Remote working directory: /
sftp>

На серверной стороне SFTP вы можете управлять SFTP сервером и его пользователями следующим образом.

Для мониторинга пользователей SFTP, которые в данный момент подключены:

$ sftp-who
--- 1 / 10 clients ---

02

Чтобы принудительно отключить определённого пользователя SFTP:

$ sudo sftp-kill mial

3 комментария к “Как установить безопасный SFTP сервер в Linux”

  1. Спасибо за материал, наконец то нашел что надо.
    И верстка у вас в блоге ползет, у меня монитор 1280, страница по ширине чуть ли не в два раза больше получается, неудобно читать.
    В скриптах где то проблема, js отключаешь тогда нормально в ширину вписывается.

    Ответить
    • Здорово, что понравился сайт !
      С версткой все в порядке. После Вашего замечания все исправили. Наслаждайтесь 🙂

      Ответить
  2. Здравствуйте. Очень полезная статься. Единственное что хотелось бы еще узнать это почему может не работать секция virtualhost и параметр CreateHome??

    Home /home
    CreateHome false

    Home /home/en.mysite.com

    Т.е. папки создаются при добавлении нового пользователя (в принципе не страшно, но все же)
    и почему-то при подключении к en.mysite.com юзер все равно попадает в папку /home

    Ответить

Оставьте комментарий