Настройка анонимного доступа к серверу Ubuntu 16.04 с помощью vsftp
FTP (File Transfer Protocol) – это сетевой протокол для обмена файлами между сервером и клиентом. Поскольку FTP передаёт данные в незашифрованном виде, он считается крайне опасным; вместо него рекомендуется использовать vsftp – версию протокола, которая поддерживает шифрование данных.
Многие пользователи сети Интернет предпочитают загружать данные с помощью браузера с помощью https; пользователи, имеющие навыки работы с командной строкой, обычно используют безопасные протоколы вроде scp или sFTP.
FTP часто используется для поддержки приложений и рабочих процессов со специфическими потребностями. Если ваше приложение позволяет вам выбирать протокол, выберите более современное решение, например, vsftp. Оптимизированный и высокопроизводительный протокол vsftp обеспечивает надежную защиту от уязвимостей, обнаруженных в других версиях FTP. Кроме того, он является протоколом по умолчанию для многих дистрибутивов Linux.
Данное руководство поможет установить и настроить vsftp для поддержки анонимных загрузок с сайта, предназначенного для широкого распространения публичных файлов.
Примечание: Вместо FTP для управления файлами рекомендуется использовать scp, sFTP или любой другой защищенный протокол.
Требования
- Сервер Ubuntu 16.04 (о начальной настройке сервера можно узнать здесь).
- Пользователь с правами sudo.
1: Установка vsftp
Обновите индекс пакетов и установите демон vsftp:
sudo apt update
sudo apt install vsftpd
После завершения установки создайте копию конфигурационного файла (так в случае ошибки вы сможете вернуться к оригинальному файлу):
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
2: Настройка брандмауэра
Для начала проверьте состояние брандмауэра и узнайте, какие сервисы он поддерживает на данный момент.
sudo ufw status
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Примечание: Вывод команды может отличаться.
Как видите, в данном случае брандмауэр не блокирует только трафик ssh. Значит, нужно разблокировать трафик FTP.
Брандмауэр ufw поддерживает список приложений, которые можно разблокировать по имени; список доступен по команде:
Однако FTP не входит в этот список.
Кроме того, ufw проверяет файл /etc/services, чтобы узнать порт и протокол сервисов. В этот файл нужно добавить данные FTP. Откройте порт 20 для ftp-data и порт 21 для команд ftp.
sudo ufw allow ftp-data
sudo ufw allow ftp
sudo ufw status
Проверьте состояние брандмауэра. Теперь правила выглядят так:
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
21/tcp ALLOW Anywhere
20/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
21/tcp (v6)ALLOW Anywhere (v6)
20/tcp (v6)ALLOW Anywhere (v6)
3: Подготовка места для файлов
Создайте каталог для хранения загруженных файлов. Флаг -p создаст все несуществующие вышележащие каталоги. Структура каталогов FTP позволяет систематизировать файлы; позже вы сможете расширить её, добавив каталоги для зарегистрированных пользователей.
Установите на каталог права nobody:nogroup. Позже нужно будет передать все права на файлы пользователю и группе ftp.
sudo chown nobody:nogroup /var/ftp/pub
Создайте в каталоге тестовый файл:
echo «vsftp test file» | sudo tee /var/ftp/pub/test.txt
Теперь можно протестировать работу vsftp.
4: Настройка анонимного доступа
В конфигурационном файле хранятся опции vsftp. Некоторые из них нужно отредактировать.
Найдите в файле следующие строки и отредактируйте их, как показано ниже:
. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable= YES
#
We’ll set the local_enable setting to “NO” because we’re not going to allow users with local accounts to upload files via FTP. The comment in the configuration file can be a little confusing, too, because the line is uncommented by default.
# Uncomment this to allow local users to log in.
local_enable= NO
. . .
Кроме того, нужно добавить в файл новые параметры.
Примечание: Полный список опций можно найти с помощью команды:
Добавьте в конфигурационный файл следующие параметры. Файл не имеет чёткой структуры, потому неважно, в какой части файла будут находиться новые опции.
#
# Point users at the directory we created earlier.
anon_root=/var/ftp/
#
# Stop prompting for a password on the command line.
no_anon_password=YES
#
# Show the user and group as ftp:ftp, regardless of the owner.
hide_ids=YES
#
# Limit the range of ports that can be used for passive FTP
pasv_min_port=40000
pasv_max_port=50000
Примечание: Если вы используете Iptables вместо UFW, разблокируйте все необходимые порты между pasv_min_port и pasv_max_port самостоятельно.
Сохраните и закройте файл.
sudo systemctl restart vsftpd
Команда systemctl не отображает вывод некоторых команд. Чтобы убедиться, что всё прошло успешно, введите:
sudo systemctl status vsftpd
Aug 17 17:49:10 vsftp systemd[1]: Starting vsftpd FTP server.
Aug 17 17:49:10 vsftp systemd[1]: Started vsftpd FTP server.
5: Тестирование анонимного доступа
Откройте в браузере такую ссылку:
Если всё работает должным образом, вы увидите каталог pub:
Index of /
Name Size Date Modified
Pub/ 8/24/16, 7:58:00 PM
Теперь можете открыть каталог pub. В нем должен находиться файл test.txt. щёлкните правой кнопкой и сохраните файл.
Index of /pub/
Name Size Date Modified
[parent directory] test.txt 16 B 8/24/16, 7:58:00 PM
Также вы можете выполнить эти операции с помощью командной строки. Подключитесь к серверу в пассивном режиме (на многих клиентах в командной строке для этого используется флаг –p). Пассивный режим позволяет создать подключение между сервером и клиентом, и при этом избежать изменения правил локального брандмауэра.
Примечание: Встроенный FTP-клиент командной строки Windows, ftp.exe, не поддерживает пассивного режима. Потому, пользователям Windows рекомендуется выбрать другой FTP клиент, например WinSCP.
Команда предложит указать имя пользователя. Вы можете ввести ftp или anonymous – они работают одинаково.
Connected to 203.0.113.0.
220 (vsftpd 3.0.3)
Name (203.0.113.0:21:8host): ftp
Нажмите enter. На экране появится:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Убедитесь, что пассивный режим работает должным образом:
ls
227 Entering Passive Mode (45,55,187,171,156,74).
150 Here comes the directory listing.
drwxr-xr-x 2 ftp ftp 4096 Aug 17 19:30 pub
226 Directory send OK.
Теперь вы как анонимный пользователь можете переместить файл на локальную машину:
cd pub
get test.txt
ftp> get test.txt
227 Entering Passive Mode (45,55,187,171,156,73).
150 Opening BINARY mode data connection for test.txt (14 bytes).
226 Transfer complete.
16 bytes received in 0.0121 seconds (1325 bytes/s)
Такой вывод значит, что файл был успешно загружен.
Теперь нужно убедиться, что анонимные пользователи не могут выгружать свои файлы на сервер. Переименуйте только что загруженный файл и попробуйте выгрузить его.
put test.txt upload.txt
227 Entering Passive Mode (104,236,10,192,168,254).
550 Permission denied.
Как видите, анонимные пользователи могут только скачивать файлы с сервера на свою локальную машину.
6: Авторизованное подключение
Теперь нужно убедиться, что пользователи, у которых есть локальные аккаунты, не могут подключаться к серверу, поскольку их учётные данные не будут шифроваться. Когда команда запросит имя пользователя, вместо ftp или anonymous укажите имя пользователя с правами sudo.
ftp -p 203.0.113.0
Connected to 203.0.113.0:21.
220 (vsFTPd 3.0.3)
Name (203.0.113.0:21:your_user)
530 This FTP server is anonymous only.
ftp: Login failed.
ftp>
Заключение
Теперь vsftp поддерживает только анонимные загрузки. Это обеспечивает производительную работу приложений, которые не могут использовать более современные протоколы.