Захищений 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