Создание SFTP-сервера на базе proftpd

FTP (или File Transfer Protocol, протокол пересылки файлов) – это широко используемый способ обмена файлами между локальным и удаленным сервером. Несмотря на популярность FTP этот протокол использовать не рекомендуется, поскольку он не шифрует данные, а передает их в виде простого текста.

ProFTPd – это популярный FTP-сервер, который может использовать протокол SFTP (secure FTP), безопасную альтернативу FTP. Это руковдство продемонстрирует настройку ProFTPd для использования этого протокола.

Для выполнения данного руководства использовался сервер Ubuntu 12.04, но оно актуально для большинства дистрибутивов.

Установка ProFTPd

ProFTPd можно найти в стандартном репозитории Ubuntu. Для установки ProFTPd используйте:

sudo apt-get update && sudo apt-get install proftpd

В появившемся окне выберите Stand Alone.

После завершения установки нужно изменить основные конфигурационные переменные. Откройте конфигурационный файл ProFTPd с привилегиями root:

sudo nano /etc/proftpd/proftpd.conf

Измените значение параметра ServerName, указав свой домен или IP-адрес:

ServerName      "your_Domain_Or_IP"

Раскомментируйте параметр DefaultRoot (для этого удалите символ # вначале строки):

DefaultRoot     ~

Сохраните и закройте файл.

Настройка ProFTPd для использования SFTP

Теперь можно приступить к настройке сервиса для использования протокола SFTP.

Стандартный файл ищет дополнительные настройки в подкаталоге conf.d. Для того, чтобы использовать SFTP, создайте в этом подкаталоге новый файл:

sudo nano /etc/proftpd/conf.d/sftp.conf

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

Скопируйте и вставьте следующее в файл:

<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
SFTPLog /var/log/proftpd/sftp.log
# Configure both the RSA and DSA host keys, using the same host key
# files that OpenSSH uses.
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthMethods publickey
SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u
# Enable compression
SFTPCompression delayed
</IfModule>

Разбор конфигурации SFTP

Чтобы разобраться в конфигурациях данного файла, рассмотрим все его компоненты в отдельности.

Как видите, весь вышеприведенный блок кода взят в теги IfModule, что обеспечивает выполнение данных опций только в случае, если доступен SFTP-модуль.

  • SFTPEngine on: включает поддержку протокола SFTP.
  • Port 2222: указывает порт, который будет принимать соединения SFTP. Поскольку порт 22 уже занят SSH-соединениями, нужно задать другой порт.
  • SFTPLog: задает расположение лог-файла, который будет создан.
  • SFTPHostKey: эти две строки являются ключами хоста SSH. Таким образом сервер может устанавливать связь и  взаимодействовать с клиентами. В большинстве случаев строки, использованные в данном примере кода, подойдут.
  • SFTPAuthMethods: данная строка говорит серверу принимать только соединения, выполненные с помощью ключей SSH.
  • SFTPAuthorizedUserKeys: этот параметр задает расположение ключей SFTP, которые могут быть использованы для аутентификации. При этом часть % U заменяет имя входящего в систему пользователя.
  • SFTPCompression delayed: этот параметр устанавливает механизм сжатия файлов, который будет использоваться во время передачи файлов.

Настройка авторизации на основе ключей

ProFTPd может использовать SSH-ключи для авторизации пользователей, но для этого ключи нужно конвертировать в формат RFC4716. К счастью, программный набор SSH позволяет конвертировать эти файлы изначально.

Для начала создайте каталог для размещения этих файлов:

sudo mkdir /etc/proftpd/authorized_keys

Теперь нужно конвертировать открытые ключи, которые в данный момент используются для входа на сервер. Если на сервере есть только одна учетная запись пользователя, используйте команду:

sudo ssh-keygen -e -f ~username/.ssh/authorized_keys | sudo tee /etc/proftpd/authorized_keys/username

Если же на сервере существует несколько учетных записей и нужно разделить их учетные данные, используйте открытый ключ вместо файла authorized_keys:

sudo ssh-keygen -e -f /path/to/id_rsa.pub | sudo tee /etc/proftpd/authorized_keys/username_who_owns_key

Можно добавить необходимое количество  ключей.

Завершив настройку, перезапустите ProFTPd:

sudo service proftpd restart

Отключение доступа SFTP к порту SSH

Теперь, когда SFTP на базе ProFTPd настроен, можно закрыть ему доступ к порту SSH. Это предотвратит возможность пользователей управлять Proftpd, а также позволит им покидать свои домашние каталоги.

Откройте конфигурационный файл sshd:

sudo nano /etc/ssh/sshd_config

В нижней части файла найдите строку, которая выглядит примерно так:

Subsystem sftp /usr/lib/openssh/sftp-server

Закомментируйте ее (для этого установите символ #в начале строки):

# Subsystem sftp /usr/lib/openssh/sftp-server

Сохраните и закройте файл.

Затем перезапустите SSH-сервер, чтобы обновить настройки.

sudo service ssh restart

Подключение с клиента

Существует множество доступных клиентов FTP с поддержкой SFTP, которые можно использовать для подключения к серверу. Данный раздел покажет, как подключиться к серверу через клиент FileZilla, доступный на всех основных платформах.

Откройте соединения FileZilla (Connections в левом меню) и найдите SFTP.

Кликните на Add keyfile и перейдите к месту расположения закрытого ключа (как правило, это ~/.ssh/id_rsa).

Вероятно, появится сообщение о том, что FileZilla преобразует его в поддерживаемый формат; нажмите Ok.

В главном интерфейсе введите sftp://доменное_имя_или_IP в поле Host. Укажите имя пользователя в поле Username и номер порта в поле Port.затем нажмите Quickconnect, чтобы клиент FileZilla автоматически создал соединение при помощи ключей SSH.

Итоги

Теперь сервер может принимать SFTP-соединения, управляемые ProFTPd.

Tags: , , , , , , , , ,

Добавить комментарий