Pure-FTPd+MySQL+Web

Аватар пользователя Raven2000

Мне было необходимо установить FTP сервер с поддержкой учетных записей в MySQL гибким управлением скорости загрузки\закачки для авторизованных и анонимных пользователей, виртуальными хостами, веб-интерфейсом для клиентов и грамотным логированием для статистики (AwStats) с возможностью просмотра через веб интерфейс, и тп. Система OpenBSD и поэтому большинство FTP серверов идет фтопку (как к примеру используемый мною ProFTPD). Ну что же новое это как минимум интересно и полезно ладна хватит лирику и так поехали.

Содержание:

Порты

Из всех выбранных портов мне показался интересным Pure-ftp, он отвечал моим самым изысканным запросам. Да и выбор был невелик.

$ cd /usr/ports/
$ make search name=pure-ftp
Port:   pure-ftpd-1.0.22
Path:   net/pure-ftpd
Info:   small, easy to set up, fast and very secure FTP server
Maint:  Brad Smith <brad@comstyle.com>
Index:  net
L-deps: iconv.>=2::converters/libiconv
B-deps:
R-deps: libiconv-*:converters/libiconv
Archs:  any
 
Port:   pure-ftpd-1.0.22-ldap
Path:   net/pure-ftpd,ldap
Info:   small, easy to set up, fast and very secure FTP server
Maint:  Brad Smith <brad@comstyle.com>
Index:  net
L-deps: iconv.>=2::converters/libiconv ldap.>=2,lber:openldap-client->=2,<3:databases/openldap
B-deps:
R-deps: libiconv-*:converters/libiconv
Archs:  any
 
Port:   pure-ftpd-1.0.22-mysql
Path:   net/pure-ftpd,mysql
Info:   small, easy to set up, fast and very secure FTP server
Maint:  Brad Smith <brad@comstyle.com>
Index:  net
L-deps: iconv.>=2::converters/libiconv lib/mysql/mysqlclient.>=10::databases/mysql
B-deps:
R-deps: libiconv-*:converters/libiconv
Archs:  any
 
Port:   pure-ftpd-1.0.22-postgresql
Path:   net/pure-ftpd,postgresql
Info:   small, easy to set up, fast and very secure FTP server
Maint:  Brad Smith <brad@comstyle.com>
Index:  net
L-deps: iconv.>=2::converters/libiconv pq.>=2::databases/postgresql
B-deps:
R-deps: libiconv-*:converters/libiconv
Archs:  any

Теперь нам ясно, где находится нужный нам порт и что мы сможем с ним сделать. Нам необходим пакет с MySQL и песочницей и virtual_chroot:

$ cd net/pure-ftpd

Посмотрим, какие есть варианты сборок:

$ make show=FLAVORS
ldap mysql postgresql no_banner virtual_chroot

Описание:
Flavors:
ldap - установите поддержку LDAP как источник аутентификации
mysql - установите поддержку MySQL как источник аутентификации
postgresql - установите поддержку PostgreSQL как источник аутентификации
no_banner - установите Pure-FTPd чтобы не отображался баннер при соединении
virtual_chroot - установите Pure-FTPd с возможность следить за симлинками выходящии из песочницы

Соберем данный порт:

$ sudo env FLAVOR="mysql virtual_chroot" make install clean
~~~
--- pure-ftpd-1.0.22-mysql-virtual_chroot -------------------
In order to start Pure-FTPd at boot-time, add something like this to
/etc/rc.local:
 
if [ -x /usr/local/sbin/pure-ftpd ]; then
  echo Starting Pure-FTPd
  /usr/local/sbin/pure-ftpd -A -B -H -u1000
fi
 
===>  Cleaning for pure-ftpd-1.0.22-mysql-virtual_chroot

Конфигурация pure-ftpd.conf

Установили порт и теперь нам необходимо настроить pure-ftpd.

$ cd /usr/local/share/examples/pure-ftpd/
$ ls
pure-ftpd.conf.sample      pureftpd-mysql.conf
pure-vpopauth.pl           xml_python_processors.txt

Нас интересует два конфигурационных файла pure-ftpd.conf.sample и pureftpd-mysql.conf которые скопируем в директорию /usr/local/etc/.

$ sudo mkdir /usr/local/etc/
$ sudo cp pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf
$ sudo cp pureftpd-mysql.conf /usr/local/etc/

Приступим к конфигурации.

$ sudo chown u+w  pure-ftpd.conf pureftpd-mysql.conf
$ vi /usr/local/pure-ftpd.conf
 
############################################################
# 28.08.09 - Raven2000
#         Конфигурационный файл для pure-ftpd
#
############################################################
 
# Для запуска Pure-FTPd с этой конфигурацией
# вместо параметров командной строки, запустите
# следующую команду:
#
# /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf
#
# Пожалуйста, не забудьте заглянуть в документацию на сайте
# _http://www.pureftpd.org/documentation.shtml для получения полного списка
# параметров.
 
# Клетка каждого пользователя в его домашней директории
 
ChrootEveryone              yes
 
 
# Если в предыдущей опции было установлено положение "no", то члены следующей
# группы не будет в клетке (chroot). Все остальные будут. Если вы не хотите всех
# сажать в клетку, просто закомментируйте ChrootEveryone и TrustedGID.
 
# TrustedGID                    100
 
 
# Включить хак совместимости, для кривых клиентов
 
BrokenClientsCompatibility  no
 
 
# Максимальное число одновременных пользователей 
 
MaxClientsNumber            50
 
 
# Работать в фоновом режиме
 
Daemonize                   yes
 
 
# Максимальное количество одновременных соединений SIM-клиентов с одного
#  IP адреса
 
MaxClientsPerIP             8
 
 
# Если вы хотите логировать все команды клиента, то установите "yes". 
# Эта директива может дублировать также на лог сервер. 
 
VerboseLog                  no
 
 
# Отображение dot-файлов (показывать или нет файлы начинающиеся с точки), даже 
# если клиент не отправляет команду "-а". Рекомендую скрыть "no"
 
DisplayDotFiles             yes
 
 
# Не разрешать авторизованных пользователей - этот FTP
# предназначен только для анонимных клиентов.
 
AnonymousOnly               no
 
 
# Запретить анонимные соединения. Разрешить только для авторизованных
#  пользователей. 
 
NoAnonymous                 no
 
 
# Средства syslog (auth, authpriv, daemon, ftp, security, user, local*)
# По умолчанию "ftp". "none" - отключает логирование.
 
SyslogFacility              ftp
 
 
# Показывать сообщения (необходимо создать файл и прочитать man). Например
# приветствие сервера, правила работы или шутки.
 
# FortunesFile              /usr/share/fortune/zippy
 
 
# Не резольвить имена хостов в логах. Логи становятся менее информативными, 
# но и ресурсов требуется меньше. Установка "yes" - имеет смысл ставить на очень
# загруженных серверах, или при неработающем DNS.
 
DontResolve                 yes
 
 
# Максимальное время простоя в минутах (по окончании соединение закрывается)
# (по умолчанию = 15 минут)
 
MaxIdleTime                 15
 
 
# Файл конфигурации LDAP (смотрите README.LDAP)
 
# LDAPConfigFile                /etc/pureftpd-ldap.conf
 
 
# Файл конфигурации MySQL (смотрите README.MySQL)
 
MySQLConfigFile               /usr/local/etc/pureftpd-mysql.conf
 
 
# Файл конфигурации Postgres (смотрите README.PGSQL)
 
# PGSQLConfigFile               /etc/pureftpd-pgsql.conf
 
 
# База данных пользователей PureDB (смотрите README.Virtual-Users)
 
# PureDB                        /etc/pureftpd.pdb
 
 
# Путь к сокету pure-authd (смотрите README.Authentication-Modules)
 
# ExtAuth                       /var/run/ftpd.sock
 
 
# Если вы хотите использовать PAM аутентификацию то
# раскомментируйте следующую строку
 
# PAMAuthentication             yes
 
 
# Если нужна простая системная, Unix аутентификация (/etc/passwd), то
# раскомментируйте следующую строку
 
# UnixAuthentication            yes
 
 
# Обратите внимание, что LDAPConfigFile, MySQLConfigFile, 
# PAMAuthentication и UnixAuthentication могут использоваться только
# один раз, но они могут работать вместе. Например, если вы
# используете MySQLConfigFile, затем UnixAuthentication, то идёт запрос
# к Server SQL. Если в БД такой пользователь не найден, то пробуется 
# системный пользователь в /etc/passwd и /etc/shadow. Если проверка подлинности
# в SQL неудачна по причине неправильного пароля, то происходит
# остановка дальнейшего поиска пользователя. Методы аутентификации
# будут пользоваться в порядке в котором они были заданы
 
 
# Ограничения рекурсии команды 'ls'. Первй аргумент - максимально число файлов,
# которые будет показаны. Второе - максимальное число подкаталогов
 
LimitRecursion              2000 8
 
 
# Позволить ли анонимным пользователям создавать новые директории?
 
AnonymousCanCreateDirs      no
 
 
# Если система загружена более, чем указанное тут значение, то
# анонимным пользователям не разрешается скачивать.
 
MaxLoad                     4
 
 
# Диапазон портов для пассивного ответа соединения. Для файрвола.
 
# PassivePortRange          30000 50000
 
 
# Принудительный IP адрес в PASV/EPSV/SPSV ответах. Для NAT.
# Символические имена хостов такде приняты для шлюзов с динамическим IP адресом.
 
# ForcePassiveIP                192.168.0.1
 
 
# Соотношение upload/download для анонимных пользователей.
 
# AnonymousRatio                1 10
 
 
# Соотношение upload/download для всех пользователей.
# Эта директива не перекрывает предыдущую.
 
# UserRatio                 1 10
 
 
# "WaReZ защита". Не разрешает анонимным пользователям загружать (download)
# файлы, владельцем которых является "ftp" (как правило, файлы, загруженные
# с другими анонимными пользователями). Закачка должны быть подтверждены
# системным администратором (chown другому пользователю), прежде чем этот
# файл будет доступен для скачивания.
 
AntiWarez                   yes
 
 
# IP адрес/порт для прослушивания (по умолчанию = all IP и порт 21).
 
# Bind                      127.0.0.1,21
 
 
# Максимальная пропускная способность для анонимных пользователей в KB/s
 
# AnonymousBandwidth            8
 
 
# Максимальная пропускная способность для всех пользователей (в том числе
# анонимные) в KB/s. Используйте AnonymousBandwidth или UserBandwidth,
# использовать оба, не имеет смысла.
 
# UserBandwidth             8
 
 
# Маска для создаваемых файлов. <umask for files>:<umask for dirs>.
# 177:077 - если вы чувствуете себя параноиком.
 
Umask                       133:022
 
 
# Минимальный UID с которым пользователь будет авторизован. 
# (рекомендую указать от 1000)
 
MinUID                      100
 
 
# Разрешить передачу FXP для авторизованных пользователей.
 
AllowUserFXP                no
 
 
# Разрешить передачу FXP для анонимных и не анонимных пользователей. 
 
AllowAnonymousFXP           no
 
 
# Пользователи не могут удалять и\или изменять файлы начинающиеся с точки '.'
# даже если они их владельцы. Если TrustedGID включена, эта группа будет иметь
# доступ дот-файлам.
 
ProhibitDotFilesWrite       no
 
 
# Запретить чтение файлов начинающихся с точки '.' (.history, .ssh...)
 
ProhibitDotFilesRead        no
 
 
# Никогда не перезаписывать файлы. Когда имя, для закачиваемго файла уже
# существует, он будет автоматически переименован в file.1, file.2, file.3, ...
 
AutoRename                  no
 
 
# Запретить анонимным пользователям загружать новые файлы (no = upload разрешён)
 
AnonymousCantUpload         no
 
 
# Только подключения к этому конкретному IP адресу могут быть не анонимными. Вы
# можете использовать эту директиву чтобы открыть несколько публичных IP
# адреса для анонимного FTP, и оставить приватный, защищенный файрволом IP для
# удалённого администрирования. Вы также можете разрешить не маршрутизируемые
# локальные IP (например, 10.x.x.x) для аутентификации и оставить публичный
# для анонимных пользователей FTP-сервер на другом IP.
 
#TrustedIP                  10.1.1.1
 
 
# Если вы хотите чтобы PID добавлялся в каждую строку лога,
# то раскомемнтируйте следующую строку.
 
#LogPID                     yes
 
 
# Создать дополнительный файл журнала с  переданными файлами в Apache-подобном
# формате:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# Этот лог-файл может быть обработан программами для анализа логов апача AwStats
 
# AltLog                     clf:/var/log/pureftpd.log
 
 
# Создать дополнительный файл журнала в формате с  переданными файлами
# оптимизированном для статистических отчётов.
 
# AltLog                     stats:/var/log/pureftpd.log
 
 
#Создать дополнительный файл журнала в формате с переданными файлами в стандарте
# W3C. Этот формат совместим с большинством коммерческих анализаторов лог-файлов
 
# AltLog                     w3c:/var/log/pureftpd.log
 
 
# Запрет CHMOD команд. Пользователи не смогут менять разрешения
# на своих файлах.
 
#NoChmod                     yes
 
 
# Разрешить пользователям закачивать, но не удалять файлы.
 
#KeepAllFiles                yes
 
 
# Автоматически создавать домашние директории пользователям, если они отсутствует
 
#CreateHomeDir               yes
 
 
# Включить виртуальную квоту. Первое число - максимальное число файлов.
# Второе число - максимальный размер, в мегабайтах.
# Итак 1000:10 ограничивает каждого пользователя 1000 файлов и 10 Мб.
 
#Quota                       1000:10
 
 
# Если ваш pure-ftpd скомпилен с поддержкой standalone режима, вы можете изменить
# местоположение pid-файла. По умолчанию используется /var/run/pure-ftpd.pid
 
#PIDFile                     /var/run/pure-ftpd.pid
 
 
# Если pure-ftpd скомпилен с поддержкой pure-uploadscript,
# то этот пункт позволяет писать информацию о новых загруженных
# файлах в /var/run/pure-ftpd.upload.pipe так, что pure-uploadscript может
# прочесть их и обработать загруженный файл.
 
#CallUploadScript yes
 
 
# Эта опция полезна на серверах, где позволен upload анонимным пользователям. 
# Разрешается. Если /var/ftp находится в отдельном разделе /var, это позволяет
# сохранить свободное место и защитить файлы логов. Когда процент
# заполнения больше чем указанный тут, аплоад автоматом запрещается.
 
MaxDiskUsage               99
 
 
# Установите 'yes' в этой опции если не хотите разрешить пользователям
# переименовывать файлы.
 
#NoRename                  yes
 
 
# Включить 'customer proof'. Как обход против распространенных ошибок клиентов
# к примеру 'chmod 0 public_html'. Чтобы исключить некоторые проблемы.
 
CustomerProof              yes
 
 
# Число параллельных процессов. Он будет работать только если ftp сервер
# был собран с опцией '--with-peruserlimits'
# Формат:
# <максимум сессий на пользователей>:<максимум сеансов анонимных пользователей>
# Например, 3:20 означает, что авторизованный пользователь может иметь 3 активных
# активных сессии. А для всех анонимных пользователей - максимум 20 сессий.
 
# PerUserLimits            3:20
 
 
# Если файл загружается на сервер, и есть предыдущая его версия с тем же именем,
# то старый файл не будет ни удалён ни усечён. Загрузка будет произведена
# во временный файл и по окончании загрузки будет произведено атомарное
# переключение к новой версии файла. Например, при загрузке большого PHP
# сценария, апач будет работать со старой версией до полной загрузки
# и немедленно переключится на новый как только, он будет полностью передан
# Эта опция несовместима с виртуальными квотами.
 
# NoTruncate               yes
 
 
# Этот параметр (TLS) может принимать три значения: 
# 0 - отключить SSL/TLS шифрование (по-умолчанию).
# 1 - принимать обычные и шифрованные подключения.
# 2 - отклонять подключения которые не используют SSL/TLS, 
# включая анонимные соединения.
# Не раскомментируйте это вслепую. Проверьте, что:
# 1) Ваш сервер был собран с поддержкой SSL/TLS (--with-tls),
# 2) На месте есть действительный сертификат,
# 3) Только совместимые клиенты будут заходить.
 
# TLS                      1
 
 
# Слушать только IPv4 адреса в режиме standalone(автономном режиме)
# (т.е. IPv6 отключен). По дефолту, IPv4 и IPv6 включены.
 
# IPV4Only                 yes
 
 
# Слушать только IPv6 адрес в режиме standalone (т.е. IPv4 отключен)
# По дефолту, IPv4 и IPv6 включены. (IPv6 я обычно отключаю)
 
# IPV6Only                 yes
 
# Поддержка UTF-8 для имён файлов (RFC 2640)
# Определите кодировку для файловой системы сервера и, опционально,
# дефолтовую кодировку для клиентов, которые не используют UTF-8.
# Работает тока если pure-ftpd скомпилен с '--with-rfc2640'
 
# FileSystemCharset     big5
# ClientCharset         big5

Конфигурация pureftpd-mysql.conf

Приступим к редактированию файла соединения с сервером MySQL.

$ sudo vi /usr/local/etc/pureftpd-mysql.conf
 
##############################################
# 28.08.09 - Raven2000
# Конфигурационный файл pure-ftpd для MySQL.
# Смотрите README.MySQL для объяснений.
#
##############################################
 
 
# Опционально: Имя или IP адрес MySQL-сервера. Не задавать этот
# пункт, если используется локальный unix сокет.
 
MYSQLServer     127.0.0.1
 
 
# Опционально: Порт MySQL. Не задавать этот
# пункт, если используется локальный unix сокет.
 
MYSQLPort       3306
 
 
# Опционально: Задаётся имя сокета и местоположения mysql.sock если MySQL сервер
# работает на этом же узеле.
 
MYSQLSocket     /tmp/mysql.sock
 
 
# Обязательно: пользователь, которым работаем с MySQL.
 
MYSQLUser       root
 
 
# Обязательно: пароль пользователя, от которого работаем в MySQL.
 
MYSQLPassword   rootpw
 
 
# Обязательно: БД с которой работаем.
 
MYSQLDatabase   pureftpd
 
 
# Mandatory : how passwords are stored
# Valid values are : "cleartext", "crypt", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "md5" *and* "password"
 
MYSQLCrypt      cleartext
 
 
# В последующих директивах части строк заменены, до
# выполнения запроса:
#
# \L заменяется именем пользователя который логинится.
# \I заменяется IP адресом сервера, на который заходит пользователь
# \P заменяется номером порта с которым соединился пользователь.
# \R заменяется IP адресом пользователь.
# \D заменяется IP адресом пользователь, в виде long decimal number
#
# Очень сложные запросы могут быть выполнены с помощью совмещения этих строк,
 
# Запрос на получение пароля из БД:
 
MYSQLGetPW      SELECT Password FROM users WHERE User="\L"
 
 
# Запросов на получение системного имени пользователя, или UID
 
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"
 
 
# Опционально: default UID вместо запроса на его извлечение MYSQLGetUID
 
#MYSQLDefaultUID 1000
 
 
# Запрос на получение имени группы или gid
 
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"
 
 
# Опционально: default GID - вместо запроса MYSQLGetGID
 
#MYSQLDefaultGID 1000
 
 
# Запрос на получения домашней директории
 
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L"
 
 
# Опционально: Запрос на максимальное число файлов у пользователя
# Pure-FTPd должен был собран с поддержкой виртуальных квот.
 
# MySQLGetQTAFS  SELECT QuotaFiles FROM users WHERE User="\L"
 
 
# Опционально: запрос на квоту использования диска (виртуальных квот)
# Число должно быть в мегабайтах.
# Pure-FTPd должен был собран с поддержкой виртуальных квот.
 
# MySQLGetQTASZ  SELECT QuotaSize FROM users WHERE User="\L"
 
 
# Опционально: Коэффициенты. Запросы на соотношение download/upload.
# Сервер должен быть собран с ratio поддержкой.
 
# MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L"
# MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"
 
 
# Опционально: Полосой пропускания для пользователя. Сервер должен быть
# собран с throttling  опцией. Значение в KB/s .
 
# MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
# MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
 
# Разрешить расширение "~" . НИКОГДА не делайте этого, если:
# 1) Вы точно знаете что делаете.
# 2) Совпадают реальные и виртуальные юзеры.
 
# MySQLForceTildeExpansion 1
 
 
# Если Вы обновили таблицы до транзакционных (Gemini,
# BerkeleyDB, Innobase...), можно включить транзакции SQL
# Оставьте закомменченым, если используются MyISAM базы данных,
# или старая версия MySQL (< 3.23.x).
 
# MySQLTransactions On

Работа с СУБД

Установка MySQL для OpenBSD.
Теперь будем подключать Pure-ftp к MySQL для начала желательно прочитать:

$ more /usr/local/share/doc/pure-ftpd/README.MySQL

Как сказано в README.MySQL создадим sql файл для создания запроса в БД.

$ cat table_user.sql
CREATE TABLE users (
  User VARCHAR(16) BINARY NOT NULL,
  Password VARCHAR(64) BINARY NOT NULL,
  Uid INT(11) NOT NULL default '-1',
  Gid INT(11) NOT NULL default '-1',
  Dir VARCHAR(128) BINARY NOT NULL,
  PRIMARY KEY  (User)
);

И файл для создания пользователя (в дальнейшем лучше написать скрипт):

$ cat user_ftp.sql
INSERT INTO `users` VALUES ('Raven2000', '12345', 1000, 1000, '/home/Raven2000');

Далее (пример) как вы уже откорректировали под себя конфигурационный файл pureftpd-mysql.conf:

$ sido vi /usr/local/etc/pureftpd-mysql.conf
MYSQLServer     127.0.0.1
#MYSQLPort       3306
MYSQLSocket     /tmp/mysql.sock
MYSQLUser       user_pureftpd
MYSQLPassword   user_pureftpd_pw
MYSQLDatabase   homenet_pureftpd
MYSQLCrypt      cleartext
MYSQLGetPW      SELECT Password FROM users WHERE User="\L"
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L"

Создадим БД и пользователя имеющего полные права на созданную БД.

$ sudo mysqladmin -h 127.0.0.1 --user=root --password=root_pw create homenet_pureftpd
$ sudo mysql -h 127.0.0.1 --user=root --password=root_pw -e"GRANT ALL ON homenet_pureftpd.* TO user_pureftpd@127.0.0.1 IDENTIFIED BY 'user_pureftpd_pw'" homenet_pureftpd

Теперь создадим структуру БД и добавим пользователя FTP:

$ sudo mysql -h 127.0.0.1 --user=root --password=root_pw
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.37-log OpenBSD port: mysql-server-5.1.37
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql> use  homenet_pureftpd;
Database changed
mysql> source /usr/local/etc/table_user.sql;
Query OK, 0 rows affected (0.00 sec)
 
mysql> source /usr/local/etc/user_ftp.sql;
Query OK, 1 row affected (0.00 sec)

Проверим:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| homenet_pureftpd   |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.02 sec)
 
mysql> use homenet_pureftpd;
Database changed
mysql> show tables from homenet_pureftpd;
+----------------------------+
| Tables_in_homenet_pureftpd |
+----------------------------+
| users                      |
+----------------------------+
1 row in set (0.02 sec)
 
mysql> select user,password,dir,uid,gid from users;
+-----------+----------+-----------------+------+------+
| user      | password | dir             | uid  | gid  |
+-----------+----------+-----------------+------+------+
| Raven2000 | 12345  | /home/Raven2000 | 1000 | 1000 |
+-----------+----------+-----------------+------+------+
1 row in set (0.00 sec)

Все в порядке движемся дальше.

Директории и anonymous

Для начала определимся, что нам необходимо от ftp и как все должно выглядеть - базовая настройка.

  • Работа с авторизированными пользователями
    • Дать возможность полной работы со своими файлами и директориями (своя домашняя директория на сервере)
  • Работа с анонимными пользователями
    • Дать возможность скачивать (download) файлы из общей директории
    • Дать возможность закачивать (upload) файлы в специальную директорию upload
    • Запретить скачивание (download) из директории upload (те загрузили - молодцы я приду, проверю и вынесу в общую директорию. Не хочу чтобы мой добрый сервис использовали в качестве распространении порно и вареза)

Создаем пользователя ftp для работы не авторизированных - анонимных пользователей. Эта учетная запись не должна использовать пароль. Так же нам необходимо создать домашнюю директорию. И к слову говоря этому пользователю не нужно быть в учетных записях БД MySQL
Добавим псевдо shells для анонимных пользователей:

$ sudo echo /usr/bin/false >> /etc/shells

Добавим учетную запись и директорию пользователя. Анонимным пользователям не нужна учетка в БД.

$ sudo adduser
Use option ``-silent'' if you don't want to see all warnings and questions.
 
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
 
Ok, let's go.
Don't worry about mistakes. There will be a chance later to correct any input.
Enter username []: ftp
Enter full name []: anonymous ftp
Enter shell csh false ksh nologin sh [ksh]: false
Uid [1001]: Enter
Login group ftp [ftp]: Enter
Login group is ``ftp''. Invite ftp into other groups: guest no
[no]: no
Login class authpf daemon default mysql staff [default]: Enter
Enter password []: Enter
Set the password so that user cannot logon? (y/n) [n]: y
 
Name:        ftp
Password:    ****
Fullname:    anonymous ftp
Uid:         1001
Gid:         1001 (ftp)
Groups:      ftp
Login Class: default
HOME:        /home/ftp
Shell:       /usr/bin/false
OK? (y/n) [y]: y
Added user ``ftp''
Copy files from /etc/skel to /home/ftp
Add another user? (y/n) [y]: n
Goodbye!

Создадим директории и установим необходимые права:

  • /home/ftp - это основная директория. Она должна принадлежать root и иметь разрешение 755 (или для фанов 555)
  • /home/ftp/pub - иногда делают каталог pub это стандартный каталог для файлов которыми вы хотите поделится. Она должна иметь разрешение 755 (или для фанов 555)
  • /home/ftp/upload - это стандартный каталог (можете называть и incoming) для загрузки файлов анонимными пользователями. Она должна иметь разрешение 755 (или для фанов 555)

Создадим необходимые директории и укажем права:

$ sudo mkdir -p /home/ftp/upload
$ sudo chown -R root:ftp /home/ftp
$ sudo chmod -R 755 /home/ftp
$ sudo chmod -R 1775 /home/ftp/upload

И теперь все анонимные пользователи смогут загружать все свои файлы в директорию /home/ftp/upload (но от туда уже им не удалить и не скачать ;)). Далее администратор скопирует нужный и удалит не нужные файлы в подходящую директорию и будет возможность анонимным пользователям скачать их.

Запуск

Для запуска при перезагрузке системы добавляем в файл /etc/rc.local следующее

$ cat /etc/rc.local
# Pure-ftp
if [ -x /usr/local/sbin/pure-config.pl ]; then
  echo 'Starting Pure-FTPd'; /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf
fi

Запустим Pure-FTPd и проверим его работоспособность:

$ sudo /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf
Running: /usr/local/sbin/pure-ftpd -A -c50 -B -C8 -D -fftp -H -I15 -lmysql:/usr/local/etc/pureftpd-mysql.conf -L2000:8 -m4 -s -U133:022 -u999 -g/var/run/pure-ftpd.pid -k99 -Z -4
$ ps -ax |grep ftp
21284 ??  Ss      0:00.00 pure-ftpd: -pure-ftpd (SERVER) (pure-ftpd)

Смотрим кто и что качает:

$ sudo /usr/local/sbin/pure-ftpwho
 
+------+---------+-------+------+-------------------------------------------+
| PID  |  Login  |For/Spd| What |                 File/IP                   |
+------+---------+-------+------+-------------------------------------------+
|26663 | ftp     | 00:00 |  UL  | adminstudioconfigurationmanagered.exe|
|  ''  |    ''   |   7M/s|  ''  | ->                   chief_it.***.local |
+------+---------+-------+------+-------------------------------------------+
 
$ sudo /usr/local/sbin/pure-ftpwho
 
+------+---------+-------+------+-------------------------------------------+
| PID  |  Login  |For/Spd| What |                 File/IP                   |
+------+---------+-------+------+-------------------------------------------+
|31777 | Raven2000| 00:00 |  UL  | adminstudioconfigurationmanagered.exe|
|  ''  |    ''   |   8M/s|  ''  | ->                   chief_it.***.local |
+------+---------+-------+------+-------------------------------------------+

Попробуем зайти с консоли:

$ ftp 127.0.0.1
Connected to 127.0.0.1.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 09:21. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (127.0.0.1:Raven2000): Raven2000
331 User Raven2000 OK. Password required
Password:
230-User Raven2000 has group access to:  wheel      Raven2000
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" is your current location
ftp> ls
150 Accepted data connection
drwxr-xr-x    8 Raven2000  wheel             512 Aug 31 15:25 net2ftp
-rw-r--r--    1 Raven2000  wheel             223 Aug 31 15:32 db.txt
226-Options: -l
226 2 matches total
ftp> exit;
?Invalid command.
ftp> exit
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.

В лог файле

$ tail -3 /var/log/xferlog
Sep  1 09:21:06 madcat pure-ftpd: (?@127.0.0.1) [INFO] New connection from 127.0.0.1
Sep  1 09:21:12 madcat pure-ftpd: (?@127.0.0.1) [INFO] Raven2000 is now logged in
Sep  1 09:21:25 madcat pure-ftpd: (Raven2000@127.0.0.1) [INFO] Logout.

Virtual-Users

Добавить Virtual-Users пользователя можно так

$ sudo pure-pw useradd Vasia -m -u ftp -d /home/ftp

Прочтите README.Virtual-Users

Web интерфейс

Использовать будем проверенный временем net2ftp. Его удобно пилить до нужного состояния.

1 - Скачиваем последнюю версию и распаковываем в директорию веб сервера.
2 - Изменим права на директорию /temp как 777.

$ chmod 777 temp/

3 - Изменим настройки в файле settings.inc.php
<?php
//  28.08.09 - Raven2000
// -----------------------------------------------------------------------------
// Базовые настройки
// -----------------------------------------------------------------------------
 
// Введите ваш адрес электронной почты 
// Это используется в качестве адреса "от" при отправке файлов вложений
$net2ftp_settings["email_feedback"] = "webmaster@enter-your-domain-here.com";
 
// Язык и скин по умолчанию (смотрите в директории /languages 
// и /skins чтобы посмотреть имеющиеся)
$net2ftp_settings["default_language"] = "ru";
$net2ftp_settings["default_skin"]     = "blue";
 
// Введите адрес вашей страницы помощи, форума или тикет системы. Добавится
// ссылка в низу страницы. Если у вас нет ничего то оставьте строку пустой.
$net2ftp_settings["help_text"] = "";
$net2ftp_settings["help_link"] = "";
 
// Рапорт PHP об ошибках
//$net2ftp_settings["error_reporting"] = "NONE";
$net2ftp_settings["error_reporting"] = "standard";
//$net2ftp_settings["error_reporting"] = "ALL";
 
// Фиксим прозрачные PNG изображения для IE
$net2ftp_settings["fix_png"] = "yes";
 
// MD5 шифрование строки (замените их для лучшей безопастности)
$net2ftp_settings["encryption_string"] = "462E16CB7C3F369BD9F4DBEE0A926F4FFB3";
 
 
// -----------------------------------------------------------------------------
// Администраторская панель имя пользователя и пароль
// Если пароль не задан то панель не будет доступна.
// -----------------------------------------------------------------------------
 
$net2ftp_settings["admin_username"] = "admin";
$net2ftp_settings["admin_password"] = "admin_pw";
 
 
// -----------------------------------------------------------------------------
// Сообщение в браузере
// -----------------------------------------------------------------------------
 
$net2ftp_settings["message_browse"] = "Welcome to the FTP server!";
 
 
// -----------------------------------------------------------------------------
// MySQL БД опционально. Может быть использована: для логирования пользователей, 
// проверка использования сетевых и серверных ресурсов (объем передачи данных 
// и время выполнения скрипта), а так же проверка домашней директории
// пользователей
// -----------------------------------------------------------------------------
 
// MASTER ПАРАМЕТР который перекрывает другие параметры ниже: использования БД?
$net2ftp_settings["use_database"] = "yes"; // "yes" или "no" (по умолчанию)
 
// Введите MySQL настройки 
$net2ftp_settings["dbusername"] = "user_net2ftp";
$net2ftp_settings["dbpassword"] = "user_pureftpd_pw";
$net2ftp_settings["dbname"]     = "homenet_net2ftp";
$net2ftp_settings["dbserver"]   = "localhost"; // в основном "localhost" 
// Переключатель различных типов журналов или выключатель
$net2ftp_settings["log_access"] = "yes";
$net2ftp_settings["log_error"]  = "yes";
 
// Автоматическое удаление журналов старше Х дней.
$net2ftp_settings["log_length_days"] = 31; // число дней
 
 
// -----------------------------------------------------------------------------
// Вход в систему регистратора
// -----------------------------------------------------------------------------
 
$net2ftp_settings["use_syslog"] = "no";
$net2ftp_settings["syslog_priority"] = LOG_NOTICE;
$net2ftp_settings["syslog_facility"] = LOG_MAIL;
$net2ftp_settings["syslog_ident"] = "net2ftp";
 
 
// -----------------------------------------------------------------------------
// Файлы размором больше чем тут указанны быдут исключенны из:
// upload, download, copy, move, search, view, edit
// -----------------------------------------------------------------------------
 
// 100 MB в байтах, ( по умолчанию 10 MB)
$net2ftp_settings["max_filesize"]  = "100000000";
 
// Примечание: Если вы хотите, чтобы закачивали большие файлы.
// Вам придется отредактировать следующие параметры:
//       1 - в файле php.ini: upload_max_filesize, post_max_size,
//           max_execution_time, memory_limit
//       2 - в файле  php.conf: LimitRequestBody
 
 
// -----------------------------------------------------------------------------
// Параметры потребление ресурсов сервера
// -----------------------------------------------------------------------------
 
// Переключатель проверки потребления или выключить.
$net2ftp_settings["check_consumption"] = "yes";
 
// Максимальная скорость передачи данных объемом в день (в байтах)
$net2ftp_settings["max_consumption_ipaddress_datatransfer"] = 50000000; // на IP
$net2ftp_settings["max_consumption_ftpserver_datatransfer"] = 50000000; // на FTP
 
// Максимальное время исполнения скрипта в день (в секундах)
$net2ftp_settings["max_consumption_ipaddress_executiontime"] = 1500; // на IP
$net2ftp_settings["max_consumption_ftpserver_executiontime"] = 1500; // на FTP
 
// Максимальное количество FTP серверов, которые могут быть доступна в один день.
$net2ftp_settings["max_consumption_ipaddress_nr_of_ftpservers"] = 50; // на IP
 
// Проверка домашней директории пользователя? 
$net2ftp_settings["check_homedirectory"] = "yes";
 
 
// -----------------------------------------------------------------------------
// Ничего не изменяйте НИЖЕ ЭТОЙ ЛИНИИ 
// -----------------------------------------------------------------------------
 
$net2ftp_settings["application_version"] = "0.98";
$net2ftp_settings["application_build_nr"] = "45";
 
// Это net2ftp.com или net2ftp установка
$net2ftp_settings["net2ftpdotcom"] = "no";
 
// Реклама Google Adsense 
// Не показан при использовании HTTPS, чтобы избежать предупреждений при 
// каждом перзагрузке страницы 
$net2ftp_settings["show_google_ads"] = "no";
 
?>

3.1 - Изменим настройки в файле settings_authorizations.inc.php
В этом файле настраиваем скрипт для работы с фтп серверами и дополнительными разрешениями.

<?php
// 28.08.09 - Raven2000
// -----------------------------------------------------------------------------
// Проверка авторизации?
// Значение да или нет.
// -----------------------------------------------------------------------------
$net2ftp_settings["check_authorization"] = "yes";
 
 
// -----------------------------------------------------------------------------
// Разрешенные FTP сервера
// Установите значение "ALL" или сделайте список серверов доступных к работе 
// с скриптом.
// Виды настроек:
//    - При выборе значения "ALL" то в поле входа в FTP сервер будет показана 
//      строка для заполнения
//    - если введено один сервер, то поле входа в FTP сервер не будет показан 
//    - если введено более чем один сервер, то сервер FTP нужно будет выбрать
//      из выпадающего сервера
// -----------------------------------------------------------------------------
 
//$net2ftp_settings["allowed_ftpservers"][1] = "ALL";
//$net2ftp_settings["allowed_ftpservers"][1] = "localhost";
//$net2ftp_settings["allowed_ftpservers"][2] = "192.168.1.1";
//$net2ftp_settings["allowed_ftpservers"][3] = "ftp.mydomain2.org";
$net2ftp_settings["allowed_ftpservers"][3] = "ftp.homenet.local";
 
// -----------------------------------------------------------------------------
// Заблокированные FTP сервера
// Установить первому NONE, или введите список запрещенных серверов
// -----------------------------------------------------------------------------
 
$net2ftp_settings["banned_ftpservers"][1] = "NONE";
//$net2ftp_settings["banned_ftpservers"][1] = "127.0.0.1";
//$net2ftp_settings["banned_ftpservers"][2] = "192.168.1.2";
//$net2ftp_settings["banned_ftpservers"][3] = "192.168.1.3";
 
 
// -----------------------------------------------------------------------------
// Разрешённый порт FTP сервера
// Установите значение ALL, или конкретный порт
// -----------------------------------------------------------------------------
 
//$net2ftp_settings["allowed_ftpserverport"] = "ALL";
$net2ftp_settings["allowed_ftpserverport"] = "21";
 
 
// -----------------------------------------------------------------------------
// Разрешённые IP адреса или IP диапазон адресов с которых пользователь может 
// подключатся
// Установите первое значение ALL, или список разрешенных IP адресов
// -----------------------------------------------------------------------------
 
$net2ftp_settings["allowed_addresses"][1] = "ALL";
//$net2ftp_settings["allowed_addresses"][1] = "127.0.0.1";   // IP address
//$net2ftp_settings["allowed_addresses"][2] = "192.168.100"; // IP address range
//$net2ftp_settings["allowed_addresses"][3] = "10.0.0.1";
 
 
// -----------------------------------------------------------------------------
// Заблокированные IP адреса или диапазон IP адресов с которых запрещено работать
// Установите первое значение ALL, или список запрещенных IP адресов
// -----------------------------------------------------------------------------
 
$net2ftp_settings["banned_addresses"][1] = "NONE";
//$net2ftp_settings["banned_addresses"][1] = "127.0.0.1";
//$net2ftp_settings["banned_addresses"][2] = "192.168.1.2";
//$net2ftp_settings["banned_addresses"][3] = "192.168.1.3";
 
 
// -----------------------------------------------------------------------------
// Запрещенные директории и имена файлов
// Установите первое значение NONE, или список запрещенных слов
// -----------------------------------------------------------------------------
 
//$net2ftp_settings["banned_keywords"][1] = "NONE";
$net2ftp_settings["banned_keywords"][1] = "paypal";
$net2ftp_settings["banned_keywords"][2] = "ebay";
$net2ftp_settings["banned_keywords"][3] = "wachoviabank";
$net2ftp_settings["banned_keywords"][4] = "wellsfargo";
$net2ftp_settings["banned_keywords"][5] = "bankwest";
$net2ftp_settings["banned_keywords"][6] = "hsbc";
$net2ftp_settings["banned_keywords"][7] = "halifax-online";
$net2ftp_settings["banned_keywords"][8] = "lloydstsb";
$net2ftp_settings["banned_keywords"][9] = "egg.com";

3.2 - Изменим настройки в файле settings_screens.inc.php
.
В этом файле тонко настраивается скрипт под текущие нужды администратора, что показать или убрать с глаз пользователей. Я стараюсь убрать все, что мне не нужно.

<?php
// 28.08.09 - Raven2000
// -----------------------------------------------------------------------------
// Функция просмотра в браузере - Верхее левое
// Укажите какие функции должны быть включены или выключены.
// -----------------------------------------------------------------------------
 
// Создание новой директории
$net2ftp_settings["functionuse_newdir"] = "yes";
 
// Создание нового файла 
$net2ftp_settings["functionuse_newfile"] = "yes";
 
// Закачка (закачать, закачать и распаковать)
$net2ftp_settings["functionuse_upload"] = "yes";
 
// Закачать через Java
$net2ftp_settings["functionuse_jupload"] = "no";
 
// Закачать через Flash
$net2ftp_settings["functionuse_swfupload"] = "no";
 
// Создание веб-сайта из готового HTML шаблонов 
$net2ftp_settings["functionuse_easyWebsite"] = "no";
 
// Закладки на странице 
$net2ftp_settings["functionuse_bookmark"] = "yes";
 
// Установить функции
$net2ftp_settings["functionuse_install"] = "yes";
 
// Дополнительные функции 
$net2ftp_settings["functionuse_advanced"] = "yes";
 
 
// -----------------------------------------------------------------------------
// Функция просмотра в браузере - Верхее правое
// Укажите какие функции должны быть включены или выключены.
// -----------------------------------------------------------------------------
 
// Копирования, перемещения и удаления директорий и файлов
$net2ftp_settings["functionuse_copy"]   = "yes";
$net2ftp_settings["functionuse_move"]   = "yes";
$net2ftp_settings["functionuse_delete"] = "yes";
 
// Переименовать 
$net2ftp_settings["functionuse_rename"] = "yes";
 
// Изменить права (chmod)
$net2ftp_settings["functionuse_chmod"] = "yes";
 
// Zip-and-download
$net2ftp_settings["functionuse_downloadzip"] = "yes";
 
// Unzip
$net2ftp_settings["functionuse_unzip"] = "yes";
 
// Zip-and-save, zip-and-email
$net2ftp_settings["functionuse_zip"] = "yes";
 
// Подсчет размера
$net2ftp_settings["functionuse_calculatesize"] = "yes";
 
// Строка поиска
$net2ftp_settings["functionuse_findstring"] = "yes";
 
 
// -----------------------------------------------------------------------------
// Функция просмотра в браузере - уровень строк
// Укажите какие функции должны быть включены или выключены.
// -----------------------------------------------------------------------------
 
// Скачать файл
$net2ftp_settings["functionuse_downloadfile"] = "yes";
 
// Просмотр файла
$net2ftp_settings["functionuse_view"] = "yes";
 
// Редактирование файла 
$net2ftp_settings["functionuse_edit"] = "yes";
 
// Обновить файл (бета-функция) 
$net2ftp_settings["functionuse_update"] = "no";
 
// Открыть файл
$net2ftp_settings["functionuse_open"] = "yes";
 
?>

4 - Создадим БД и таблицы, а так же пользователя для работы net2ftp с БД.

$ sudo mysqladmin -h 127.0.0.1 --user=root --password=root_pw create homenet_net2ftp
$ sudo mysql -h 127.0.0.1 --user=root --password=root_pw -e"GRANT ALL ON homenet_net2ftp.* TO user_net2ftp@127.0.0.1 IDENTIFIED BY 'user_pureftpd_pw'" homenet_net2ftp

В директории net2ftp есть файл create_tables.sql оттуда возьмем структуру.
Теперь создадим структуру БД:

$ sudo mysql -h 127.0.0.1 --user=root --password=root_pw
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.37-log OpenBSD port: mysql-server-5.1.37
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql> use  homenet_net2ftp;
Database changed
mysql> source /home/Raven2000/net2ftp/create_tables.sql;
Query OK, 0 rows affected, 1 warning (0.01 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.02 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.01 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
Query OK, 0 rows affected, 1 warning (0.01 sec)
 
mysql> show tables from homenet_net2ftp;
+-----------------------------------+
| Tables_in_homenet_net2ftp         |
+-----------------------------------+
| net2ftp_log_access                |
| net2ftp_log_consumption_ftpserver |
| net2ftp_log_consumption_ipaddress |
| net2ftp_log_error                 |
| net2ftp_users                     |
+-----------------------------------+
5 rows in set (0.02 sec)
mysql> exit;
Bye

Скриншоты:

Заключение

Вот и все теперь пользователи работают и я все вижу, логирую, управляю, смотрю статистику (про AWStats, MySQL, Apache будет отдельная статья) и отдыхаю.

Ссылки

  • _http://www.pureftpd.org/project/pure-ftpd
  • _http://ru.wikipedia.org/wiki/Pure-FTPd
  • _http://openports.se/net/pure-ftpd

Дополнительные материалы
Ваша оценка: Нет Средняя: 4 (5 голосов)

а где можно задать расширение

а где можно задать расширение которые можно закачивать на ФТП или наоборот - запретить закачивать?

RE:а где можно задать расширение

В самом конфиге фтп я такого не видел. Скорее всего надо будет писать скрипт.

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

Pure-FTPd+MySQL+Web

Не могли бы вы поподробнее описать настройку Web интерфейса. Я никогда этого не делал и возникает масса "дурацких" вопросов. На Openbsd директория
Web сервера это /var/www? Я так понимаю надо было установить пакеты PHP. Надо ли что-то изменять в httpd.conf или в php.ini или ещё где-то? Что из папки net2ftp надо положить в директорию Web сервера или всю папку? А то всё работает кроме Web.

RE:Pure-FTPd+MySQL+Web

Пожалуйста задайте вопрос в соответствующей ветке форума.

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

Отлично , спасибо за перевод

Отлично , спасибо за перевод на русский конфига, токо что ставил сравнил дифом дефольтный конфиг , все тоже самое, ничего нового,в синтаксисе :)
буду осваивать как замену proftpd

Хранение аккаунтов pure-ftpd в файлах формата puredb (ftp)
http://www.opennet.ru/base/net/pureftpd_puredb.txt.html

Web интерфейс для Pure-FTPd

Open source интерфейс для управления Pure-FTPd+MySQL

http://pure-ftpd-webui.org/

Настройка конфига под AwStats

Добрый день.
Подскажите как поправить файлы конфигурации, чтобы можно было смотреть статистику по Pure-ftpd в AwStats.
Строка AltLog clf:/var/log/pureftpd.log у меня разкомментирована, но файл /var/log/pureftpd.log не пишется, а awstats не парсит стандартный лог, который пишется в /var/log/xferlog

Помогите

Уважаемый автор помогите мне с настройкой и установкой.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <em> <b> <u> <i> <strong> <font> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike> <caption>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>, <apache>, <bash>, <c>, <cpp>, <mysql>, <perl>, <php>, <python>, <text>. The supported tag styles are: <foo>, [foo].
  • Glossary terms will be automatically marked with links to their descriptions. If there are certain phrases or sections of text that should be excluded from glossary marking and linking, use the special markup, [no-glossary] ... [/no-glossary]. Additionally, these HTML elements will not be scanned: a, abbr, acronym, code, pre.

Подробнее о форматировании

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
1 + 12 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.

Последние статьи

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer