Настройка анонимного доступа к серверу 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 поддерживает список приложений, которые можно разблокировать по имени; список доступен по команде:

sudo ufw app list

Однако 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 позволяет систематизировать файлы; позже вы сможете расширить её, добавив каталоги для зарегистрированных пользователей.

sudo mkdir -p /var/ftp/pub

Установите на каталог права nobody:nogroup. Позже нужно будет передать все права на файлы пользователю и группе ftp.

sudo chown nobody:nogroup /var/ftp/pub

Создайте в каталоге тестовый файл:

echo "vsftp test file" | sudo tee /var/ftp/pub/test.txt

Теперь можно протестировать работу vsftp.

4: Настройка анонимного доступа

В конфигурационном файле хранятся опции vsftp. Некоторые из них нужно отредактировать.

sudo nano /etc/vsftpd.conf

Найдите в файле следующие строки и отредактируйте их, как показано ниже:

. . .
# 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
. . .

Кроме того, нужно добавить в файл новые параметры.

Примечание: Полный список опций можно найти с помощью команды:

man vsftpd.conf

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

#
# 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: Тестирование анонимного доступа

Откройте в браузере такую ссылку:

ftp://203.0.113.0

Если всё работает должным образом, вы увидите каталог 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 -p 203.0.113.0

Команда предложит указать имя пользователя. Вы можете ввести 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 поддерживает только анонимные загрузки. Это обеспечивает производительную работу приложений, которые не могут использовать более современные протоколы.

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

Tags: , , ,

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