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

proftpd_mod_ctrls
В предыдущей статье шла речь о установке и базовой настройке 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

Автор: admin, 18 ноября 2017
Рубрики: Linux
Метки:

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

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

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