Регистрация файлов входящих по FTP

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Регистрация файлов входящих по FTP

Сообщение fatboy »

Уважаемые участники, нет-ли способа регистрировать в базе данных файлы, приходящие через FTP. В принципе, я ищу способ получить некое уведомление когда файл успешно залит пользователем на сервер. Есть-ли какие-либо готовые решения или идеи как этот механизм смастерить?
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Kreept
Сообщения: 107
ОС: Linux

Re: Регистрация файлов входящих по FTP

Сообщение Kreept »

Наверное только одно решение, парсить логи и если файл залит, присылать уведомление на email или записывать в БД.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Регистрация файлов входящих по FTP

Сообщение Nazyvaemykh »

а если писать логи в именованный канал? mkfifo какбе…
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Re: Регистрация файлов входящих по FTP

Сообщение fatboy »

Наверное только одно решение, парсить логи и если файл залит, присылать уведомление на email или записывать в БД.

Да, это, пожалуй, самое простое и быстро реализуемое решение... Придется часто-часто по крону проверять лог и потом писать в БД.

а если писать логи в именованный канал? mkfifo какбе…

С fifo у меня опыта совсем ничего, но, как я понимаю, получится некое подобие системы основанной на событиях (event driven), и это очень близко к тому что нужно. Один вопрос: если логи пишет сервер (серверная программа в данном случае) то нужно именно его и модифицировать чтобы он теперь в fifo писал? Или есть какой-то другой способ?
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Регистрация файлов входящих по FTP

Сообщение Ленивая Бестолочь »

fatboy писал(а):
23.02.2010 17:44
некое подобие системы основанной на событиях

не, не, не. вы создаете с помощью mkfifo "файл", в который пишутся логи.
всё, что попадает в этот "файл" идет на вход скрипту.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Re: Регистрация файлов входящих по FTP

Сообщение fatboy »

Ленивая Бестолочь писал(а):
23.02.2010 18:04
fatboy писал(а):
23.02.2010 17:44
некое подобие системы основанной на событиях

не, не, не. вы создаете с помощью mkfifo "файл", в который пишутся логи.
всё, что попадает в этот "файл" идет на вход скрипту.

но скрипту оно передается как только попадает в файл? Т.е. скрипт получает информацию от сервера и обрабатывает ее по мере поступления, но слушает fifo постоянно. Или я все-таки не понял?
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Регистрация файлов входящих по FTP

Сообщение Ленивая Бестолочь »

fatboy писал(а):
23.02.2010 18:47
но скрипту оно передается как только попадает в файл? Т.е. скрипт получает информацию от сервера и обрабатывает ее по мере поступления, но слушает fifo постоянно. Или я все-таки не понял?

ну типа того.
вот тут поглядите хороший пример:
http://www.linuxjournal.com/content/using-...ipes-fifos-bash
только я бы вставил туда sleep 1, чтобы не притормаживало.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Регистрация файлов входящих по FTP

Сообщение Nazyvaemykh »

только я бы вставил туда sleep 1, чтобы не притормаживало.

не лучше ли использовать команду read с параметром -t 0? тогда команда будет дожидаться появления строки в канале, а не выходить по таймауту…
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
Jampire
Сообщения: 163
ОС: Gentoo Linux amd64 || x86

Re: Регистрация файлов входящих по FTP

Сообщение Jampire »

fatboy писал(а):
23.02.2010 06:23
Уважаемые участники, нет-ли способа регистрировать в базе данных файлы, приходящие через FTP. В принципе, я ищу способ получить некое уведомление когда файл успешно залит пользователем на сервер. Есть-ли какие-либо готовые решения или идеи как этот механизм смастерить?

Нет ничего проще: используйте продукт pure-ftpd. Там эта функция уже реализована. Все, что вам требуется, это написать свой скрипт обработки.
Включаете в конфиге опцию:

Код: Выделить всё

UPLOADSCRIPT="путь_до_скрипта"

и запускаете сервер с опцией -o.
В ваш скрипт уже передаются следующие значения:
- UPLOAD_SIZE : the size of the file, in bytes.
- UPLOAD_PERMS : the permissions, as an octal value.
- UPLOAD_UID : the uid of the owner.
- UPLOAD_GID : the group the file belongs to.
- UPLOAD_USER : the name of the owner.
- UPLOAD_GROUP : the group name the file belongs to.
- UPLOAD_VUSER : the full user name, or the virtual user name. (127 chars max)
Имя файла находится в переменной $1.

Вот вам мой скрипт для примера:

Код: Выделить всё

#!/bin/bash

UPLOAD_DIR="/var/www/localhost/htdocs/de/files"
COPY_LEFT=".copyleft."
LOG_FILE="/var/log/ftp_de2"
DATE=`date +"%d-%m-%Y %T"`
UNIX_DATE=`date +%s`

CHECK_UPLOAD_DIR=`dirname "$1"`

echo "$CHECK_UPLOAD_DIR" | grep -q "$UPLOAD_DIR" &> /dev/null
if [ $? -eq 0 ]
then
    echo "====================================================" >> $LOG_FILE
    echo "Date: $DATE" >> $LOG_FILE
    echo "VUser: $UPLOAD_VUSER" >> $LOG_FILE
    BASENAME=`basename "$1" | sed -e 's/.part//g;s/ /_/g'`
    WITHOUT_PART=`basename "$1" | sed -e 's/.part//g'`
    DIRNAME=`dirname "$1"`
    echo "User file: $WITHOUT_PART" >> $LOG_FILE
    echo "Dir: $DIRNAME" >> $LOG_FILE
    echo "Size: $UPLOAD_SIZE" >> $LOG_FILE
    FILE=${BASENAME%%.*}
    EXT=${BASENAME##*.}
    mv "${DIRNAME}/${WITHOUT_PART}" "${DIRNAME}/${FILE}${COPY_LEFT}${EXT}"
    echo "Final file: ${FILE}${COPY_LEFT}${EXT}">> $LOG_FILE
    echo "====================================================" >> $LOG_FILE

fi

exit 0


Документация.
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Регистрация файлов входящих по FTP

Сообщение Nazyvaemykh »

для proftpd есть модуль, реализующий почти аналогичный функционал.
http://www.castaglia.org/proftpd/modules/mod_exec.html

интересно, что разработчики proftpd сочли запуск сторонних программ и скриптов угрозой для безопасности системы, поэтому в proftpd такой функционал „изкоробки” отсутствует.

возможно, это повод задуматься, а не правы ли разработчики proftpd? (:
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
Jampire
Сообщения: 163
ОС: Gentoo Linux amd64 || x86

Re: Регистрация файлов входящих по FTP

Сообщение Jampire »

Nazyvaemykh писал(а):
23.02.2010 21:26
возможно, это повод задуматься, а не правы ли разработчики proftpd? (:

Это не та "дыра" в безопасности, которая существует сама по себе. По-умолчанию в pure-ftpd также нет такой возможности: нужно принудительно запускать сервер с опцией -о и принудительно указывать путь до скрипта. А вот разработчики proftpd, похоже, решили за пользователей, что им нужно, а чего нет.
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Регистрация файлов входящих по FTP

Сообщение Ленивая Бестолочь »

господа, просьба не меряться ftp-серверами, религии у всех разные, это понятно ;-)
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Регистрация файлов входящих по FTP

Сообщение Nazyvaemykh »

Пока мы с вами мило беседовали, вышла новая версия Proftpd — 1.3.3
как я понял, mod_exec] теперь почти по умолчанию. (:
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Регистрация файлов входящих по FTP

Сообщение diesel »

Nazyvaemykh писал(а):
25.02.2010 12:15
Пока мы с вами мило беседовали, вышла новая версия Proftpd — 1.3.3
как я понял, mod_exec] теперь почти по умолчанию. (:

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

Код: Выделить всё

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
<IfModule mod_sql.c>
  SQLAuthenticate off
  SQLConnectInfo proftpd@localhost proftpd password
  SQLLog RETR,STOR transfer1
  SQLNamedQuery transfer1 INSERT "NULL, getUsersID('%U') , getFilesIDFromPath('%f'), '%b', '%h', '%a', '%m', '%T', now(), '1'" downloads
  SQLLog ERR_RETR,ERR_STOR transfer2
  SQLNamedQuery transfer2 INSERT "NULL, getUsersID('%U'), getFilesIDFromPath('%f'), '%b', '%h', '%a', '%m', '%T', now(), '0'" downloads
</IfModule>


Подробнее:
http://www.proftpd.org/localsite/Userguide...at.html#AEN1393

это если их действительно надо писать в базу.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Регистрация файлов входящих по FTP

Сообщение drBatty »

Nazyvaemykh писал(а):
23.02.2010 21:26
интересно, что разработчики proftpd сочли запуск сторонних программ и скриптов угрозой для безопасности системы, поэтому в proftpd такой функционал „изкоробки” отсутствует.

возможно, это повод задуматься, а не правы ли разработчики proftpd?

запуск сторонних скриптов - всегда угроза. потому она всегда отключена(по умолчанию). что не мешает конечно разработчикам дистрибутива и включить её... Странно, если документация к другому серверу не содержит такого-же предупреждения...
diesel писал(а):
25.02.2010 12:24
да proftpd собственно можно настроить так чтобы он в базу логи писал, пример:

ага. можно. причём и логи разделить, например лог о соединениях в один файл, лог о трансферах в другой, лог об ошибках - в БД...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Jampire
Сообщения: 163
ОС: Gentoo Linux amd64 || x86

Re: Регистрация файлов входящих по FTP

Сообщение Jampire »

drBatty писал(а):
25.02.2010 13:06
Странно, если документация к другому серверу не содержит такого-же предупреждения...

For security purposes, the server never launches any external program. It's why there is a separate daemon, that reads new uploads pushed into a named pipe by the server. Uploads are processed synchronously and sequencially. It's why on loaded or untrusted servers, it might be a bad idea to use pure-uploadscript with lenghty or cpu-intensive scripts.
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
Спасибо сказали: