Перейти до змісту

Захищений FTP-сервер - vsftpd

Передумови

  • Вміння працювати з редактором командного рядка (у цьому прикладі використовується vi)
  • Високий рівень комфорту з видачею команд із командного рядка, переглядом журналів та іншими загальними обов’язками системного адміністратора
  • Корисним є розуміння PAM і команд openssl
  • Запуск команд тут за допомогою користувача root або звичайного користувача та sudo

Вступ

vsftpd — це дуже безпечний FTP-демон (FTP — це протокол передачі файлів). Він доступний протягом багатьох років і є демоном FTP за умовчанням у Rocky Linux та багатьох інших дистрибутивах Linux.

vsftpd дозволяє використовувати віртуальних користувачів із підключеними модулями автентифікації (PAM). Ці віртуальні користувачі не існують у системі та не мають інших дозволів, окрім FTP. Якщо віртуального користувача скомпрометовано, особа з такими обліковими даними не матиме інших дозволів після отримання доступу як цей користувач. Це налаштування є дуже безпечним, але вимагає додаткової роботи.

Розгляньте sftp

Навіть з налаштуваннями безпеки, які використовуються тут для налаштування vsftpd, ви можете розглянути sftp замість цього. sftp зашифрує весь потік з’єднання та є більш безпечним. Ми створили документ під назвою Захищений сервер - sftp, який стосується налаштування sftp і блокування SSH.

Встановлення vsftpd

Ви також повинні переконатися, що встановлено openssl. Якщо ви використовуєте веб-сервер, можливо, є вже встановлено, але для перевірки ви можете виконати:

dnf install vsftpd openssl

Ви також захочете ввімкнути службу vsftpd:

systemctl enable vsftpd

Поки що не запускайте службу.

Налаштування vsftpd

Ви бажаєте вимкнути деякі параметри та ввімкнути інші. Як правило, встановлення vsftpd включає в себе найбільш розумні параметри, які вже встановлені. Це все ще гарна ідея перевірити їх.

Щоб перевірити файл конфігурації та за потреби внести зміни, запустіть:

vi /etc/vsftpd/vsftpd.conf

Знайдіть рядок «anonymous_enable=" і переконайтеся, що він «НІ» та НЕ закоментований. (Коментування цього рядка увімкне анонімний вхід). Рядок виглядатиме так, якщо він правильний:

anonymous_enable=NO

Переконайтеся, що «local_enable» має значення «yes»:

local_enable=YES

Додайте рядок для локального користувача root. Якщо сервер є веб-сервером, і ви використовуєте налаштування веб-сервера Apache Multi-Site, це відображатиме ваш локальний корень. Якщо ваші налаштування відрізняються або це не веб-сервер, змініть параметр "local_root":

local_root=/var/www/sub-domains

Також переконайтеся, що «write_enable» має значення «yes»:

write_enable=YES

Знайдіть рядок "chroot_local_user" і видаліть зауваження. Додайте два рядки після показаного тут:

chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

Під цим ви хочете додати розділ, який стосуватиметься віртуальних користувачів:

# Virtual User Settings
user_config_dir=/etc/vsftpd/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Вам потрібно додати розділ у нижній частині файлу, щоб примусово шифрувати паролі, надіслані через Інтернет. Вам потрібно встановити openssl і створити сертифікат для цього.

Почніть із додавання цих рядків у нижній частині файлу:

rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.key
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

pasv_min_port=7000
pasv_max_port=7500

Збережіть конфігурацію. (Shift+:+W+Q для vi.)

Налаштування сертифіката RSA

Вам потрібно створити файл сертифіката RSA vsftpd. Автор взагалі вважає, що сервер служить 4-5 років. Встановіть дні для цього сертифіката на основі років, за якими ви вважаєте, що сервер буде працювати на цьому обладнанні.

Відредагуйте кількість днів, як вважаєте за потрібне, і використовуйте формат цієї команди, щоб створити файли сертифіката та закритого ключа:

openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.pem

Як і всі процеси створення сертифікатів, це запустить сценарій із запитом на певну інформацію. Це не складний процес. Ви залишите багато полів порожніми.

Перше поле – поле коду країни; заповніть цей дволітерний код вашої країни:

Country Name (2 letter code) [XX]:

Далі йде штат або провінція, заповніть це, ввівши повну назву, а не абревіатуру:

State or Province Name (full name) []:

Далі йде назва населеного пункту. Це твоє місто:

Locality Name (eg, city) [Default City]:

Далі йде назва компанії або організації. Ви можете залишити це поле порожнім або заповнити його. Це необов'язково:

Organization Name (eg, company) [Default Company Ltd]:

Далі вказується назва організаційного підрозділу. Ви можете заповнити це поле, якщо сервер призначено для певного підрозділу, або залишити поле порожнім:

Organizational Unit Name (eg, section) []:

Наступне поле потрібно заповнити, але ви можете вирішити, як вам це потрібно. Це загальна назва вашого сервера. Приклад: webftp.domainname.ext:

Common Name (eg, your name or your server's hostname) []:

Поле електронної пошти можна залишити порожнім:

Email Address []:

Після завершення буде створено сертифікат.

Налаштування віртуальних користувачів

Як було сказано раніше, використання віртуальних користувачів для vsftpd набагато безпечніше, оскільки вони не мають системних привілеїв. Тим не менш, вам потрібно додати користувача для віртуальних користувачів. Також потрібно додати групу:

groupadd nogroup
useradd --home-dir /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Користувач має відповідати рядку guest_username= у файлі vsftpd.conf.

Перейдіть до каталогу конфігурації для vsftpd:

cd /etc/vsftpd

Потрібно створити базу паролів. Ви використовуєте цю базу даних для автентифікації наших віртуальних користувачів. Вам потрібно створити файл для читання віртуальних користувачів і паролів. Це створить базу даних.

У майбутньому, додаючи користувачів, ви захочете повторити цей процес знову:

vi vusers.txt

Користувач і пароль розділені рядками, введіть користувача, натисніть Enter і введіть пароль. Продовжуйте, доки не додасте всіх користувачів, яким наразі потрібно надати доступ до системи. Приклад:

user_name_a
user_password_a
user_name_b
user_password_b

Після завершення створення текстового файлу ви хочете створити базу даних паролів, яку vsftpd використовуватиме для віртуальних користувачів. Зробіть це за допомогою команди db_load. db_load надається libdb-utils, який має бути завантажений у вашій системі, але якщо це не так, ви можете просто встановити його за допомогою:

dnf install libdb-utils

Створіть базу даних із текстового файлу за допомогою:

db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db

Приділіть хвилинку, щоб переглянути, що робить db_load:

  • Параметр -T дозволяє імпортувати текстовий файл до бази даних
  • Параметр -t каже, що потрібно вказати основний метод доступу
  • Хеш є основним методом доступу, який ви вказуєте
  • Параметр -f говорить про читання з указаного файлу
  • Указаний файл — vusers.txt
  • А база даних, яку ви створюєте чи додаєте, це vsftpd-virtual-user.db

Змініть дозволи за замовчуванням для файлу бази даних:

chmod 600 vsftpd-virtual-user.db

Видаліть файл "vusers.txt":

rm vusers.txt

Додаючи користувачів, використовуйте vi, щоб створити ще один файл «vusers.txt», і повторно запустіть команду db_load, яка додасть користувачів до бази даних.

Налаштування PAM

vsftpd встановлює файл pam за умовчанням, коли ви встановлюєте пакет. Ви збираєтеся замінити це своїм вмістом. Завжди спочатку створюйте резервну копію старого файлу.

Створіть каталог для файлу резервної копії в /root:

mkdir /root/backup_vsftpd_pam

Скопіюйте файл pam до цього каталогу:

cp /etc/pam.d/vsftpd /root/backup_vsftpd_pam/

Відредагуйте вихідний файл:

vi /etc/pam.d/vsftpd

Видаліть у цьому файлі все, крім "#%PAM-1.0", і додайте такі рядки:

auth       required     pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account    required     pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session    required     pam_loginuid.so

Збережіть зміни та вийдіть (Shift+:+W+Q у vi).

Це дозволить ввійти для ваших віртуальних користувачів, визначених у vsftpd-virtual-user.db, і вимкне локальні входи.

Налаштування конфігурації віртуального користувача

Кожен віртуальний користувач має конфігураційний файл із зазначенням власного каталогу "local_root". Власником цього локального кореня є користувач "vsftpd" і група "nogroup".

Див. розділ Налаштування віртуальних користувачів вище. Щоб змінити право власності на каталог, введіть це в командному рядку:

chown vsftpd.nogroup /var/www/sub-domains/whatever_the_domain_name_is/html

Вам потрібно створити файл із конфігурацією віртуального користувача:

mkdir /etc/vsftpd/vsftpd_user_conf
vi /etc/vsftpd/vsftpd_user_conf/username

У ньому буде один рядок, який визначає "local_root" віртуального користувача:

local_root=/var/www/sub-domains/com.testdomain/html

Специфікацію цього шляху можна знайти в розділі "Virtual User" файлу vsftpd.conf.

Запуск vsftpd

Запустіть службу vsftpd і перевірте своїх користувачів, припускаючи, що служба запускається правильно:

systemctl restart vsftpd

Тестування vsftpd

Ви можете перевірити налаштування за допомогою командного рядка на машині та спробувати отримати доступ до машини за допомогою FTP. Тим не менш, найпростіший спосіб тестування — це перевірка за допомогою клієнта FTP, наприклад FileZilla.

Коли ви тестуєте віртуального користувача на сервері, на якому працює vsftpd, ви отримаєте повідомлення про довіру сертифіката SSL/TLS. Це довірче повідомлення повідомляє особі, що сервер використовує сертифікат, і просить її підтвердити його перед продовженням. Ви можете розміщувати файли в папці "local_root", якщо підключилися як віртуальний користувач.

Якщо ви не можете завантажити файл, вам, можливо, доведеться повернутися та ще раз перевірити кожен із кроків. Наприклад, можливо, права власності для "local_root" не встановлено для користувача "vsftpd" і групи "nogroup".

Висновок

vsftpd є популярним і поширеним FTP-сервером, який може бути окремим сервером або частиною захищеного веб-сервера Apache. Це досить безпечно, якщо налаштовано використовувати віртуальних користувачів і сертифікат.

Ця процедура містить багато кроків для налаштування vsftpd. Додатковий час для правильного налаштування гарантує, що ваш сервер буде максимально безпечним.

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova