Будем отталкиваться от того, что имеется в наличии настроеный FTP-сервер на базе proftpd. Возникает вопрос, нужна ли поддержка этим сервером протокола SFTP...
Что такое SFTP, и "с чем его едят"
В протоколе FTP есть 2 ключевые проблемы:
- пароли и данные передаются в открытом виде
- для каждой передачи устанавливается дополнительное соединение.
Для шифрования данных и контрольного соединения был написан FTPS [1], но с ним проблем еще больше - все также требуется дополнительное соединение при передаче, а главное - контрольный канал теперь зашифрован и firewall никак не может помочь в прохождении FTP трафика через NAT. Кроме того - существуют различия в реализации, что добавляет еще больше проблем при
использовании FTPS.
SFTP [2] - полностью новый протокол разработанный IETF SECSH, предлагающий аналогичные FTP возможности для удаленных операций и использующий SSH (обычно SSH2) для обеспечения шифрования и аутентификации. Известность получил в основном из-за того, что был встроен в SSH сервера, в частности - в OpenSSH 2.3.0 и выше.
Недостатки при работе с SFTP в OpenSSH
До OpenSSH 4.9 sftp сервер требовал запуска внешнего исполняемого файла и построение chroot окружения было связанно с дополнительными действиями. Невозможно ограничить скорость передачи для конкретного пользователя. Сложно сделать отличную от SSH базу с пользователями. В целом - sftp сервер в OpenSSH всегда был лишь приятным дополнением к OpenSSH предоставляя на порядок меньшие возможности чем, например, proftpd. Впрочем, недавно необходимость выбора между удобством и безопасностью отпала так как был написан и реализован модуль mod_sftp для proftpd, о нем и пойдет речь.
Proftpd и mod_sftp
Впервые модуль появился в версии 1.3.2rc2. Он не компилируется по умолчанию, так что для его использования надо указать его на этапе configure. Если Proftpd уже работает, проверить, поддерживается ли mod_sftp можно следующим образом:
# cat /var/db/ports/proftpd/options | grep SFTP WITH_SFTP=true WITH_SFTP_SQL=true WITHOUT_SFTP_PAM=true |
В моем случае Proftpd собран с поддержкой mod_sftp.
Модуль имеет множество возможностей полный список которых можно посмотреть здесь [3].
Для минимальной настройки достаточно внести такие дополнения в файл /usr/local/etc/proftpd.conf:
<IfModule mod_tls.c> Port 2222 SFTPEngine on SFTPHostKey /etc/ssh/ssh_host_dsa_key SFTPHostKey /etc/ssh/ssh_host_rsa_key </IfModule> |
После внесения изменений в конфигурационный файл, перезапускаем Proftpd. Теперь можно подключиться к 2222 любым sftp-клиентом (например FileZilla [4], или WinSCP [5]).