Установка и настройка vsFTPd на Ubuntu / Debian

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: FTP, Ubuntu, Linux.

vsFTPd — это программный продукт для реализации FTP-сервера на Linux. В данной инструкции пойдет речь о его установке и запуске на системах Ubuntu (проверено для версий 18, 20 и 22), Debian и Astra Linux. В конце статьи будут ссылки на материалы для развертывания и настройки других FTP-серверов.

Установка и настройка

Обновляем списки портов в репозиториях:

apt update

Устанавливаем vsFTPd:

apt install vsftpd

Открываем конфигурационный файл:

vi /etc/vsftpd.conf

И снимаем комментарий со следующих строк:

write_enable=YES
chroot_local_user=YES

write_enable — разрешить копировать файлы на сервер; chroot_local_user — использовать для пользователей изолированное окружение.

И дописываем следующее:

allow_writeable_chroot=YES
pasv_enable=YES
pasv_max_port=60000
pasv_min_port=65535

* где allow_writeable_chroot разрешаем использовать домашние каталоги с правом на запись; pasv_enable включает пассивный режим работы FTP-сервера; pasv_max_port и pasv_min_port определяют диапазон портов для пассивного режима.

Если используется брандмауэр, необходимо добавить правила и разрешить следующие порты:

  • 20 — основной порт FTP для передачи.
  • 21 — для активного режима. Используется для передачи команд.
  • 60000-65535 — диапазон динамических портов, который нами был определен в конфигурационном файле. Используется для пассивного режима.

Для этого вводим команду:

iptables -I INPUT -p tcp --match multiport --dports 20,21,60000:65535 -j ACCEPT

Для сохранения правил можно использовать утилиту:

apt install iptables-persistent

netfilter-persistent save

Разрешаем и перезапускаем сервис:

systemctl enable vsftpd

systemctl restart vsftpd

Добавление пользователя

По умолчанию, авторизация выполняется с использованием локальных пользователей. Чтобы использовать специальную учетную запись, для подключения к FTP, создаем пользователя следующей командой:

useradd ftpuser -d /ftp -s /bin/false -m

* где ftpuser — имя учетной записи; /ftp — домашний каталог (в него будем попадать при подключении); /bin/false — запрет пользователю на локальный вход в систему.

Задаем пароль:

passwd ftpuser

Открываем на редактирование следующий файл:

vi /etc/shells

И добавляем следующее:

/bin/false

* мы добавили /bin/false в список разрешенных оболочек. В противном случае, может вернуться ошибка 530 Login incorrect.

Проверка

Для проверки подключения можно воспользоваться FTP-клиентом на другом компьютере (например, FileZilla или Total Commander).

Также можно установить FTP-клиент на сервер:

apt install ftp

И для подключения используем следующую команду:

ftp localhost

Система запросит логин и пароль.

Настройка SSL/TLS

TLS позволяет настроить безопасный FTP, передача данных через который осуществляется по шифрованному каналу.

Для данной цели можно использовать самоподписанный сертификат. Чтобы его создать, вводим команду:

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/private/vsftpd.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.dmosk.local/CN=ftp"

* в данном примере мы создаем самоподписанный сертификат на 4 года для URL ftp.dmosk.local или ftp. Открытый ключ будет сохранен в файле /etc/ssl/certs/vsftpd.pem, закрытый — /etc/ssl/private/vsftpd.key. При желании, мы можем использовать купленный сертификат или получить его бесплатно у Let's Encrypt.

Открываем на редактирование конфигурационный файл vsFTPd:

vi /etc/vsftpd.conf

Редактируем строки:

rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES

* где ssl_enable разрешает использование шифрования; rsa_cert_file — путь к открытому ключу; rsa_private_key_file — путь к закрытому ключу.

И дописываем следующие:

allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH

* где: 

  • allow_anon_ssl разрешает использовать SSL анонимным пользователям; 
  • force_local_data_ssl требует использования шифрования, и если установить YES, клиенты без шифрования не смогут подключиться; 
  • force_local_logins_ssl также требует подключение по SSL; 
  • ssl_tlsv1 — использовать TLS версии 1; 
  • ssl_sslv2 и ssl_sslv3 — использовать SSL версии 1 и 2; 
  • ssl_ciphers — выбор шифра. В данном примере мы говорим использовать максимально безопасный.

Перезапускаем FTP-сервер:

systemctl restart vsftpd

Виртуальные пользователи

Устанавливаем pam-модуль, позволяющий аутентифицировать пользователей с помощью passwd-like файлов:

apt install libpam-pwdfile

Открываем конфигурационный файл vsftpd и добавляем следующее:

vi /etc/vsftpd.conf

user_config_dir=/etc/vsftpd_virtuser_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

* где:

  • user_config_dir — каталог для хранения настроек пользователя.
  • guest_enable — разрешаем гостевой вход.
  • virtual_use_local_privs — виртуальные пользователи используют привилегии, как локальные, а не анонимные.
  • pam_service_name — имя pam-сервиса.
  • nopriv_user — под каким пользователем работает сервер, когда ему не нужны привилегии.
  • guest_username — имя гостевого пользователя.

Для возможности использовать утилиту htpasswd ставим следующий пакет:

apt install apache2-utils

Создаем каталог для хранения файла виртуальных пользователей и двух пользователей:

mkdir /etc/vsftpd

htpasswd -cd /etc/vsftpd/ftpd.passwd virt1

htpasswd -d /etc/vsftpd/ftpd.passwd virt2

* обратите внимание, опция -c команды htpasswd используется только при создании файла (при первом вводе команды). Мы создаем два пользователя — virt1 и virt2.

Архивируем имеющийся pam-сервис для vsftpd:

mv /etc/pam.d/vsftpd /etc/pam.d/back_vsftpd

Создаем новый со следующим содержимым:

vi /etc/pam.d/vsftpd

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

В самой системе создаем пользователя, которого используем как гостевого:

useradd vsftpd -d /home/vsftpd -g nogroup -m -s /bin/false

* с домашней директорией /home/vsftpd, основной группой nogroup и без возможности входа в систему (-s /bin/false).

Создаем каталог хранения настроек виртуальных пользователей:

mkdir /etc/vsftpd_virtuser_conf

и создаем настройку для первого:

vi /etc/vsftpd_virtuser_conf/virt1

local_root=/var/www/virt1

local_root — домашняя директория для FTP пользователя virt1.

Создаем домашний каталог для нашего пользователя virt1 и задаем правильные права:

mkdir /var/www/virt1

chown vsftpd:nogroup /var/www/virt1

Перезапускаем vsftpd:

systemctl restart vsftpd

Читайте также

Другая полезная информация на сайте:

1. Установка и настройка ProFTPd на Ubuntu Server.

2. Настройка FTP-сервера vsFTPd на CentOS 7.

3. FTP-сервер ProFTPd на CentOS 7.

4. Пример настроек и использования rclone.

# Linux # Ubuntu # UNIX # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет