FTP, або протокол передачі файлів, є широко використовуваним мережевим протоколом передачі файлів і даних між двома системами в мережі. FTP за замовчуванням не шифрує трафік, що є небезпечним і може призвести до атаки на сервер. VSFTPD (Very Secure FTP Daemon) – безпечний, надійний та швидкий FTP-сервер.
VSFTPD поширюється під ліцензією GNU GPL і є стандартним FTP-сервером для більшості систем Linux. У цій статті показано, як встановити та настроїти FTP-сервер в операційній системі Linux Mint.
Як працює FTP-сервер?
FTP-сервер дозволяє передачу файлів між клієнтом та сервером. Ви можете завантажувати чи завантажувати файли з сервера. Клієнт встановлює два з’єднання з сервером: одне передачі команд і одне передачі даних. Клієнт передає команду на FTP сервер через порт 21, командний порт FTP. Для передачі використовується порт даних. Існує два типи режимів підключення для передачі даних:
- Активний режим: в активному режимі клієнт створює порт і очікує на підключення сервера. Це дозволяє йому передавати дані. Сервер підключається до клієнта передачі даних через порт 20. Активний режим не включений за замовчуванням у більшості FTP-клієнтів, оскільки більшість брандмауерів, таких як наш FTP-сервер, забороняють з’єднання, встановлені ззовні. Щоб скористатися цією функцією, ви повинні налаштувати брандмауер.
- Пасивний режим: коли клієнт запитує файл, сервер відкриває довільний порт і вказує клієнту підключитися до нього. У цьому випадку клієнт ініціює з’єднання, усуваючи проблеми із брандмауером. Більшість FTP-клієнтів за промовчанням працюють у пасивному режимі.
Встановлення FTP-сервера в Linux Mint
Спочатку підключіться до віртуальної машини Linux за SSH, використовуючи користувача з привілеями sudo, а потім виконайте такі дії:
Крок 1: Встановіть FTP-сервер
Існує безліч доступних FTP-серверів, таких як ProFTPD та vsftpd. Ми будемо використовувати vsftpd.
Функції FTP-сервера vsftpd
vsftpd пропонує безліч функцій, які роблять його чудовим FTP-сервером. Це:
- Підтримує конфігурацію віртуального IP
- Підтримує сумісність SSL/TLS
- Полегшує IPv6
- Завдяки можливості chroot система може обмежувати користувачів їх домашнім каталогом. Це буде встановлено далі у статті.
- Це може обмежити пропускну здатність.
- Підтримує віртуальних користувачів
Ми почнемо з установки VSFTPD у нашій системі. Для цього запустіть Термінал у ОС Mint, натиснувши Ctrl+Alt+T на клавіатурі. Потім у терміналі введіть наступну команду, щоб оновити індекс системного репозиторію:
sudo apt update
Тепер введіть команду нижче, щоб встановити vsftpd:
sudo apt install vsftpd
Після завершення інсталяції виконайте наступний рядок коду, щоб перевірити, чи активна служба vsftpd:
sudo systemctl status vsftpd
У категорії Active ви можете побачити, що vfstpd активний (працює). Команда systemctl використовується для керування та перевірки служб Linux. Цю команду також можна використовувати для увімкнення та вимкнення служб Linux. Якщо vsftpd не запущено, введіть наступний рядок коду в термінал:
sudo systemctl enable --now vsftpd
Примітка. Параметр –now гарантує, що команда enable негайно впливає на нашу службу, а не після перезавантаження.
Крок 2. Налаштуйте брандмауер
FTP використовує порт 20 для активного режиму, порт 21 для команд та кілька портів для пасивного режиму. Ми повинні дозволити ці порти через наш брандмауер. Ви можете пропустити цей крок, якщо ви не використовуєте брандмауер. Більшість систем Linux використовують ufw для керування брандмауерами. Тим не менш, деякі постачальники хмарних послуг, такі як Microsoft Azure, мають брандмауери за межами віртуальної машини, які потрібно налаштувати через їх портал. Відкрийте діапазон портів для пасивних FTP-з’єднань та портів 20 та 21 для TCP-з’єднань. Діапазон пасивних портів залежить від очікуваної кількості одночасних клієнтів користувача.
Крім того, один клієнт може передавати кілька або більші файли, використовуючи кілька портів. Ми побачимо, як вказати наш FTP-сервер для використання цих портів пізніше у цьому посібнику. Порти з 1 до 1024 зарезервовані, тому наш пасивний діапазон портів FTP має бути більшим за 1024. Я відкрию порти між 5000 і 10000. Крім того, ми відкриємо порт 990 для TLS, який буде налаштований пізніше. Давайте зробимо це для ufw. Введіть наступні рядки коду на терміналі:
sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 990/tcp sudo ufw allow 5000:10000/tcp
Крок 3. Налаштуйте користувачів
Два найбільш типові варіанти використання FTP-серверів:
- Ви хочете розмістити загальнодоступний FTP-сервер, до якого будуть підключатися багато загальнодоступних користувачів для отримання файлів.
- Ви хочете завантажити файли на свій Linux-сервер для особистого використання без присутності публічних користувачів.
У першому сценарії вам потрібно створити додаткового користувача та надати своїм клієнтам ім’я користувача та пароль для доступу до файлів. В іншому другий приклад ідентичний першому.
Загальнодоступному користувачеві має бути дозволено переглядати та завантажувати файли лише з певного каталогу, але адміністратор повинен мати можливість завантажувати файли до будь-якої папки на комп’ютері. Для цього ви повинні мати базове уявлення про дозволи користувачів. Користувач root може записувати файли до будь-якої папки на сервері. Інші користувачі мають доступ до всіх папок у своєму домашньому каталозі, яким є /home/username, але не можуть писати більшість інших каталогів.
Припустимо, ви хочете завантажувати файли в каталоги, відмінні від домашнього каталогу вашого адміністратора, наприклад /var/www. У цьому випадку ви повинні змінити власника каталогу на свого користувача адміністратора за допомогою команди chown або змінити права на зміну каталогу за допомогою команди chmod.
Створіть загальнодоступний обліковий запис користувача, щоб розпочати. Для цього виконайте наступний рядок коду:
sudo adduser fosslinux
Введіть свій пароль, очистіть інші поля та натисніть Y, щоб зберегти зміни.
Тепер ми відключимо дозвіл ssh для цього користувача з метою безпеки. Введіть наступну команду:
sudo nano /etc/ssh/sshd_config
Додайте у цей файл рядок нижче:
DenyUsers fosslinux
Введіть Ctrl+x, потім y, а потім Enter. Перезапустіть службу SSH, щоб ці зміни набули чинності.
sudo systemctl restart ssh
Крок 4. Створіть папку FTP та налаштуйте її роздільну здатність.
Ми створимо каталог FTP. Введіть наступну команду:
sudo mkdir /ftp
Тепер ми змінимо власника цього каталогу на наш обліковий запис адміністратора. Ключ у
sudo chown fosslinux /ftp
Якщо ви хочете завантажити файли до папки, що не належать вашому обліковому запису адміністратора, ви повинні використовувати попередню команду, щоб змінити власника папки.
Крок 5: Налаштуйте та захистіть vsftpd
Відкрийте конфігураційний файл для vsftpd. Для цього виконайте таку команду:
sudo nano /etc/vsftpd.conf
Переконайтеся, що рядки не закоментовані
anonymous_enable=NO local_enable=YES write_enable=YES
Крім того, ми відкрили порти з 5000 до 10000 для пасивного режиму на кроці 2. Тому тепер ми повинні повідомити vsftpd, які порти використовувати для пасивних FTP-з’єднань. Додайте наведені нижче рядки до файлу vsftpd.conf.
pasv_min_port=5000 pasv_max_port=10000
Тепер ми визначимо каталог за замовчуванням для FTP-з’єднань, який відкриватиметься щоразу, коли клієнт підключається до нашого FTP-сервера. Для цього додайте наступний рядок:
local_root=/ftp
Примітка. Пам’ятайте, що в цьому конфігураційному файлі не повинно бути пробілів ні перед, ні після знака =.
Як заблокувати користувача в домашньому каталозі
З метою безпеки ми обмежимо користувача fosslinux каталогом за промовчанням, оскільки користувач зазвичай може переглядати весь сервер Linux за промовчанням. Для цього vsftpd використовує chroot. Щоб продовжити, розкоментуйте наступні рядки.
chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
Крім того, додайте наступний рядок у файл конфігурації, оскільки він відсутній за промовчанням.
allow_writeable_chroot=YES
Перший рядок включає функцію chroot для локальних користувачів, включаючи наших адміністраторів та користувачів fosslinux. Другий і третій рядки дозволяють нам вибрати користувачів для chroot.
Як встановити дозвіл на файл
local_umask=0002
Цей рядок змінить дозвіл на зміну кожного новоствореного файлу та папки на 664 (-rw-rw-r-) та 775 відповідно (rwxrwxr-x). Це означає, що користувач fosslinux може лише читати та завантажувати файли з кожного підкаталогу нашого FTP-каталогу, але не може нічого завантажувати, оскільки він не є власником каталогу.
Введіть Ctrl+x, потім y, а потім Enter. В даний час ми повинні створити цей файл списку, виконавши наступний рядок коду:
sudo touch /etc/vsftpd.chroot_list sudo nano /etc/vsftpd.chroot_list
Незалежно від користувачів, яких ви вибираєте у цьому файлі; вони не будуть chroot’овані. Тому помістіть своє адміністративне ім’я користувача у файл, оскільки ми не любимо його блокувати.
Введіть Ctrl+x, потім y, а потім Enter. Ми повинні перезапустити наш сервер vsftpd, щоб ці зміни набули чинності негайно. Ви можете перезапустити сервер, виконавши цей рядок коду:
sudo systemctl restart --now vsftpd
Як захистити vsftpd за допомогою TLS/SSL
Рекомендується шифрувати FTP-трафік, якщо він передаватиметься через Інтернет. FTPS використовуватиметься для шифрування нашого трафіку (протокол передачі файлів через SSL). По-перше, давайте створимо самопідписаний сертифікат. Введіть наступні команди у терміналі:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Введіть необхідну інформацію, а сертифікат буде згенерований. Ви також можете натиснути Enter, щоб встановити значення за промовчанням. У цей час відкрийте файл конфігурації vsftpd. Виконайте цей рядок коду:
sudo nano /etc/vsftpd.conf
Перейдіть в кінець файлу та видаліть рядки, наведені нижче.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO
Після того, як ви видалили вказані вище рядки, додайте такі рядки:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES 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
Нарешті, перезапустіть службу vsftpd за допомогою команди
sudo systemctl restart --now vsftpd
Як підключитись до нашого FTP-серверу
Для цього вам знадобиться FTP-клієнт. Знову ж таки, є безліч доступних варіантів. Я б порадив використати Filezilla. Завантажте, встановіть, а потім запустіть. Введіть IP-адресу вашого сервера у розділі «Хост» разом із вашим ім’ям користувача та паролем, а потім натисніть кнопку «Швидке підключення».
Ви побачите каталоги вашого ПК зліва та каталоги вашого FTP-сервера праворуч. Ви можете завантажувати та завантажувати файли між FTP-сервером та вашим пристроєм, перетягуючи їх (клієнт).