Установка и настройка Pure-FTPd в FreeBSD 14
FTP сервер можно использовать когда необходимо кому-то выдать место куда он сможет загрузить файлы большого объема, использовать возможности загрузки файлов без авторизации из любого места интернета, загрузки файлов веб-сервера. Хотя для загрузки файлов веб-сервер рекомендую использовать SFTP. Использование в качестве FTP-сервера Pure-FTPd в FreeBSD удобно тем что можно создавать FTP пользователей во внутренней базе данный Pure-FTPd или использовать для этого SQL базы данных.
1. Установка Pure-FTPd
Устанавливаем через пакеты
pkg install pure-ftpd
Или устанавливаем из портов, с нужными опциями
cd /usr/ports/ftp/pure-ftpd/ && make install clean
Дожидаемся окончания сборки.
2. Конфигурация Pure-FTPd
Файл конфигурации FTP-сервера Pure-FTPd находится по адресу /usr/local/etc/pure-ftpd.conf (изначально он не создан)
Скопируем образец файла конфигурации pure-ftpd.conf.sample в pure-ftpd.conf
cp /usr/local/etc/pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf
Открываем файл конфигурации и редактируем
nano /usr/local/etc/pure-ftpd.conf
Описание, перевод и пояснение основных параметров файла конфигурации pure-ftpd.conf
############################################################
# #
# Конфигурационный файл для pure-ftpd #
# #
############################################################
# Ограничить пользователей их домашним каталогом.
ChrootEveryone yes
# Если для предыдущего параметра установлено значение "нет", то члены
# следующей группы не будут ограничены. Остальные будут.
# TrustedGID 100
# Включить хаки для совместимости с кривыми клиентами.
BrokenClientsCompatibility no
# Максимальное количество одновременно подключенных пользователей.
MaxClientsNumber 50
# Запускать в фоновом процессе.
Daemonize yes
# Максимальное количество пользователей с одно IP-адреса.
MaxClientsPerIP 8
# Логирование команд клиентов. Для логирования ответов сервера дублировать строку.
VerboseLog no
# Показывать файлы начинающиеся с точки.
DisplayDotFiles no
# Только анонимный пользователи, запретить авторизацию.
AnonymousOnly no
# Запретить анонимный доступ, только авторизованные пользователи (yes = запретить анонимный доступ).
NoAnonymous no
# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# По умолчанию "ftp". "none" выключает логирование.
SyslogFacility none
# Display fortune cookies
# FortunesFile /usr/share/fortune/zippy
# Не переводить IP адреса в имена хостов.
DontResolve yes
# Время простоя в минутах после которого разрывается соединение.
MaxIdleTime 15
# LDAP configuration file (see README.LDAP)
# LDAPConfigFile /etc/pureftpd-ldap.conf
# MySQL configuration file (see README.MySQL)
# MySQLConfigFile /etc/pureftpd-mysql.conf
# PostgreSQL configuration file (see README.PGSQL)
# PGSQLConfigFile /etc/pureftpd-pgsql.conf
# PureDB user database (Аутентификация через внутреннюю базу данных пользователей)
# Далее в статье будет показано как создавать пользователей
# По умолчанию команда 'pure-pw mkdb' создает файл базы данных по следующему пути:
PureDB /usr/local/etc/pureftpd.pdb
# Path to pure-authd socket (see README.Authentication-Modules)
# ExtAuth /var/run/ftpd.sock
# Включить PAM аутентификация.
# PAMAuthentication yes
# Использовать Unix (/etc/passwd) аутентификация.
# UnixAuthentication yes
# Если используется несколько методов аутентификации, то они выполняются
# в последовательности как указаны в файле конфигурации.
# Предел рекурсии ls команды. Первое — количество файлов, второе — количество подкаталогов.
LimitRecursion 10000 8
# Разрешить анонимным пользователям создавать каталоги.
AnonymousCanCreateDirs no
# Если система загружена больше чем указано, анонимные пользователи не могут скачивать.
MaxLoad 4
# Диапазон портов для пассивного соединения.
# PassivePortRange 30000 50000
# Принудительно указывать IP-адрес в ответах PASV/EPSV для NAT.
# ForcePassiveIP 192.168.0.1
# Коэффициент загруженного к скаченному для анонимных пользователей.
# AnonymousRatio 1 10
# Коэффициент загруженного к скаченному для всех пользователей включая анонимных.
# UserRatio 1 10
# Запретить скачку файлов, принадлежащих системному пользователю "ftp".
# Файлы, которые были загружены, но не была еще изменены права доступа.
AntiWarez yes
# IP адрес/порт который слушает сервер (по умолчанию все адреса и 21 порт).
# Bind 127.0.0.1,21
# Максимальная скорость для анонимных пользователей (KB/s).
# AnonymousBandwidth 8
# Максимальная скорость для всех пользователей включая анонимных (KB/s).
# UserBandwidth 8
# Использовать AnonymousBandwidth или UserBandwidth, не сразу оба.
# Маска создания файла: <маска для файлов>:<маска для каталогов>.
# Что бы получить umask, нужно из 777 вычесть права доступа которые хотим установить.
# Umask 137:027 соответствует правам 640 для файлов и 750 для каталога.
# Umask 177:077 соответствует правам 600 для файлов и 700 для каталога.
Umask 137:027
# Минимальный UID с которого пользователь будет пущен. Для доступа root использовать значение 0.
MinUID 100
# Разрешить FXP для авторизованных пользователей. Передача напрямую с FTP-сервера на FTP-сервера.
AllowUserFXP no
# Разрешить FXP для анонимных пользований и авторизованных пользователей.
AllowAnonymousFXP no
# Пользователи не могут удалять/изменять файлы начинающиеся с точки, даже если они являются владельцами.
# Но если TrustedGID включен, то эта группа будет иметь доступ к этим файлам в исключительных случаях.
ProhibitDotFilesWrite no
# Запретить чтение файлов начинающихся с точки (.history, .ssh, ...).
ProhibitDotFilesRead no
# Не перезаписывать файл. Когда загружается файл с таким же именем,
# оригинальный файл будет переименован: file.1, file.2, file.3 и так далее.
AutoRename no
# Запретить загрузку файлов анонимными пользователями.
# Мне нужна загрузка, поэтому no (no = разрешить загрузку).
AnonymousCantUpload no
# Только подключенные к этому IP адресу могут быть не анонимными пользователя.
# TrustedIP 10.1.1.1
# Добавлять PID в каждую строку лога.
# LogPID yes
# Создавать дополнительные файлы журнала, в различных форматах.
# Create an additional log file with transfers logged in a Apache-like format :
# fw.c9x.org - jedi [13/Apr/2017:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# This log file can then be processed by common HTTP traffic analyzers.
# AltLog clf:/var/log/pureftpd.log
# Create an additional log file with transfers logged in a format optimized
# for statistic reports.
# AltLog stats:/var/log/pureftpd.log
# Create an additional log file with transfers logged in the standard W3C
# format (compatible with many HTTP log analyzers)
# AltLog w3c:/var/log/pureftpd.log
# Запретить CHMOD команду. Пользователи не смогут изменять права доступа.
# NoChmod yes
# Разрешать пользователям возобновлять/загружать файлы, но не удалять их.
# KeepAllFiles yes
# Автоматически создавать домашние каталоги пользователя, если они отсутствуют.
# CreateHomeDir yes
# Квота для каждого пользователя.
# 1000:10 ограничение для пользователя в 1000 файлами и 10 МБ.
# Quota 1000:10
# Путь к PID файлу (по умолчанию /var/run/pure-ftpd.pid)
# PIDFile /var/run/pure-ftpd.pid
# Если pure-ftpd скомпилирован с поддержкой pure-uploadscript, то эта опция будет
# записывать информацию о новых загузка в /var/run/pure-ftpd.upload.pipe файл
# и запускает скрипт pure-uploadscript для обработки.
# Не включать эту опцию, если не используется pure-uploadscript.
# CallUploadScript yes
# Если диск заполнен больше чем указанное знамение, загрузки файлов будут запрещены.
MaxDiskUsage 99
# Запретить возможность переименовывания файлов пользователям.
# NoRename yes
# Запрещать распространенные ошибки клиентов, такие как "chmod 0 public_html",
# которые являются допустимыми, но могут привести к тому,
# что клиенты непреднамеренно выстрелят себе в ногу.
CustomerProof yes
# Ограничение параллелизма на одного пользователя. Будет работает если pure-ftpd
# скомпилирован с --with-peruserlimits параметром.
# Первой значение — максимальное количество сессий авторизованного пользователя
# Второе значение — количество сессий анонимных пользователей.
# PerUserLimits 3:20
# Если при загрузке файла, файл существует с таким же именем, старый файл не будет ни удален, ни презаписан.
# Файл будет храниться под временным именем, и после завершения загрузки он будет атомарно переименован.
# Например, при загрузке большого PHP-скрипта веб-сервер будет продолжать обслуживать старую версию,
# а затем переключится на новую, как только будет передан весь файл.
# Эта опция несовместима с виртуальными квотами.
# NoTruncate yes
# Эта опция принимает три значения:
# 0 - отключить шифрования SSL/TLS (по умолчанию),
# 1 - принимать шифрованные и обычные подключения,
# 2 - принимать только шифрованные SSL/TLS подключения.
# Более подробно будет рассмотрено ниже в данной статье.
# TLS 1
# Набор шифров для сессий TLS.
# Набор по умолчанию является безопасным, и установка этого свойства обычно
# требуется только для снижения уровня безопасности, чтобы справится с устаревшими клиентами.
# TLSCipherSuite HIGH
# Файл сертификата для TLS.
# CertFile /etc/ssl/private/pure-ftpd.pem
# CertFileAndKey "/etc/pure-ftpd.pem" "/etc/pure-ftpd.key"
# Unix-сокет внешнего обработчика сертификатов, для TLS
# ExtCert /var/run/ftpd-certs.sock
# Использовать только IPv4, отключить IPv6.
IPV4Only yes
# Использовать только IPv6, отключить IPv4.
# IPV6Only yes
# По умолчанию используется IPv4 и IPv6.
# Добавить содержимое другого файла. Если файл не существует, директива игнорируется.
# Include additional_configuration.conf
Вносим необходимые изменения и сохраняем файл.
3. Автозагрузка и запуск Pure-FTPd
Добавляем в автозагрузку
sysrc pureftpd_enable="YES"
Или вручную открываем файл /etc/rc.conf и добавляем строку pureftpd_enable="YES"
Запускаем Pure-FTPd сервер
service pure-ftpd start
4. Создание пользователя ftp / ftpuser для Pure-FTPd
Пользователь ftp в системе c его домашним каталогом используется Pure-FTPd в качестве каталога для анонимных FTP-пользователей.
Создаем группу ftp, если она не существует
pw groupadd ftp
Создаем пользователя ftp с домашним каталогом /home/ftp/ и добавим его в группу ftp
pw useradd ftp -g ftp -d /home/ftp/ -s /usr/sbin/nologin
Создаем домашний каталог для ftp пользователя
mkdir /home/ftp/
Изменяем владельца каталога /home/ftp/ на ftp:ftp
chown ftp:ftp /home/ftp/
Попробуем подключится анонимно к FTP-серверу для проверки. Проверим что можно загружать/скачивать/удалять файлы в зависимости от настроек для анонимных пользователей.
ftp anonymous@localhost
Успешное подключение анонимного пользователя.
Если анонимный доступ не нужен и он выключен, вместо пользователя ftp рекомендовано в руководстве Pure-FTPd создать пользователя ftpuser и группу ftpgroup без домашнего каталога.
Создаем группу ftpgroup
pw groupadd ftpgroup
Создаем пользователя ftpuser
pw useradd ftpuser -g ftpgroup -d /nonexistent -s /usr/sbin/nologin
Теперь можно создавать FTP-пользователей с правами ftpuser.
5. Создание пользователя Pure-FTPd
Так как в файле конфигурации была выбрана авторизацию через внутреннюю базу пользователей PureDB, то управление пользователями происходит через pure-pw утилиту.
Посмотрим доступные команды и параметры pure-pw
pure-pw
# Краткое описание команд pure-pw, <login> - имя пользователя.
# Добавить пользователя
pure-pw useradd <login> [- различные параметры]
# Редактировать пользователя
pure-pw usermod <login> [- различные параметры]
# Удалить пользователя
pure-pw userdel <login>
# Изменить пароль пользователя
pure-pw passwd <login>
# Показать информацию о пользователе
pure-pw show <login>
# Создать или обновить базу данных
pure-pw mkdb
# Список пользователей
pure-pw list
Добавляем пользователя
pure-pw useradd web -u ftpuser -d /usr/local/www/
web – имя FTP пользователя, параметр -u указывает что подключение будет с правами пользователя ftpuser (может быть любой пользователь в системе, кроме root), параметр -d указывает что /usr/local/www/ домашний каталог пользователя.
Далее необходимо будет указать пароль для пользователя и после создания пользователя необходимо сформировать файл базы данных пользователей PureDB.
Создаем базу данных
pure-pw mkdb
По умолчанию база данных создается в /usr/local/etc/pureftpd.pdb файле. Этот же путь необходимо указывать в параметре PureDB конфигурационного файла.
Пробуем подключится к FTP серверу от созданного пользователя.
ftp web@localhost
Вводим пароль и попадаем в каталог для web пользователя.
Теперь настраиваем необходимые права доступа на каталог для безопасности и чтобы пользователь мог работать с файлами.
В примере вышел, был создан пользователь web для каталога /usr/local/www/ веб-сервера.
Настроим права доступа для каталогов сайтов которые находятся в /usr/local/www/ каталоге следующим образом:
cd /usr/local/www/
chown ftpuser:www *
chmod 750 *
ls -lh
Результат такой настройки: через FTP можно будет загружать/удалять файлы из каталогов сайтов, но при этом через веб-сервер не получится загрузить или изменить файлы. Если произойдет попытка взлома сайта, не получится загрузить вредоносные файлы или изменить файлы сайта.
6. Защищенное соединение FTP
Протокол FTP по умолчанию не использует шифрование соединения и все данные передаются в открытом виде. Это не безопасно для авторизованных пользователь, так как можно завладеть паролем пользователя и всей передаваемой информацией. Pure-FTPd поддерживает работу в режиме защищенного шифрованного соединения (FTPS).
Создаем каталог для сертификатов, если он не создан
mkdir -p /etc/ssl/private/
Создаем самоподписанный сертификат с ключом для Pure-FTPd в одном файле сроком на 3650 дней (10 лет)
openssl req -x509 -days 3650 -nodes -newkey ed25519 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Вопросы можно не заполнять оставляя поля пустыми и просто Enter нажимать.
Открываем файл конфигурации pure-ftpd.conf
nano /usr/local/etc/pure-ftpd.conf
Вносим изменение в параметры относящиеся к защищенному соединению
# Эта опция принимает три значения:
# 0 - отключить шифрования SSL/TLS (по умолчанию),
# 1 - принимать шифрованные и обычные подключения,
# 2 - принимать только шифрованные SSL/TLS подключения.
# Вклюаем только шифрованные SSL/TLS подключения.
TLS 2
# Набор шифров для сессий TLS.
# Набор по умолчанию является безопасным, и установка этого свойства обычно
# требуется только для снижения уровня безопасности, чтобы справится с устаревшими клиентами.
# TLSCipherSuite HIGH
# Файл сертификата для TLS.
# Сертификат и ключ можно объединить в один файл или использовать отдельные файлы.
CertFile /etc/ssl/private/pure-ftpd.pem
# CertFileAndKey "/etc/ssl/private/pure-ftpd.pem" "/etc/ssl/private/pure-ftpd.key"
Сохраняем файл и перезапускаем FTP сервер
service pure-ftpd restart
Пробуем подключится к FTP серверу по зашифрованному соединению, например через FileZilla клиент.
Во время соединения показывается сертификат FTP сервера. После соглашение на использование сертификата происходит успешное защищенное подключение к FTP серверу Pure-FTPd.