Наша взаимовыгодная связь https://banwar.org/
Протокол FTP, незважаючи на похилий вік і серйозні недоліки продовжує широко застосовуватися, багато в чому завдяки простоті і підтримки з боку самого широкого спектру пристроїв і ПО. FTP-сервер є невід'ємною частиною будь-якого веб-сервера, застосовується в системах автоматизованого обміну даними. Найбільш часто встає перед адміністраторами таких систем завданням є створення сервера з віртуальними користувачами. Сьогодні ми розповімо, як це зробити.
Про настройку FTP-сервера на базі vsftpd ми вже розповідали на сторінках нашого сайту, нещодавно істотно доповнивши і оновивши статтю Простий FTP-сервер на базі Ubuntu (vsftpd) . У ній ми розповіли яким чином можна обмежити список користувачів, які можуть підключатися до сервера, і їх права. Однак локальні користувачі залишаються при цьому локальними користувачами і не дивлячись на обмежені права можуть виявитися об'єктом атаки, спрямованої на підвищення прав, наприклад, через уразливості в будь-якому ПО.
Крім того, ручне редагування списків і налаштувань користувачів може виявитися вельми трудомісткою справою якщо їх не один-два, а значно більше. Також іноді виникає ситуація, що світити дані реальних користувачів просто небажано, наприклад, FTP використовується движком сайту (CMS), зв'язка користувач-пароль явно прописана в конфіги і теоретично доступна будь-якій працюючій з сайтом співробітнику.
У таких ситуаціях слід використовувати віртуального користувача, який матиме доступ виключно до даного FTP-ресурсу і облікові дані якого можна сміливо повідомити всім які беруть участь в роботі реальним співробітникам.
У нашій статті ми налаштуємо FTP-сервер для реалізації такої схеми:
Нехай в нашому розпорядженні є якийсь веб-сервер під управлінням якого перебувають три сайти: blue.lab, green.lab і red.lab, фізично розташовані в однойменних директоріях. Наше завдання створити FTP-сервер з віртуальними користувачами, кожен з яких має доступ тільки до свого сайту.
Важливе зауваження, в даній схемі всі сайти повинні працювати від імені веб-сервера (www-data), якщо ви використовуєте запуск кожного сайту від імені свого (реального) користувача, то вам краще налаштувати FTP-сервер для роботи з реальними користувачами або додатково забезпечити потрібні права доступу для віртуальних користувачів, що може представляти із себе нетривіальну задачу.
Перш за все встановимо традиція: назва віртуального користувача має збігатися і ім'ям кореневої FTP-папки, в нашому випадку папки сайту, а всі такі папки повинні розташовуватися в одному місці, тобто підпадати під шаблон / var / www / $ USER. Це дозволить в подальшому з легкістю маніпулювати сайтами і віртуальними користувачами, а також уникнути плутанини в іменах і настройках.
Визначившись з моделлю розміщення даних можна переходити до налаштувань ПО. Крім vsftpd нам знадобляться пакети libpam-pwdfile і apache2-utils. Останній входить до складу однойменного веб-сервера і якщо у вас вже працює Apache, то встановлювати його не треба.
Сама установка гранично проста:
apt-get install vsftpd libpam-pwdfile apache2-utils
Після чого перейдемо до налаштувань FTP-сервера, які розташовані в файлі /etc/vsftpd.conf, ми перерахуємо опції в порядку їх знаходження в файлі.
Дана опція запускає FTP-сервер як службу
listen = YES
нижче є аналогічна взаємовиключна опція:
listen_ipv6 = NO
Перша з них забезпечує підтримку IPv4, друга відразу IPv6 і IPv4, тому повинна бути включена тільки одна з них.
Забороняємо анонімних користувачів:
anonymous_enable = NO
І дозволяємо локальних (і віртуальних) користувачів:
local_enable = YES
Також дозволяємо запис:
write_enable = YES
і задаємо маску для новостворюваних файлів і папок:
local_umask = 022
Це забезпечить установку прав 755 на папки і 644 на файли, тобто повний доступ тільки власнику і читання для групи і інших.
Щоб FTP використовував локальне час сервера, а не GMT встановимо:
use_localtime = YES
І включимо лог завантажуються і скачуваних файлів:
xferlog_enable = YES
Дозволяємо активний режим:
connect_from_port_20 = YES
Задаємо шлях до балці і його формат:
xferlog_file = / var / log / vsftpd.log
xferlog_std_format = YES
Зазначимо таймаут:
idle_session_timeout = 600
data_connection_timeout = 120
Перший задає час відключення недіючого користувача, а другий час очікування відновлення незакінченою передачі.
Для коректної роботи з текстовими даними, зокрема з символами розриву рядків в різних ОС (CR + LF в Windows, LF в Linux) включимо підтримку ASCII, це корисно, якщо ви завантажуєте скрипти або файли з Linux сервера, керуєте їх в середовищі Windows і заливаєте назад. В цьому випадку FTP автоматично буде міняти символи розриву рядків для відповідності стандартам системи.
ascii_upload_enable = YES
ascii_download_enable = YES
Обов'язково ізолюємо користувача в корені його домашній директорії і поруч впишемо опцію, що дозволяє запис в корінь:
chroot_local_user = YES
allow_writeable_chroot = YES
Решта опцій залишаємо без зміни.
Нижче додамо необхідні нам налаштування. Дозволимо пасивний режим і явно вкажемо діапазон портів:
pasv_enable = YES
pasv_min_port = 62000
pasv_max_port = 62999
Включимо віртуальних користувачів:
guest_enable = YES
Зазначимо від імені якого реального користувача вони будуть працювати, так як в нашому випадку нам треба працювати з вмістом веб-сервера, то вказуємо відповідного користувача www-data.
guest_username = www-data
Застосовуємо до віртуальних користувачам налаштування локальних, інакше до них будуть застосовані обмеження анонімних.
virtual_use_local_privs = YES
Зазначимо шаблон для автоматичної генерації домашнього каталогу віртуального користувача:
user_sub_token = $ USER
Тепер можна задати самі домашні директорії
local_root = / var / www / $ USER
Також іноді непогано буде приховати реальних власників вмісту, для цього додайте:
hide_ids = YES
Якщо ви використовуєте Ubuntu, то додайте наступну недокументовану опцію:
seccomp_sandbox = NO
Це дозволить уникнути помилки 500 OOPS: prctl PR_SET_SECCOMP failed, яка виникає з некоректною спільної роботи vsftpd і системи безпеки seccomp, в Debian дана помилка не виявляється.
На цьому настройка FTP-сервера закінчена, зберігаємо файл і переходимо до налаштування правил аутентифікації. Відкриємо /etc/pam.d/vsftpd, закомментіруем в ньому все рядки і додамо дві свої:
auth required pam_pwdfile.so pwdfile / etc / vsftpwd
account required pam_permit.so
Після цього аутентифікація локальних користувачів на FTP-сервері буде неможлива, працювати будуть тільки віртуальні. Опція pwdfile / etc / vsftpwd вказує шлях до файлу паролів, його нам необхідно буде створити на наступному кроці.
Для створення користувачів будемо використовувати утиліту htpasswd зі складу apache2-utils, для створення файлу паролів і першого користувача введіть:
htpasswd -c -d / etc / vsftpwd blue.lab
Ключ -c наказує створити файл паролів, якщо він існує, то всі дані в ньому будуть очищені, а файл перезаписан, -d задає необхідний для vsftpd алгоритм шифрування хеша пароля.
Наступні користувачі створюються командою (в нашому прикладі це користувач green.lab):
htpasswd -d / etc / vsftpwd green.lab
Для видалення користувача використовуйте (видаляємо red.lab):
htpasswd -D / etc / vsftpwd red.lab
Після чого можна перезапустити службу FTP-сервера і перевірити його роботу:
service vsftpd restart
Як бачимо, налаштувати FTP-сервер з віртуальними користувачами по нашій інструкції (на відміну від багатьох інших "інструкцій" в мережі) абсолютно нескладно і недовго. Якщо ви будете уважно слідувати всім нашим рекомендаціям, то складнощів у вас виникнути не повинно.