В предыдущей статье был рассмотрен proftpd модуль Controls, который позволяет на лету добавлять и удалять модули и работать с ними без каких либо конфигурационных файлов и перезагрузок сервера. Сегодня же поговорим о самом, на мой взгляд, полезном модуле proftpd – mod_exec.
Он позволяет выполнять скрипты до и после любых FTP действий, по началу и окончанию FTP сессии, при ошибках и т.п.
Примеры случаев использования mod_exec:
- Добавление информации о залитых файлах в БД
- Проверка файлов на сигнатуры вирусов
- Проверка медиафайлов на разные метаданные
- Группирование файлов по разным признакам
- Индивидуальная обработка файлов per ftp user
- И многое другое в зависимости от нужд
К сожалению, даже создатель данного модуля не рекомендует его использовать по ряду причин (детали в разделе Материалы по модулю), но есть способ устранить эти причины, о чем сейчас и пойдет речь.
Для начала создадим папку, в которой будут лежать наши скрипты
root@u16:~# mkdir -v /etc/proftpd/scripts mkdir: created directory '/etc/proftpd/scripts'
Далее, добавляем парочку скриптов
root@u16:/etc/proftpd# ls -1 scripts/ before_command.sh on_command.sh on_connect.sh on_error.sh root@u16:/etc/proftpd# chmod +x scripts/* root@u16:/etc/proftpd# cat scripts/on_connect.sh #!/bin/bash echo "Script argument 1 FTP_USER_PASS=$1. Script environment variable FTP_USER_PASS=$FTP_USER_PASS" echo "Script argument 2 FTP_USER_IP=$2. Script environment variable FTP_USER_IP=$FTP_USER_IP" echo "Script argument 3 FTP_USER_NAME_LOCAL=$3. Script environment variable FTP_USER_NAME_LOCAL=$FTP_USER_NAME_LOCAL" echo "Script argument 4 FTP_USER_NAME_ORIG=$4. Script environment variable FTP_USER_NAME_ORIG=$FTP_USER_NAME_ORIG" echo "Script argument 5 FTP_USER_GROUP=$5. Script environment variable FTP_USER_GROUP=$FTP_USER_GROUP" echo "Script argument 6 FTP_USER_DNS_NAME=$6. Script environment variable FTP_USER_DNS_NAME=$FTP_USER_DNS_NAME" echo "Script argument 7 FTP_WORKING_DIR=$7. Script environment variable FTP_WORKING_DIR=$FTP_WORKING_DIR" echo "Script argument 8 FTP_CONN_CLASS=$8. Script environment variable FTP_CONN_CLASS=$FTP_CONN_CLASS" echo "Script argument 9 FTP_FILE=$9. Script environment variable FTP_FILE=$FTP_FILE" echo "Script argument 10 FTP_FILE_PATH=$10. Script environment variable FTP_FILE_PATH=$FTP_FILE_PATH" echo "Script argument 11 FTP_COMMAND=$11. Script environment variable FTP_COMMAND=$FTP_COMMAND" echo "Script argument 12 FTP_SERVER_NAME=$12. Script environment variable FTP_SERVER_NAME=$FTP_SERVER_NAME" echo "Script argument 13 FTP_RNFR_NAME=$13. Script environment variable FTP_RNFR_NAME=$FTP_RNFR_NAME"
Для примера, было создано 4 полностью одинаковых скрипта, которые делают одни и те же действия – выводят значения всех mod_exec FTP переменных в stdout.
Теперь добавляем настройки модуля mod_exec и правила, когда этим скриптам запускаться.
root@u16:/etc/proftpd# cat conf.d/mod_exec.conf <IfModule mod_exec.c> # Включить модуль ExecEngine on # Логировать stderr i stdout скриптов в ExecLog ExecOptions logStderr logStdout # Логи модуля ExecLog /var/log/proftpd/mod_exec.log # Timeout выполнения скриптов ExecTimeout 180 # Перечень всех переменных и их значения ExecEnviron FTP_USER_PASS %A ExecEnviron FTP_USER_IP %a ExecEnviron FTP_USER_NAME_LOCAL %u ExecEnviron FTP_USER_NAME_ORIG %U ExecEnviron FTP_USER_GROUP %g ExecEnviron FTP_USER_DNS_NAME %h ExecEnviron FTP_WORKING_DIR %C ExecEnviron FTP_CONN_CLASS %c ExecEnviron FTP_FILE %F ExecEnviron FTP_FILE_PATH %f ExecEnviron FTP_COMMAND %m ExecEnviron FTP_SERVER_NAME %v ExecEnviron FTP_RNFR_NAME %w # Выполнить скрипт при подключении к FTP серверу ExecOnConnect /etc/proftpd/scripts/on_connect.sh %A %a %u %U %g %h %C %c %F %f %m %v %w # Выполнить скрипт перед FTP командой STOR ExecBeforeCommand STOR /etc/proftpd/scripts/before_command.sh %A %a %u %U %g %h %C %c %F %f %m %v %w # Выполнить скрипт после FTP команды STOR ExecOnCommand STOR /etc/proftpd/scripts/on_command.sh %A %a %u %U %g %h %C %c %F %f %m %v %w # Выполнить скрипт при возникновении какой-либо ошибки ExecOnError ALL /etc/proftpd/scripts/on_error.sh %A %a %u %U %g %h %C %c %F %f %m %v %w </IfModule>
Комментарии ко всем настройкам были добавлены, теперь можно делать рестарт и проверять работу модуля.
root@u16:/etc/proftpd# service proftpd restart
В предыдущей статье было создано FTP пользователя, используя которого мы будем заливать файлы.
Используя FileZilla подключаемся на FTP сервер и параллельно смотрим что пишется в лог.
root@u16:~# tail -f /var/log/proftpd/mod_exec.log 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: preparing to execute '/etc/proftpd/scripts/on_connect.sh' with uid 113 (euid 113), gid 3000 (egid 3000) 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[1] = UNKNOWN 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[2] = 80.77.41.195 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[3] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[4] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[5] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[6] = 80.77.41.195 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[7] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[8] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[9] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[10] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[11] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[12] = 2017-11-18 06:09:18,925 mod_exec/0.9.12[1495]: + '/etc/proftpd/scripts/on_connect.sh': argv[13] = - 2017-11-18 06:09:18,929 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 1 FTP_USER_PASS=UNKNOWN. Script environment variable FTP_USER_PASS=UNKNOWN' 2017-11-18 06:09:18,929 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 2 FTP_USER_IP=80.77.41.195. Script environment variable FTP_USER_IP=80.77.41.195' 2017-11-18 06:09:18,929 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 3 FTP_USER_NAME_LOCAL=. Script environment variable FTP_USER_NAME_LOCAL=' 2017-11-18 06:09:18,929 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 4 FTP_USER_NAME_ORIG=. Script environment variable FTP_USER_NAME_ORIG=' 2017-11-18 06:09:18,929 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 5 FTP_USER_GROUP=. Script environment variable FTP_USER_GROUP=' 2017-11-18 06:09:18,929 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 6 FTP_USER_DNS_NAME=80.77.41.195. Script environment variable FTP_USER_DNS_NAME=80.77.41.195' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 7 FTP_WORKING_DIR=. Script environment variable FTP_WORKING_DIR=' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 8 FTP_CONN_CLASS=. Script environment variable FTP_CONN_CLASS=' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 9 FTP_FILE=. Script environment variable FTP_FILE=' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 10 FTP_FILE_PATH=UNKNOWN0. Script environment variable FTP_FILE_PATH=' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 11 FTP_COMMAND=UNKNOWN1. Script environment variable FTP_COMMAND=' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 12 FTP_SERVER_NAME=UNKNOWN2. Script environment variable FTP_SERVER_NAME=' 2017-11-18 06:09:18,930 mod_exec/0.9.12[1494]: stdout from '/etc/proftpd/scripts/on_connect.sh': 'Script argument 13 FTP_RNFR_NAME=UNKNOWN3. Script environment variable FTP_RNFR_NAME=-' 2017-11-18 06:09:18,937 mod_exec/0.9.12[1494]: '/etc/proftpd/scripts/on_connect.sh' terminated normally, with exit status 0 2017-11-18 06:09:18,937 mod_exec/0.9.12[1494]: ExecOnConnect '/etc/proftpd/scripts/on_connect.sh' succeeded
Как видим, скрипт успешно выполнился и значение переменных окружения и переданных аргументов совпадает.
Теперь заливаем файлик и параллельно смотрим логи.
2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: preparing to execute '/etc/proftpd/scripts/on_command.sh' with uid 113 (euid 113), gid 3000 (egid 3000) 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[1] = UNKNOWN 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[2] = 80.77.41.195 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[3] = frodo 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[4] = frodo 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[5] = proftpd 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[6] = 80.77.41.195 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[7] = /var/www/frodo 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[8] = 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[9] = /var/www/frodo/P61223-222401.jpg 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[10] = /var/www/frodo/P61223-222401.jpg 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[11] = STOR 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[12] = MyFTP 2017-11-18 06:14:37,095 mod_exec/0.9.12[1521]: + '/etc/proftpd/scripts/on_command.sh': argv[13] = - 2017-11-18 06:14:37,097 mod_exec/0.9.12[1517]: error: unable to open /dev/null for stdin: No such file or directory 2017-11-18 06:14:37,097 mod_exec/0.9.12[1517]: '/etc/proftpd/scripts/on_command.sh' terminated normally, with exit status 2 2017-11-18 06:14:37,097 mod_exec/0.9.12[1517]: STOR ExecOnCommand '/etc/proftpd/scripts/on_command.sh' failed: No such file or directory
Как видим, у нас вылезла проблема, о которой писал автор модуля: “модуль может работать не корректно с Анонимной заливкой и при использовании директивы DefaultRoot”. Другими словами, если мы джейлим пользователя в домашней папке, то у нас нету доступа к системным библиотекам, файлах, стандартных потоков (stdin, stdout, stderr), переменных окружения и каких-либо бинарниках. Чтобы исправить эту проблему, нужно установить и подключить модуль vroot.
Устанавливаем модуль vroot.
apt-get install proftpd-mod-vroot
Теперь подключаем к proftpd. В конфигурации он уже есть, только нужно включить.
root@u16:/etc/proftpd# cat proftpd.conf | grep virtuals Include /etc/proftpd/virtuals.conf root@u16:/etc/proftpd# cat virtuals.conf <IfModule mod_vroot.c> VRootEngine on VRootServerRoot / VRootOptions allowSymlinks </IfModule>
Рестартуем сервер.
root@u16:/etc/proftpd# service proftpd restart
Проверяем заливку.
2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: preparing to execute '/etc/proftpd/scripts/before_command.sh' with uid 113 (euid 113), gid 3000 (egid 3000) 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[1] = UNKNOWN 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[2] = 80.77.41.195 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[3] = frodo 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[4] = frodo 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[5] = proftpd 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[6] = 80.77.41.195 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[7] = /var/www/frodo 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[8] = 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[9] = /var/www/frodo/P61223-222423.jpg 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[10] = /var/www/frodo/P61223-222423.jpg 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[11] = STOR 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[12] = MyFTP 2017-11-18 06:36:12,421 mod_exec/0.9.12[1790]: + '/etc/proftpd/scripts/before_command.sh': argv[13] = - 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 1 FTP_USER_PASS=UNKNOWN. Script environment variable FTP_USER_PASS=UNKNOWN' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 2 FTP_USER_IP=80.77.41.195. Script environment variable FTP_USER_IP=80.77.41.195' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 3 FTP_USER_NAME_LOCAL=frodo. Script environment variable FTP_USER_NAME_LOCAL=frodo' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 4 FTP_USER_NAME_ORIG=frodo. Script environment variable FTP_USER_NAME_ORIG=frodo' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 5 FTP_USER_GROUP=proftpd. Script environment variable FTP_USER_GROUP=proftpd' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 6 FTP_USER_DNS_NAME=80.77.41.195. Script environment variable FTP_USER_DNS_NAME=80.77.41.195' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 7 FTP_WORKING_DIR=/var/www/frodo. Script environment variable FTP_WORKING_DIR=/var/www/frodo' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 8 FTP_CONN_CLASS=. Script environment variable FTP_CONN_CLASS=' 2017-11-18 06:36:12,423 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 9 FTP_FILE=/var/www/frodo/P61223-222423.jpg. Script environment variable FTP_FILE=/var/www/frodo/P61223-222423.jpg' 2017-11-18 06:36:12,424 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 10 FTP_FILE_PATH=UNKNOWN0. Script environment variable FTP_FILE_PATH=/var/www/frodo/P61223-222423.jpg' 2017-11-18 06:36:12,424 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 11 FTP_COMMAND=UNKNOWN1. Script environment variable FTP_COMMAND=STOR' 2017-11-18 06:36:12,424 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 12 FTP_SERVER_NAME=UNKNOWN2. Script environment variable FTP_SERVER_NAME=MyFTP' 2017-11-18 06:36:12,424 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/before_command.sh': 'Script argument 13 FTP_RNFR_NAME=UNKNOWN3. Script environment variable FTP_RNFR_NAME=-' 2017-11-18 06:36:12,429 mod_exec/0.9.12[1787]: '/etc/proftpd/scripts/before_command.sh' terminated normally, with exit status 0 2017-11-18 06:36:12,429 mod_exec/0.9.12[1787]: STOR ExecBeforeCommand '/etc/proftpd/scripts/before_command.sh' succeeded 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: preparing to execute '/etc/proftpd/scripts/on_command.sh' with uid 113 (euid 113), gid 3000 (egid 3000) 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[1] = UNKNOWN 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[2] = 80.77.41.195 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[3] = frodo 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[4] = frodo 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[5] = proftpd 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[6] = 80.77.41.195 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[7] = /var/www/frodo 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[8] = 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[9] = /var/www/frodo/P61223-222423.jpg 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[10] = /var/www/frodo/P61223-222423.jpg 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[11] = STOR 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[12] = MyFTP 2017-11-18 06:36:15,018 mod_exec/0.9.12[1791]: + '/etc/proftpd/scripts/on_command.sh': argv[13] = - 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 1 FTP_USER_PASS=UNKNOWN. Script environment variable FTP_USER_PASS=UNKNOWN' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 2 FTP_USER_IP=80.77.41.195. Script environment variable FTP_USER_IP=80.77.41.195' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 3 FTP_USER_NAME_LOCAL=frodo. Script environment variable FTP_USER_NAME_LOCAL=frodo' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 4 FTP_USER_NAME_ORIG=frodo. Script environment variable FTP_USER_NAME_ORIG=frodo' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 5 FTP_USER_GROUP=proftpd. Script environment variable FTP_USER_GROUP=proftpd' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 6 FTP_USER_DNS_NAME=80.77.41.195. Script environment variable FTP_USER_DNS_NAME=80.77.41.195' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 7 FTP_WORKING_DIR=/var/www/frodo. Script environment variable FTP_WORKING_DIR=/var/www/frodo' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 8 FTP_CONN_CLASS=. Script environment variable FTP_CONN_CLASS=' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 9 FTP_FILE=/var/www/frodo/P61223-222423.jpg. Script environment variable FTP_FILE=/var/www/frodo/P61223-222423.jpg' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 10 FTP_FILE_PATH=UNKNOWN0. Script environment variable FTP_FILE_PATH=/var/www/frodo/P61223-222423.jpg' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 11 FTP_COMMAND=UNKNOWN1. Script environment variable FTP_COMMAND=STOR' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 12 FTP_SERVER_NAME=UNKNOWN2. Script environment variable FTP_SERVER_NAME=MyFTP' 2017-11-18 06:36:15,020 mod_exec/0.9.12[1787]: stdout from '/etc/proftpd/scripts/on_command.sh': 'Script argument 13 FTP_RNFR_NAME=UNKNOWN3. Script environment variable FTP_RNFR_NAME=-' 2017-11-18 06:36:15,025 mod_exec/0.9.12[1787]: '/etc/proftpd/scripts/on_command.sh' terminated normally, with exit status 0 2017-11-18 06:36:15,025 mod_exec/0.9.12[1787]: STOR ExecOnCommand '/etc/proftpd/scripts/on_command.sh' succeeded
Теперь, можно экспериментировать.
Подсказу я дал, можете адаптировать модуль под свои задачи.
Материалы по mod_exec
Proftpd: mod_exec
Proftpd: mod_vroot
Proftpd: поддерживаемые FTP команды
Добрый день.
Очень хорошо написано и работает хорошо.
Сделал все как описано.
Только у меня есть ещё один файл который шлет на почту какие файлы загружены и куда.
Но когда начинаю загружать файлы под пользователем ответ получаю такой:
—————————————————————————-
mod_exec/0.9.12[45518]: preparing to execute ‘/usr/bin/php7.2’ with uid 5500 (euid 5500), gid 5500 (egid 5500)
mod_exec/0.9.12[45518]: + ‘/usr/bin/php7.2’: argv[1] = /var/www/ftp/email.php
mod_exec/0.9.12[45518]: + ‘/usr/bin/php7.2’: argv[2] = notify/send-mail
mod_exec/0.9.12[45518]: + ‘/usr/bin/php7.2’: argv[3] = file=/srv/ftp/ftpuser/Postfix.pdf
mod_exec/0.9.12[45518]: + ‘/usr/bin/php7.2’: argv[4] = user=ftpuser
mod_exec/0.9.12[45518]: error: unable to open /dev/null for stdin: Нет такого файла или каталога
mod_exec/0.9.12[45505]: ‘/usr/bin/php7.2’ terminated normally, with exit status 2
mod_exec/0.9.12[45505]: STOR ExecOnCommand ‘/usr/bin/php7.2’ failed: Нет такого файла или каталога
—————————————————————————-
Есть идея как это можно исправить?
Спасибо
Это та же проблема, что описана в статье — нужен модуль proftpd-mod-vroot