FTP — протокол передачи файлов
FTP является стандартом Internet для передачи файлов. Необходимо различать передачу файлов, именно то, что предоставляет FTP, и доступ к файлам, что предоставляется такими приложениями как NFS (Network File System, глава 29). Передача файлов заключается в копировании целого файла из одной системы в другую. Чтобы использовать FTP, необходимо иметь учетную запись (бюджет) на сервере, или можно воспользоваться так называемым анонимным FTP (anonymous FTP).
RFC 959 [Postel and Reynolds 1985] является официальной спецификацией FTP. Этот RFC описывает историю и развитиие передачи файлов в течение времени.
Протокол FTP
FTP отличается от других приложений тем, что он использует два TCP соединения для передачи файла.
1.Управляющее соединение устанавливается как обычное соединение клиент-сервер. Сервер осуществляет пассивное открытие на заранее известный порт FTP (21) и ожидает запроса на соединение от клиента. Клиент осуществляет активное открытие на TCP порт 21, чтобы установить управляющее соединение. Управляющее соединение существует все время, пока клиент общается с сервером. Это соединение используется для передачи команд от клиента к серверу и для передачи откликов от сервера.
2.Соединение данных открывается каждый раз, когда осуществляется передача файла между клиентом и сервером. (Оно также открывается и в другие моменты, как мы увидим позже.) Тип сервиса IP для соединения данных должен быть «максимальная пропускная способность», так как это соединение используется для передачи файлов.

Из рисунка видно, что интерактивный пользователь обычно не видит команды и отклики, которые передаются по управляющему соединению. Эти детали оставлены двум интерпретаторам протокола. Квадратик, помеченный как «пользовательский интерфейс», это именно то, что видит интерактивный пользователь (полноэкранный интерфейс, основанный на меню, командные строки и так далее). Интерфейс конвертирует ввод пользователя в FTP
команды, которые отправляются по управляющему соединению. Отклики, возвращаемые сервером по управляющему соединению, конвертируются в формат, удобный для пользователя.
FTP-сервер поддерживает 2 режима передачи данных: ascii и binary, что определяется переданными ему командами.
Команды FTP
Команды и отклики передаются по управляющему соединению между клиентом и сервером в формате NVT ASCII. В конце каждой строки команды или отклика присутствует пара CR, LF.
Команды состоят из 3 или 4 байт, а именно из заглавных ASCII символов, некоторые с необязательными аргументами.
help — получить список команд поддерживаемых ftp-сервером
ls или dir — список файлов или директорий
pwd — показать текущую директорию
cd — перейти к указанной директории
mkdir — создать директорию
rmdir — удалить директорию, если она не пустая
[m]get — получить файл[ы] с сервера
[m]put — отправить файл[ы] на сервер
TYPE {binary | ascii} — указать режим передачи данных
quit или exit — завершить работу с сервером
Установка FTP сервера (ProFTPd и OpenSSL)
sudo apt install proftpd
sudo apt install openssl
Из соображений безопасности вам необходимо добавить эти строки в /etc/proftpd/proftpd.conf
DefaultRoot ~ делает корнем домашнюю директорию
IdentLookups off
ServerIdent on "FTP Server ready."
Создаем SSL сертификат для TLS
TLS (англ. Transport Layer Security) — криптографический протокол, обеспечивающий защищённую передачу данных между узлами в сети Интернет. TLS-протокол основан на Netscape SSL-протоколе версии 3.0. Различие между SSL 3.0 и TLS 1.0 незначительные, поэтому далее в тексте термин «SSL» будет относиться к ним обоим.
TLS предоставляет возможности аутентификации и безопасной передачи данных через Интернет с использованием криптографических средств.
Часто происходит лишь аутентификация сервера, в то время как клиент остается неаутентифицированным.
Для взаимной аутентификации каждая из сторон должна поддерживать инфраструктуру открытого ключа (PKI), которая позволяет защитить клиент-серверные приложения от перехвата сообщений, редактирования существующих сообщений и создания поддельных.
SSL включает в себя три основных фазы:
- Диалог между сторонами, целью которого является выбор алгоритма шифрования
- •Обмен ключами на основе криптосистем с открытым ключом или аутентификация на основе сертификатов.
- •Передача данных, шифруемых при помощи симметричных алгоритмов шифрования
Для использования TLS нам необходимо создать SSL сертификат в каталоге /etc/proftpd/ssl/
создаем каталог где будем хранить сертификаты
mkdir /etc/proftpd/ssl
Генерируем SSL сертификат
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
Вводим вашу регистрационную информацию
Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [SomeState]: Moscow
Locality Name (eg, city) []: Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]: CLASS
Organizational Unit Name (eg, section) []: IT
Common Name (eg, YOUR name) []: rantivi.ru
Email Address []: root@localhost
Включаем TLS в ProFTPd
Для того, чтобы включить TLS для ProFTPd необходимо открыть файл конфигурации /etc/proftpd/proftpd.conf
nano /etc/proftpd/proftpd.conf
И раскомментировать строку
#
This is used for FTPS connections
#
Include /etc/proftpd/tls.conf
Теперь откройте /etc/proftpd/tls.conf
И отредактируйте его таким образом
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
Если у вас TLSRequired on, тогда только пользователи с включенным TLS получат доступ к вашему FTP серверу (могут возникнуть проблемы у пользователей использующих старые FTP клиенты не поддерживающие TLS). Для того чтобы все пользователи могли соединиться с FTP закомментируйте строку TLSRequired on, либо измените значение на Off
Перезапускаем ваш ProFTPd
sudo systemctl restart proftpd
Теперь вы можете попробовать подключиться с использованием ftp-ssl клиента, или любого другого (если у вас TLSRequired off)
ftp-ssl user@host
В случае возникновения проблем с TLS смотрите логи /var/log/proftpd/tls.log
Добавить комментарий