FTP (часть 3). Настройка и использование proftpd mod_exec

proftpd_mod_execВ предыдущей статье был рассмотрен proftpd модуль Controls, который позволяет на лету добавлять и удалять модули и работать с ними без каких либо конфигурационных файлов и перезагрузок сервера. Сегодня же поговорим о самом, на мой взгляд, полезном модуле proftpd – mod_exec.
Он позволяет выполнять скрипты до и после любых FTP действий, по началу и окончанию FTP сессии, при ошибках и т.п.
Примеры случаев использования mod_exec:

К сожалению, даже создатель данного модуля не рекомендует его использовать по ряду причин (детали в разделе Материалы по модулю), но есть способ устранить эти причины, о чем сейчас и пойдет речь.

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

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 команды

Автор: admin, 26 ноября 2017
Рубрики: Linux
Метки:
2 комментария к сообщению: “FTP (часть 3). Настройка и использование proftpd mod_exec”
  1. Sergey:

    Добрый день.
    Очень хорошо написано и работает хорошо.
    Сделал все как описано.
    Только у меня есть ещё один файл который шлет на почту какие файлы загружены и куда.
    Но когда начинаю загружать файлы под пользователем ответ получаю такой:
    —————————————————————————-
    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: Нет такого файла или каталога
    —————————————————————————-
    Есть идея как это можно исправить?
    Спасибо

Написать комментарий

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

Яндекс.Метрика
?>