- Установка сервера vsFTPd на Nginx + Apache
- Установка vsFTPd
- Управление сервером vsftpd
- Настройка анонимного доступа
- Настройка авторизованного доступа
- Настройка файервола
- Добавление пользователя
- iSmooth Blog
- How to Install FTP Server for Apache or Nginx on Ubuntu 20.04
- Getting Started on Linux Ubuntu
- Install Software Package
- Setting Permissions
- Configure UFW Firewall
- Create FTP System User
- Configure VSFTPD to Enable FTP Server
- VSFTPD Configuration
- Enable SSL over TLS for VSFTPD
- Verify FTP Server Implementation
Установка сервера vsFTPd на Nginx + Apache
Протокол передачи файлов FTP это TCP протокол для передачи файлов между компьютерами, работает на основе модели клиент-сервер. Серверный компонент постоянно слушает FTP запросы от удаленных клиентов. При получении запроса он управляет входом и установкой соединения. На протяжении сессии он выполняет любые команды, переданные FTP клиентом.
Одним из самых популярных FTP серверов является vsftpd — его легко устанавливать, настраивать и поддерживать. Доступ к FTP серверу возможен в двух режимах:
- В анонимном режиме удаленный клиент может получить доступ к FTP серверу, используя учетную запись anonymous или FTP и передав адрес email в качестве пароля. Данные в директории /srv/ftp доступны для всех анонимных пользователей.
- В авторизованном режиме пользователь должен иметь учетное имя и пароль в системе. Доступ к каталогам и файлам зависит от прав доступа пользователя, указанного при входе. Обычный пользователь ограничен своей домашней директорией.
В зависимости от способа установления соединения для передачи данных различают активный и пассивный режимы работы FTP :
- В активном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PORT , в которой указывает свой адрес и порт для передачи данных. Получив данную команду, сервер устанавливает соединение с 20 порта на указанный в команде порт клиента.
- В пассивном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PASV . В ответ сервер передает адрес и порт, на который следует устанавливать соединение для передачи данных. Получив эту информацию, клиент устанавливает подключение к серверу и начинает передачу данных.
Основной недостаток активного режима — клиенту требуется выделенный IP-адрес . Также определенные сложности будут возникать при нахождении клиента за брандмауэром или NAT-ом . В пассивном режиме все соединения инициирует клиент и поэтому к нему нет никаких требований. По этой причине на сегодняшний день основным режимом работы FTP является пассивный в авторизованном режиме.
Установка vsFTPd
Обновляем список пакетов сервера:
Устанавливаем сервер vsftp :
sudo systemctl start vsftpd
Добавляем веб сервер vsftp в автозагрузку::
sudo systemctl enable vsftpd
Проверка работоспособности сервера vsftpd :
sudo systemctl status vsftpd
Управление сервером vsftpd
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
Открываем на редактирование файл конфигурации:
Настройка vsftpd по умолчанию не разрешает подключаться анонимным пользователям, чтобы это изменить, раскомментируем строчку:
Запрещаем подключаться со своим логином и паролем:
Разрешаем запись для всех пользователей, кроме анонимных:
Разрешаем запись (т.е. загрузку файлов) еще и анонимным:
Чтобы анонимный пользователь мог создавать директории:
anon_mkdir_write_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
Открываем на редактирование файл конфигурации:
В итоге у нас должен получится вот такой файл конфигурации:
# данная опция запускает 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.
Проверка состояния файрвола:
Также, если вы что-то испортили в настройках и не знаете как исправить, можно использовать команду для сброса настроек до состояния по умолчанию:
Обратите внимание, что если вы работаете по SSH, или запущен Apache то перед тем, как включать брандмауэр, нужно добавить правило разрешающее работу, иначе не будет доступа к серверу или сайту.
Чтобы создать разрешающее правило, используется команда allow. Вместо allow могут использоваться и запрещающие правила ufw — deny и reject.
Посмотреть доступные имена приложений:
Например, чтобы открыть порт ufw для SSH, нужно добавить правило:
Итак, для работы файервола должны быть открыты следующие правила.
Окрываем сопутствующие порты:
sudo ufw allow 60000:65535/tcp
Проверяем что-бы перечисленное выше было открыто:
Подробнее почитать про про Настройку UFW Ubuntu можно тут
Добавление пользователя
Чтобы использовать специальную учетную запись, для подключения к FTP, создаем пользователя следующей командой:
sudo useradd -m -s /bin/bash логин_пользователя
Задаем пароль для пользователя:
sudo passwd логин_пользователя
Назначаем полные права пользавателю на директорию с файлами и папками:
sudo chown пользователь:группа -R /var/www/
iSmooth Blog
How to Install FTP Server for Apache or Nginx on Ubuntu 20.04
Well, I have found many articles on the web which claim to explain the installation of an FTP Server running specifically on Ubuntu 20.04 LTS but none of them seem to actually deliver a clear working and feasible solution, and that means one thing, welcome to my Homelab.
In this article, I am going through all the steps necessary for anyone to install an FTP service using VSFTPD on an instance with TLS/SSL and properly integrate it with the main web server directory for either Apache or Nginx, the way it should be done.
The end result is going to be one system user that you can use to authenticate an FTP client like FileZilla to any website root directory you have on /var/www which is the path used for web services specifically on Ubuntu itself.
Getting Started on Linux Ubuntu
Get remote access to your instance with superuser credentials provided to you. Now, lets prepare this operating system environment with the software required for an FTP server running VSFTPD.
Install Software Package
sudo apt update sudo apt install vsftpd sudo service vsftpd status
You should now see that VSFTPD service is actually active and running without any issues.
Setting Permissions
sudo chgrp -R www-data /var/www/* sudo find /var/www -type f -exec chmod 664 <> \; sudo find /var/www -type d -exec chmod 775 <> \; sudo find /var/www -type d -exec chmod g+s <> \; sudo chown root:root /var/www
That’s like the magic touch for this particular tutorial, which is setting a proper directory permissions for our websites document root.
Configure UFW Firewall
sudo ufw allow 20,21,22,990,40000:50000/tcp sudo ufw enable
Then, you can confirm firewall status to observe whether firewall is truly enabled with the ports forwarded.
You will only need this if your are going to use the firewall on your Ubuntu instance, otherwise you can completely skip this step.
Create FTP System User
sudo useradd sftp -d /var/www sudo passwd sftp sudo adduser sftp www-data sudo echo "DenyUsers sftp" >> /etc/ssh/sshd_config sudo systemctl reload sshd
Here we’re creating the system user to authenticate an FTP client while restricting SSH access which means it’s only going to be valid for use through the FTP protocol, just make sure to specify a password that you can remember.
Configure VSFTPD to Enable FTP Server
In order for VSFTPD to work on your Linux Ubuntu environment, it needs to be configured accordingly with special settings.
VSFTPD Configuration
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak sudo nano /etc/vsftpd.conf
This will create a backup for the original configuration file while defining new settings. So, insert the following inside the config file created:
# FTP listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd force_dot_files=YES pasv_min_port=40000 pasv_max_port=50000 allow_writeable_chroot=YES # SSL ssl_enable=YES rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH
That’s like everything typically needed for a perfect implementation of VSFTPD alongside a web server like Apache or Nginx running on Linux Ubuntu.
Enable SSL over TLS for VSFTPD
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Finally, we will create an SSL certificate for FTP over TLS.
Verify FTP Server Implementation
You must restart the VSFTPD service for all changes to take effect.
sudo systemctl restart vsftpd
There you go, navigate to your favourite FTP client which happens to be FileZilla for my own preference. In particular, you will need to specify your host address, username, password and port settings.
As a result, you will use sftp for username and 21 for port, when successful you will be presented with a welcome dialog showing SSL over TLS certificate information, just confirm to complete authorization.