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

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

@webware

t.me/webware

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/deimosfr/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 mial@192.168.1.37

mial@192.168.1.37's password:

Connected to 192.168.1.37.

sftp> pwd

Remote working directory: /

sftp>


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

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

$ sftp-who

--- 1 / 10 clients ---

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

$ sudo sftp-kill mial

Источник codeby.net

Report Page