Записки IT специалиста
Настраиваем FTP-сервер с виртуальными пользователями на базе vsftpd
Протокол FTP, несмотря на преклонный возраст и серьезные недостатки продолжает широко применяться, во многом благодаря простоте и поддержке со стороны самого широкого спектра устройств и ПО. FTP-сервер является неотъемлемой частью любого веб-сервера, применяется в системах автоматизированного обмена данными. Наиболее часто встающей перед администраторами таких систем задачей является создание сервера с виртуальными пользователями. Сегодня мы расскажем, как это сделать.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Про настройку 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-сервер как службу
ниже имеется аналогичная взаимоисключающая опция:
Первая из них обеспечивает поддержку IPv4, вторая сразу IPv6 и IPv4, поэтому должна быть включена только одна из них.
Запрещаем анонимных пользователей:
И разрешаем локальных (и виртуальных) пользователей:
и задаем маску для вновь создаваемых файлов и папок:
Это обеспечит установку прав 755 на папки и 644 на файлы, т.е. полный доступ только владельцу и чтение для группы и остальных.
Чтобы FTP использовал локальное время сервера, а не GMT установим:
И включим лог загружаемых и скачиваемых файлов:
Разрешаем передачу данных через порт 20, требуется для лучшей совместимости с некоторыми клиентами:
Задаем путь к логу и его формат:
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
Включим виртуальных пользователей:
Укажем от имени какого реального пользователя они будут работать, так как в нашем случае нам надо работать с содержимым веб-сервера, то указываем соответствующего пользователя www-data.
Применяем к виртуальным пользователям настройки локальных, иначе к ним будут применены ограничения анонимных.
virtual_use_local_privs=YES
Укажем шаблон для автоматической генерации домашнего каталога виртуального пользователя:
Теперь можно задать сами домашние директории
Также иногда неплохо будет скрыть реальных владельцев содержимого, для этого добавьте:
Если вы используете Ubuntu, то добавьте следующую недокументированную опцию:
Это позволит избежать ошибки 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-сервера и проверить его работу:
Как видим, настроить FTP-сервер с виртуальными пользователями по нашей инструкции (в отличие от многих иных «инструкций» в сети) абсолютно несложно и недолго. Если вы будете внимательно следовать всем нашим рекомендациям, то сложностей у вас возникнуть не должно.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Дополнительные материалы:
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Free FTP Server Software
Wing FTP Server is an easy-to-use, powerful, and free FTP server software for Windows, Linux, and Mac OS. It supports multiple file transfer protocols, including FTP, FTPS, HTTP, HTTPS, and SFTP, giving your clients flexibility in how they connect to the server. And it provides admins with a web-based interface to administrate the server from anywhere. You can also monitor server performance and online sessions and even receive email notifications about various events taking place on the server.
After the trial period, you can continue using it as a Free edition for non-commercial use.
Support FTP, FTPS, SFTP, and HTTP/HTTPS. Free client FTP Rush for FTP/SFTP file transfer.
You can run this FTP server software on Windows, Linux, and Mac OS.
Access or share files via a web browser, v7.0 adds a new UI and supports Folder Download.
Just with a web browser, you can administrate the server anytime, anywhere.
This Android / iOS App helps mobile phone user transfer and manage remote FTP files easily.
Use the event manager to execute Lua script, send an email notification or run 3rd party program.
Wing FTP can be clustered by Wing Gateway to deploy a simple load balancing solution.
Store user data via XML files or ODBC/Mysql database, also support Windows AD/LDAP authentication.
Share files or request files with just a web link, and then anyone can get/send files without login.
All the FTP transactions will be captured into a database, you can analyze it and generate reports in real-time.
Allows you to map virtual directories to physical directories, and you can also use UNC path or mapped drives for virtual directories.
More FTP server features .
Our Customers
Over 10,000 customers around the world are using WingFTP for file transfer service