Установка и настройка Pure-FTPd во FreeBSD 9.1

В помощь веб-серверу нужен FTP сервер, я долго смотрел на различные сервера.
Выбор мой остановился на Pure-FTPd, так как понятные и удобный конфигурационный файл, возможность задавать права доступа и директории в MySQL базе, безопасность.
Хотя каждый выбирает что нравится. И так мне нужна возможность изменять по ftp папку /usr/local/www/ и возможность загрузки файлов анонимно в публичную папку.
Обновляем дерево портов и переходим
cd /usr/ports/ftp/pure-ftpd
Далее установим с нужными нам параметрами make install clean
Выбираем необходимые параметры, описание параметров такие:
ANONDELETE — Разрешает анонимным пользователям удалять файлы
ANONRENAME — Разрешает анонимным пользователям переименовывать файлы
ANONRESUME — Разрешает анонимным пользователям возобновлять загрузку
DOCS — Документация
EXAMPLES — Примеры
LARGEFILE – Возможность загрузки файлов больше двух гигабайт
LDAP Support for users in LDAP directories
MYSQL - Пользователи в MySQL базе данных
PAM - PAM аутентификация
PERUSERLIMITS Per-user concurrency limits
PGSQL Пользователи в PostgreSQL базе данных
PRIVSEP — Разрешает разделять привилегии
SENDFILE — Системный вызов sendfile
THROTTLING – Разрешает устанавливать ограничение скорости
TLS — Поддержка TLS
UPLOADSCRIPT поддержка uploadscript демон
UTF8 – Поддержка кодировки UTF-8
VIRTUALCHROOT — Позволяет ограничить пользователя своим каталогом


Я не стал выбирать MySQL, так как это удобно когда надо часто менять привилегии, добавлять новых пользователей через удаленный интерфейс работы с MySQL, а мне это не нужно. Будем использовать встроенную в Pure-FTPd базу пользователей и привилегий.
Дожидаемся окончания установки. Файл конфигурации находится по адресу /usr/local/etc/pure-ftpd.conf (создаем свой или на основе pure-ftpd.conf.sample) Редактируем содержимое файла pure-ftpd.conf:
# Please don't forget to have a look at documentation at http://www.pureftpd.org/documentation.shtml for a complete list of options.

# Chroot в домашних деректориях пользователей.
ChrootEveryone yes

# Если выбрано no в ChrootEveryone, то следующие группы не Chroot, остальные будут.
# TrustedGID 100

# Совместимость с кривыми клиентами
BrokenClientsCompatibility no

# Максимальное количество одновременно подключенных пользователей.
MaxClientsNumber 50

# Запускать в фоне.
Daemonize yes

# Максимальное количество пользователей с одно IP адреса.
MaxClientsPerIP 15

# Логировать команды клиентов. Для логирования ответов сервера продублировать строчку .
VerboseLog no

# Не показывать файлы начинающиеся с точки
DisplayDotFiles yes

# Только анонимный FTP. Ставим no, так как нужна авторизация.
AnonymousOnly no

# Запретить анонимный доступ. Мне нужен анонимный доступ, ставлю no.
NoAnonymous no

# Syslog параметры (auth, authpriv, daemon, ftp, security, user, local*). Для отключения лога ставим "none". Мне логи не нужны, так как SSD. По умолчанию ftp.
SyslogFacility none

# Показывать состояние куков. Display fortune cookies.
# FortunesFile /usr/share/fortune/zippy

# Не переводить IP адреса в имена хостов.
DontResolve yes

# Время простоя после которого разрывается соеденение.
MaxIdleTime 15

# Если используется несколько методов аутентификации, то они выполняются в последовательности как указаны в файле конфигурации. Если не верный пароль, то процесс останавливается.
# LDAP файл конфигурации.
# LDAPConfigFile /etc/pureftpd-ldap.conf

# MySQL файл конфигурации.
# MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf

# Postgres файл конфигурации.
# PGSQLConfigFile /etc/pureftpd-pgsql.conf

# PureDB база данных пользователей. Её и буду использовать. Указываем адрес к файлу
PureDB /usr/local/etc/pureftpd.pdb

# Путь к сокету pure-authd.
# ExtAuth /var/run/ftpd.sock

# Использовать PAM аутентификация.
# PAMAuthentication yes

# Использовать Unix аутентификация
# UnixAuthentication yes

# 'Предел рекурсии команды ls. Перовое количество файлов, второе количество подкаталогов.
LimitRecursion 10000 8

# Можно ли создавать директории анонимным пользователям.
AnonymousCanCreateDirs no

# Если система загружена больше чем указано, анонимные пользователи не могут скачивать.
MaxLoad 4

# Диапазон портов для пассивного соединения.
# PassivePortRange 30000 30100

# Принудительный IP адрес в PASV/EPSV/SPSV ответах для NAT.
# ForcePassiveIP 192.168.0.1

# Соотношение загруженного к скаченного для анонимных пользователей.
# AnonymousRatio 1 10

# Соотношение загруженного к скаченного для всех пользователей.
# UserRatio 1 10

# Запрещает скачивать файлы с именем пользователя ftp. Файлы должны одобрены администратором. Мне это не нужно.
AntiWarez no

# IP Адрес и порт сервера. По умолчанию все IP адреса и 21 порт.
# Bind 127.0.0.1,21

# Максимальная скорость для анонимных пользователей (KB/s).
# AnonymousBandwidth 8

# Максимальная скорость для всех пользователей включая анонимных (KB/s).
# UserBandwidth 8

# Маска для создания файлов. <umask для файла>:<umask для директории>. Что бы получить umask, нужно из 777 вычесть права доступа которые хотим установить. Umask 237:027 соответствует правам: 540 для файлов и 750 для директории.
Umask 237:027

# Минимальный UID с которого пользователь будет пущен
MinUID 100

# Разрешает FXP для пользователей. Передача файла с ftp на ftp на прямую.
AllowUserFXP no

# Разрешает FXP для анонимных пользователей.
AllowAnonymousFXP no

# Пользователи не могут удалять и изменять файлы начинающиеся с точки.
ProhibitDotFilesWrite no

# Запретить чтение файлов начинающихся с точки.
ProhibitDotFilesRead no

# Некогда не перезаписывать загружаемые файлы с таким же именем, создавать файл с именем: file.1, file.2, file.3 и так далее.
AutoRename no

# Запретить загрузку файлов анонимными пользователями. Мне нужна такая возможность, поэтому no.
AnonymousCantUpload no

# Только подключенные к этому IP адресу могут быть не анонимны. Мне доступ для администрирование все локальной сети не нужен. Поэтому прописываю IP адрес сетевой карты которая смотрит в локальную сеть.
TrustedIP 192.168.0.1

# Добавлять PID в каждую строчку лога.
#LogPID yes

# Создание дополнительных логов в различных форматах, в зависимости какой нужен: apache, лог статистика, в формате W3C.
# AltLog clf:/var/log/pureftpd.log
# AltLog stats:/var/log/pureftpd.log
# AltLog w3c:/var/log/pureftpd.log

# Отключить команду chmod для пользователей
#NoChmod yes

# Позволять пользователя загружать, но не удалять файлы.
#KeepAllFiles yes

# Автоматически создавать домашнюю директорию пользователя.
#CreateHomeDir yes

# Квота для каждого пользователя. Первое количество файлов, второе размер в мегабайтах.
#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 файл.
#CallUploadScript yes

# Если диск заполнен больше чем указанное знамение, анонимные пользователи не могут загружать файлы.
MaxDiskUsage 75

# Запретить возможность переименовывания файлов пользователям.
#NoRename yes

# Если у нас хостинг используем эту опцию. Необходимо при совместной работе, оставлю все же загрузка для анонимных пользователей есть.
CustomerProof yes

# Работает если pure-ftpd скомпилирован с --with-peruserlimits. Первое максимальное количество сессий на пользователя, второе количество сессий на всех пользователей.
# PerUserLimits 3:20

# Если файлы с одинаковыми имена, то файл будет загружаться во временную папку и как только загрузится заменит старый файл. Актуально для веб-сервера когда загружаются больше php скрипты или очень маленькая скорость загрузки. Я особо полезности не вижу.
# NoTruncate yes

# Доступны следующие значения:
# 0 : SSL/TLS отключено (по умолчанию).
# 1 : Использовать шифрованные и обычные подключения.
# 2 : Использовать только SSL/TLS, включая анонимных пользователей
# Используйте только если: pure-ftpd скомпилирован с поддержкой SSL/TLS (--with-tls), существует валидный сертификат, зашли совместимые клиенты.
# TLS 1

# Список шифрования которое будет принимать SSL/TLS подключения
# TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3

# По умолчанию используется обе версии протокола. Использовать только IP четвертой версии или шестой версии. 
IPV4Only yes
# IPV6Only yes

# Работает если pure-ftpd скомпилирован с опцией --with-rfc2640. Определяет кодировку для клиентов которые не используют UTF-8
# FileSystemCharset big5
# ClientCharset big5

Теперь создадим пользователя для доступа к папке веб-сервера.
Создадим пользователя ftp во FreeBSD, его домашняя директория будет директорией анонимного ftp. У меня уже была группа ftp во FreeBSD, поэтому создадим только пользователя и его директорию.
pw useradd ftp -g ftp -d /usr/local/ftp
mkdir /usr/local/ftp

Все пользователь ftp равняется пользователю anonymous в Pure-FTPd.

Создадим пользователя web во Pure-FTPd который будет ходить с правами пользователя www с указанным паролем. После добавления всех пользователей выполнить команду pure-pw mkdb что бы создать файл pureftpd.pdb
pure-pw useradd web -u www -d /usr/local/www
# Password:
# Enter it again:
pure-pw mkdb

Добавим Pure-FTPd в загрузку (/etc/rc.conf)
pureftpd_enable="YES"

Запустим Pure-FTPd
/usr/local/etc/rc.d/pure-ftpd start

Проверим наш FTP сервер на предмет правильности выставления привилегий, возможность работы анонимным пользователями, смотрим лог файл на предмет ошибок.
Если что-то не работает разбираемся возможно где-то не так выставлены права доступа к папками, я с этим немного столкнулся.
0.10
26.08.2013 00:19