Установка сервера vsFTPd на Ubuntu с Nginx
Протокол передачи файлов FTP
это TCP
протокол для передачи файлов между компьютерами, работает на основе модели клиент-сервер. Серверный компонент постоянно слушает FTP
запросы от удаленных клиентов. При получении запроса он управляет входом и установкой соединения. На протяжении сессии он выполняет любые команды, переданные FTP
клиентом.
Одним из самых популярных FTP
серверов является vsftpd
— его легко устанавливать, настраивать и поддерживать. Доступ к FTP
серверу возможен в двух режимах:
- В анонимном режиме удаленный клиент может получить доступ к
FTP
серверу, используя учетную записьanonymous
илиFTP
и передав адресemail
в качестве пароля. Данные в директории/srv/ftp
доступны для всех анонимных пользователей. - В авторизованном режиме пользователь должен иметь учетное имя и пароль в системе. Доступ к каталогам и файлам зависит от прав доступа пользователя, указанного при входе. Обычный пользователь ограничен своей домашней директорией.
В зависимости от способа установления соединения для передачи данных различают активный и пассивный режимы работы FTP
:
- В активном режиме клиент устанавливает управляющее соединение на порт
21
сервера и передает специальную командуPORT
, в которой указывает свой адрес и порт для передачи данных. Получив данную команду, сервер устанавливает соединение с20
порта на указанный в команде порт клиента. - В пассивном режиме клиент устанавливает управляющее соединение на порт
21
сервера и передает специальную командуPASV
. В ответ сервер передает адрес и порт, на который следует устанавливать соединение для передачи данных. Получив эту информацию, клиент устанавливает подключение к серверу и начинает передачу данных.
Основной недостаток активного режима — клиенту требуется выделенный IP-адрес
. Также определенные сложности будут возникать при нахождении клиента за брандмауэром или NAT-ом
. В пассивном режиме все соединения инициирует клиент и поэтому к нему нет никаких требований. По этой причине на сегодняшний день основным режимом работы FTP
является пассивный в авторизованном режиме.
Установка vsFTPd
Обновляем список пакетов сервера:
sudo apt update
Обновляем пакеты сервера:
sudo apt upgrade
Устанавливаем сервер vsftp
:
sudo apt install vsftpd
Включаем сервер vsftp
:
sudo systemctl start vsftpd
Добавляем веб сервер vsftp
в автозагрузку::
sudo systemctl enable vsftpd
Проверка работоспособности сервера vsftpd
:
sudo systemctl status vsftpd
Управление сервером vsftpd
Отключаем сервер vsftp
:
sudo systemctl stop vsftpd
Перезагружаем сервер vsftp
:
sudo systemctl restart vsftpd
Запретить запуск службы при загрузке системы:
sudo systemctl disable vsftpd
В процессе установки FTP-сервера
создается пользователь ftp
с домашней директорией /srv/ftp
.
Настройка анонимного доступа
Прежде чем вносить какие-либо изменения в конфигурационный файл, создадим копию файла конфигурации:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.default
Открываем на редактирование файл конфигурации:
sudo nano /etc/vsftpd.conf
Настройка vsftpd
по умолчанию не разрешает подключаться анонимным пользователям, чтобы это изменить, раскомментируем строчку:
anonymous_enable=YES
Запрещаем подключаться со своим логином и паролем:
local_enable=NO
Разрешаем запись для всех пользователей, кроме анонимных:
write_enable=YES
Разрешаем запись (т.е. загрузку файлов) еще и анонимным:
anon_upload_enable=YES
Чтобы анонимный пользователь мог создавать директории:
anon_mkdir_write_enable=YES
Разрешаем пассивный режим:
pasv_enable=YES
После внесения изменений перезагружаем сервер:
sudo systemctl restart vsftpd
Перейдем в /srv/ftp
и создадим неколько каталогов, которые будут доступны на запись всем пользователям:
sudo mkdir /srv/ftp/audio
sudo chmod 777 /srv/ftp/audio
sudo mkdir /srv/ftp/video
sudo chmod 777 /srv/ftp/video
sudo mkdir /srv/ftp/others
sudo chmod 777 /srv/ftp/others
При выборе анонимного доступа, обязательно должен быть выключен файервол
Настройка авторизованного доступа
Прежде чем вносить какие-либо изменения в конфигурационный файл, создадим копию файла конфигурации:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.default
Открываем на редактирование файл конфигурации:
sudo nano /etc/vsftpd.conf
В итоге у нас должен получится вот такой файл конфигурации:
# данная опция запускает FTP-сервер как службу, сервер не должен запускаться от inetd
listen=YES
# listen обеспечивает поддержку IPv4, listen_ipv6 обеспечивает сразу IPv6 и IPv4, поэтому должна быть включена только одна из них.
listen_ipv6=NO
# запрещаем доступ для анонимных пользователей
anonymous_enable=NO
# разрешаем локальных и виртуальных пользователей
local_enable=YES
# разрешаем пользователяим изменения файловой системы
write_enable=YES
# задаем маску для вновь создаваемых файлов и директорий, это обеспечит установку прав 755 на директории и 644 на файлы, т.е. полный доступ только владельцу и чтение для группы и остальных.
local_umask=022
# изолируем пользователей в их домашних директориях
chroot_local_user=YES
# добавим опцию, чтобы не возникала ошибка у изолируемых пользователей в их домашних директориях
allow_writeable_chroot=YES
# чтобы FTP-сервер использовал локальное время сервера, а не GMT установим
use_localtime=YES
# включим запись в лог-файл /var/log/vsftpd.log загружаемых и скачиваемых файлов
xferlog_enable=YES
# использовать стандартный формат лога
xferlog_std_format=YES
# для корректной работы с текстовыми данными, в частности с символами переноса строки в разных ОС (CR+LF в Windows, LF в Linux) включим поддержку ASCII
ascii_upload_enable=YES
# FTP автоматически будет менять символы переноса строки для соответствия стандартам системы
ascii_download_enable=YES
# будем использовать кодировку UTF-8 при работе с файловой системой
utf8_filesystem=YES
# разрешим пассивный режим
pasv_enable=YES
# минимальный порт
pasv_max_port=60000
# максимальный порт
pasv_min_port=65535
# директория куда бутеп перенаправлено FTTP соединение
local_root=/var/www/
# использовать порт 20 для передачи данных вместо случайного, это нужно для нормальной работы фаервола
connect_from_port_20=YES
Настройка файервола
Брандмауэр нужен для защиты системы от компьютерных атак или для изоляции самой системы, если она была поражена вредоносным программным обеспечением.
В Ubuntu используется оболочка под названием UFW или Uncomplicated FireWall. В этой статье мы разберём, как выполняется настройка UFW Ubuntu.
Проверка состояния файрвола:
sudo ufw status
Включение файрвола:
sudo ufw enable
Отключение файрвола:
sudo ufw disable
Также, если вы что-то испортили в настройках и не знаете как исправить, можно использовать команду для сброса настроек до состояния по умолчанию:
sudo ufw reset
Обратите внимание, что если вы работаете по SSH, или запущен Apache то перед тем, как включать брандмауэр, нужно добавить правило разрешающее работу, иначе не будет доступа к серверу или сайту.
Чтобы создать разрешающее правило, используется команда allow. Вместо allow могут использоваться и запрещающие правила ufw - deny и reject.
Посмотреть доступные имена приложений:
sudo ufw app list
Например, чтобы открыть порт ufw для SSH, нужно добавить правило:
sudo ufw allow OpenSSH
Итак, для работы файервола должны быть открыты следующие правила.
Открываем 20-й порт:
sudo ufw allow 20/tcp
Открываем 21-й порт:
sudo ufw allow 21/tcp
Открываем 990-й порт:
sudo ufw allow 990/tcp
Открываем службу SSH:
sudo ufw allow OpenSSH
Открываем службу Apache:
sudo ufw allow Apache
Окрываем сопутствующие порты:
sudo ufw allow 60000:65535/tcp
Проверяем что-бы перечисленное выше было открыто:
sudo ufw status
Подробнее почитать про про Настройку UFW Ubuntu можно тут
Добавление пользователя
Чтобы использовать специальную учетную запись, для подключения к FTP, создаем пользователя следующей командой:
sudo useradd -m -s /bin/bash логин_пользователя
Задаем пароль для пользователя:
sudo passwd логин_пользователя
Назначаем полные права пользавателю на директорию с файлами и папками:
sudo chown пользователь:группа -R /var/www/