В предыдущей статье шла речь о установке и базовой настройке proftpd. Сегодня же начнем знакомиться с proftpd модулями. Использовать будем proftpd сервер под операционной системой Ubuntu 16.04 на Google Cloud Platform (GCP). И первым модулем будет mod_ctrls (Controls). Вкратце опишу что и как.
Модуль Controls или mod_ctrls
Данный модуль позволяет управлять proftpd сервером, его модулями и т.п. на лету в реальном времени без каких-либо рестартов и обновлений файлов конфигурации. Звучит заманчиво, где и как применить узнаем далее.
Чтобы использовать данный модуль, proftpd сервер должен быть запущен в standalone режиме и только. При установке proftpd из xenial репозитория, этот модуль включен по умолчанию, поэтому остается только его настроить (иначе, вам нужно перекомпилировать proftpd с опцией ‘—enable-ctrls‘). Удалим настройку из общего файла конфигурации и вынесем в отдельный.
root@u16:~# vim /etc/proftpd/proftpd.conf … # Найди и удали линии, связанные с mod_ctrls и mod_ctrls_admin …
Полная настройка выглядит следующим образом:
rgb000@u16:~$ cat /etc/proftpd/conf.d/mod_ctrls.conf <IfModule mod_ctrls.c> # Включить Controls ControlsEngine on # Разрешить юзерам, у которых gid=proftpdadm и юзеру rgb000 выполнять все команды mod_ctrls модуля ControlsACLs all allow user rgb000 ControlsACLs all allow group proftpdadm # Максимальное количество пользователей для работы с mod_ctrls ControlsMaxClients 1 # Логи ControlsLog /var/log/proftpd/mod_ctrls.log # Интервал проверки новых клиентов. Т.е. если запустили команду ftpdctl, то ответ может быть с задержкой в <ControlsInterval> секунд ControlsInterval 2 # Путь к сокету обмена командами между сервером и клиентами ControlsSocket /run/proftpd.sock # Овнер и группа сокет файла ControlsSocketOwner proftpd proftpd # Разрешить юзерам, у которых gid=proftpdadm,rgb000 работать с сокетом ControlsSocketACL allow group proftpdadm,rgb000 <IfModule mod_ctrls_admin.c> # Включить Admin controls AdminControlsEngine on # Разрешить юзерам, у которых gid=proftpdadm,rgb000 запускать Admin controls команды AdminControlsACLs all allow user proftpdadm,rgb000 </IfModule> </IfModule>
Все поля я описал, могу только добавить, что директива ControlsSocketACL может быть указана несколько раз, но примениться только последняя (на что я наткнулся, когда добавлял сначала юзера, а с новой строки группу, и в итоге работала только группа).
Создадим дополнительную группу и пользователя proftpdadm в системе (не в альтернативном файле с proftpd пользователями и группами) для работы с Controls.
root@u16:~# groupadd -g 3001 proftpdadm root@u16:~# useradd -m -g 3001 -u 3001 proftpdadm
Перезагружаем proftpd.
root@u16:~# service proftpd restart
Для работы с proftpd демоном на лету используется утилита ftpdctl. Проверяем работоспособность.
rgb000@u16:~$ ftpdctl help ftpdctl: ban: ban a class, host, or user from using the daemon ftpdctl: debug: set debugging level ftpdctl: delay: tune mod_delay settings ftpdctl: dns: set UseReverseDNS configuration ftpdctl: down: disable an individual virtual server ftpdctl: dynmasq: mod_dynmasq controls ftpdctl: get: list configuration data ftpdctl: help: describe all registered controls ftpdctl: insctrl: enable a disabled control ftpdctl: insmod: load modules ftpdctl: kick: disconnect a class, host, or user ftpdctl: lsctrl: list all registered controls ftpdctl: lsmod: list modules ftpdctl: permit: allow a banned class, host or user to use the daemon ftpdctl: restart: restart the daemon (similar to using HUP) ftpdctl: rmctrl: disable a registered control ftpdctl: rmmod: unload modules ftpdctl: scoreboard: clean the ScoreboardFile ftpdctl: shaper: tune mod_shaper settings ftpdctl: shutdown: shutdown the daemon ftpdctl: status: display status of servers ftpdctl: tls: query/tune mod_tls settings ftpdctl: trace: set trace levels ftpdctl: up: enable a downed virtual server rgb000@u16:~$ ftpdctl lsmod ftpdctl: Loaded Modules: ftpdctl: mod_core.c ftpdctl: mod_xfer.c ftpdctl: mod_rlimit.c ftpdctl: mod_auth_unix.c ftpdctl: mod_auth_file.c ftpdctl: mod_auth.c ftpdctl: mod_ls.c ftpdctl: mod_log.c ftpdctl: mod_site.c ftpdctl: mod_delay.c … rgb000@u16:~$ ftpdctl rmctrl tls ftpdctl: 'tls' control disabled rgb000@u16:~$ ftpdctl insctrl tls ftpdctl: 'tls' control enabled
Как видим, пользователь rgb000 может смотреть список всех доступных действий и работать с ними.
Список возможных действий мы расширили, добавив административные Controls(действия) используя модуль mod_ctrls_admin. Проверим одно из них.
proftpdadm@u16:~$ ftpdctl status all ftpdctl: status: 10.138.0.2#21 UP
Данная команда показывает статус сервера (заметьте, что команда была запущена специально созданным юзером, для теста).
В следующей статье пойдет речь о модуле mod_exec.
Материалы по mod_ctrls
Proftpd: howto Controls
Proftpd: mod_ctrls_admin
Proftpd: mod_ctrls