Регистрация файлов входящих по FTP
Модераторы: SLEDopit, Модераторы разделов
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Регистрация файлов входящих по FTP
Уважаемые участники, нет-ли способа регистрировать в базе данных файлы, приходящие через FTP. В принципе, я ищу способ получить некое уведомление когда файл успешно залит пользователем на сервер. Есть-ли какие-либо готовые решения или идеи как этот механизм смастерить?
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
Kreept
- Сообщения: 107
- ОС: Linux
Re: Регистрация файлов входящих по FTP
Наверное только одно решение, парсить логи и если файл залит, присылать уведомление на email или записывать в БД.
-
Nazyvaemykh
- Сообщения: 438
- Статус: Подопытный участник
Re: Регистрация файлов входящих по FTP
а если писать логи в именованный канал? mkfifo какбе…
¡ Страсть к разрушению есть творческая страсть!
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: Регистрация файлов входящих по FTP
Наверное только одно решение, парсить логи и если файл залит, присылать уведомление на email или записывать в БД.
Да, это, пожалуй, самое простое и быстро реализуемое решение... Придется часто-часто по крону проверять лог и потом писать в БД.
а если писать логи в именованный канал? mkfifo какбе…
С fifo у меня опыта совсем ничего, но, как я понимаю, получится некое подобие системы основанной на событиях (event driven), и это очень близко к тому что нужно. Один вопрос: если логи пишет сервер (серверная программа в данном случае) то нужно именно его и модифицировать чтобы он теперь в fifo писал? Или есть какой-то другой способ?
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Регистрация файлов входящих по FTP
не, не, не. вы создаете с помощью mkfifo "файл", в который пишутся логи.
всё, что попадает в этот "файл" идет на вход скрипту.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: Регистрация файлов входящих по FTP
Ленивая Бестолочь писал(а): ↑23.02.2010 18:04
не, не, не. вы создаете с помощью mkfifo "файл", в который пишутся логи.
всё, что попадает в этот "файл" идет на вход скрипту.
но скрипту оно передается как только попадает в файл? Т.е. скрипт получает информацию от сервера и обрабатывает ее по мере поступления, но слушает fifo постоянно. Или я все-таки не понял?
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Регистрация файлов входящих по FTP
ну типа того.
вот тут поглядите хороший пример:
http://www.linuxjournal.com/content/using-...ipes-fifos-bash
только я бы вставил туда sleep 1, чтобы не притормаживало.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
Nazyvaemykh
- Сообщения: 438
- Статус: Подопытный участник
Re: Регистрация файлов входящих по FTP
только я бы вставил туда sleep 1, чтобы не притормаживало.
не лучше ли использовать команду read с параметром -t 0? тогда команда будет дожидаться появления строки в канале, а не выходить по таймауту…
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
-
Jampire
- Сообщения: 163
- ОС: Gentoo Linux amd64 || x86
Re: Регистрация файлов входящих по FTP
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
для proftpd есть модуль, реализующий почти аналогичный функционал.
http://www.castaglia.org/proftpd/modules/mod_exec.html
интересно, что разработчики proftpd сочли запуск сторонних программ и скриптов угрозой для безопасности системы, поэтому в proftpd такой функционал „изкоробки” отсутствует.
возможно, это повод задуматься, а не правы ли разработчики proftpd? (:
http://www.castaglia.org/proftpd/modules/mod_exec.html
интересно, что разработчики proftpd сочли запуск сторонних программ и скриптов угрозой для безопасности системы, поэтому в proftpd такой функционал „изкоробки” отсутствует.
возможно, это повод задуматься, а не правы ли разработчики proftpd? (:
¡ Страсть к разрушению есть творческая страсть!
-
Jampire
- Сообщения: 163
- ОС: Gentoo Linux amd64 || x86
Re: Регистрация файлов входящих по FTP
Nazyvaemykh писал(а): ↑23.02.2010 21:26возможно, это повод задуматься, а не правы ли разработчики proftpd? (:
Это не та "дыра" в безопасности, которая существует сама по себе. По-умолчанию в pure-ftpd также нет такой возможности: нужно принудительно запускать сервер с опцией -о и принудительно указывать путь до скрипта. А вот разработчики proftpd, похоже, решили за пользователей, что им нужно, а чего нет.
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Регистрация файлов входящих по FTP
господа, просьба не меряться ftp-серверами, религии у всех разные, это понятно ;-)
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
Nazyvaemykh
- Сообщения: 438
- Статус: Подопытный участник
Re: Регистрация файлов входящих по FTP
Пока мы с вами мило беседовали, вышла новая версия Proftpd — 1.3.3
как я понял, mod_exec] теперь почти по умолчанию. (:
как я понял, mod_exec] теперь почти по умолчанию. (:
¡ Страсть к разрушению есть творческая страсть!
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Регистрация файлов входящих по FTP
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
Nazyvaemykh писал(а): ↑23.02.2010 21:26интересно, что разработчики proftpd сочли запуск сторонних программ и скриптов угрозой для безопасности системы, поэтому в proftpd такой функционал „изкоробки” отсутствует.
возможно, это повод задуматься, а не правы ли разработчики proftpd?
запуск сторонних скриптов - всегда угроза. потому она всегда отключена(по умолчанию). что не мешает конечно разработчикам дистрибутива и включить её... Странно, если документация к другому серверу не содержит такого-же предупреждения...
ага. можно. причём и логи разделить, например лог о соединениях в один файл, лог о трансферах в другой, лог об ошибках - в БД...
-
Jampire
- Сообщения: 163
- ОС: Gentoo Linux amd64 || x86
Re: Регистрация файлов входящих по FTP
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.
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.