- Настройка анонимного доступа к серверу Ubuntu 16.04 с помощью vsftp
- Требования
- 1: Установка vsftp
- 2: Настройка брандмауэра
- 3: Подготовка места для файлов
- 4: Настройка анонимного доступа
- 5: Тестирование анонимного доступа
- 6: Авторизованное подключение
- Заключение
- How to Configure vsftpd an Anonymous FTP Server
- Anonymous FTP Server?
- Fixing Common Errors
- Creating FTP Server Directories
- Full Working Configuration File
- More Configuration Options
- Connect!
Настройка анонимного доступа к серверу 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 поддерживает только анонимные загрузки. Это обеспечивает производительную работу приложений, которые не могут использовать более современные протоколы.
How to Configure vsftpd an Anonymous FTP Server
This article will show you how to configure vsftpd as an anonymous FTP server which does not require authentication.
vsftpd is an FTP file server which can run on Linux.
FTP is is the file transfer protocol. It’s been around forever (since the 1970’s!), so it works with just about everything.
I run vsftp on an openwrt router as a quick and dirty file sharing solution that will work with even the oldest of my devices (including Windows 3.1 and old Macintosh computers).
The software for these old machines is often picky about connecting to modern FTP servers, and doesn’t support many of the features of modern servers. A simple vsftp server without authentication allows me to transfer files and software to these old machines with ease.
Anonymous FTP Server?
An anonymous FTP server simply means no username or password is required to log in, all files are public read/writable.
Because of this, anyone with access can log in and modify files.
Due to this, make sure your server is only accessible from your local network only!
Additionally, this configuration is for unencrypted FTP, so again, it’s not for use on the internet.
Fixing Common Errors
The configuration provided below fixes these two common errors when creating anonymous ftp shares with vsftpd:
500 OOPS: cannot change directory:/home/ftp 500 OOPS: refusing to run with writable root inside chroot()
Creating FTP Server Directories
vsftpd will need two directories to host the ftp server.
The first is the root directory. It cannot be publicly writable.
The second is a subdirectory of the root directory – it must be publicly writable so your anonymous users have somewhere they can upload files to.
Create and set the permissions for these two directories by issueing the following commands, replacing /mnt/sda1/ftp with the path to the location you wish to share via FTP:
mkdir /mnt/sda1/ftp mkdir /mnt/sda1/ftp/uploads chmod 775 /mnt/sda1/ftp chmod 777 uploads
Full Working Configuration File
Next, edit the vsftpd configuration file located at:
Below, is the full configuration which you can copy and paste into your own file. The comments explain what’s going on.
# Default Options # Run vsftpd in the background background=YES # Listen for incoming connections listen=YES # Allow writing files write_enable=YES # File creation mask for local users - not used, but part of the default config, so I've left it in local_umask=022 # Do not check for a valid user shell check_shell=NO # Do not maintain session logins session_support=NO # Anonymous FTP server specific stuff # Enable anonymous logins anonymous_enable=YES # Disable local user logins - they won't be used local_enable=NO # Set the root path for the FTP server files # This must NOT be publicly writable - ensure it's set with chmod permissions 775 at least anon_root=/mnt/sda1/ftp # Allow anonymous users to create directories anon_mkdir_write_enable=YES # Allow anoynmous users to upload files anon_upload_enable=YES # Allow anonymous users to rename and delete files anon_other_write_enable=YES # Do not ask for password for anonymous user no_anon_password=YES # Hide user/group info in directory listings hide_ids=YES # The name of the anonymous FTP user - this fixes the 'cannot change directory' error ftp_username=nobody # Make newly uploaded files read/writable anon_umask=000
More Configuration Options
For more configuration options, you can view the full user manual for configuring vsftpd at:
Connect!
Reboot your system to ensure the configuration is completely applied, and then you will be able to connect using any FTP client.