пятница, 20 июля 2012 г.

Proftpd xferlog в mysql

Собственно, задача стояла записывать успешную/неспешную загрузку файлов пользователями proftpd. Установка сервера тривиальна (yum install proftpd proftpd-mysql) при подключении нужных репозиториев, например CentAlt. Сами пользователи находятся в БД mysql.

Создаем таблицу со следующими полями (думаю названия говорят сами за себя и не нуждаются в комментариях):

CREATE TABLE `ftpxferlog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(60) NOT NULL DEFAULT '',
  `filename` text,
  `size` bigint(20) DEFAULT NULL,
  `ip` tinytext,
  `action` tinytext,
  `duration` tinytext,
  `field_localtime` timestamp NULL DEFAULT NULL,
  `success` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `idx_usersucc` (`username`,`success`)
) ENGINE=InnoDB;

Можете создать пользователя, который может вносить информацию в эту таблицу
(GRANT INSERT ON DB.ftpxferlog TO SOME_USER@localhost identified by 'SOME_PASS';
FLUSH PRIVILEGES;)
В моем случае такого отдельного пользователя не потребовалось, поскольку я создал одного пользователя со всеми правами для конкретной базы данных;

В конфигурационном файле изменяем/добавляем:

#Указываем информацию для соединения с базой данных.
SQLConnectInfo  DB@localhost USERNAME PASSWORD

# Директива используется для логгирования информации в таблицу. Можно указывать несколько директив, что я буду делать.
# Первый параметр - список FTP-команд, для которых будет срабатывать логгирование.
# Второй параметр - название запроса, определенного директивой SQLNamedQuery
SQLLog RETR,STOR transfer1
SQLNamedQuery transfer1 INSERT "NULL, '%u', '%f', '%b', '%a', '%m', '%T', now(), '1'" ftpxferlog

SQLLog ERR_RETR,ERR_STOR transfer2
SQLNamedQuery transfer2 INSERT "NULL, '%u', '%f', '%b', '%a', '%m', '%T', now(), '0'" ftpxferlog

Литература:
http://www.iezzi.ch/archives/110

Комментариев нет:

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