Маленькие ньюансы при установке и настройке ProFTPD (на базе FreeBSD):

Содержание:

  1. Запуск proftpd на нестандартном порту
  2. Стандартные модули в proftpd
  3. Дополнительные модули в proftpd
  4. Chroot, DefaultRoot в proftpd
  5. Авторизация и Anonymous в proftpd
  6. Фильтры в proftpd
  7. DNS-Reverse Авторизация в proftpd
  8. Пример рабочего proftpd.conf
  9. Запуск proftpd в отладочном режиме
  10. Авторизация в Solaris/NIS+
  11. Полезные ссылки и расширение возможностей proftpd

  1. Запуск proftpd на нестандартном порту

    Многие администраторы, прежде чем установить новый-свежий продукт, проверяют его. В случае proftpd, либо должен быть остановлен предыдущий демон ftpd, либо следует использовать директивы ниже, чтобы демон слушал, например порт 8041:

    Port                            0
    Bind 159.93.17.121
    SocketBindTight                 on
    Port                            8041
    

  2. Стандартные модули в proftpd

    В стандартный набор модулей ProFTPD (всегда включенных) входят следующие:

    Модуль PAM подключается в том случае, если система имеет поддержку pam:

    Модуль для отображение фалов readme - директива "DisplayReadme"

  3. Дополнительные модули в proftpd

    Дополнительные модули:

    Дополнительные модули авторизации, интерфейс на основе DB:

  4. Chroot, DefaultRoot в proftpd

    В ProFTPD реализована технология chroot не в полном смысле этого понятия, а лишь частично, те позволяет нам в качестве корневой директории сделать директорию реального пользователя или ftp/anonymous.
    Данная технология позволяет запускать демон proftpd под указанным в настройках, директивы User и Group, пользователем с его uid/gid. А также изменять "корневую директорию" с помощью директив:

    Так к примеру, мы можем за"chroot"ить всех локальных пользователей указав в конфигурации серверной части:
    DefaultRoot ~
    

  5. Авторизация и Anonymous в proftpd

    Если у вас возникли проблемы с авторизацией anonymous или локальных пользователей, с учетом директив User и Group, проверьте чтобы эти пользователи не присутствовали в ftpusers или проверьте правильность вашей конфигурации PAM в соответствии с рекомендациями из дистрибутива ProFTPD или документацией PAM. Если ProFTPD собран с поддержкой pam, для проверки, отключите его в конфигурации:

    AuthPAM                         off
    AuthPAMAuthoritative            off
    
    достаточно одной директивы AuthPAM off. Можно переопределить ресурс в pam конфигурации с помощью директивы AuthPAMConfig.

    Примечание: Читайте внимательно документацию, или посмотрите чем инициализируется pamconfig в proftpd-sources/modules/mod_pam.c:

    static char *           pamconfig               = "ftp";
    
    Значит авторизационная конфигурация PAM для ProFTPD в /etc/pam.conf или /etc/pam.d - будет именоваться ftp by default, а изменить ее название можно с помощью AuthPAMConfig.

    Проверку ftpusers можно отключить директивой UseFtpUsers off.
    Дополнительно для безпарольного входа под anonymous или ftp, воспользуйтесь директивами:

    AnonRequirePassword  off     (значение по-умолчанию)
    RequireValidShell    off
    UserAlias            anonymous ftp
    
    Иногда может вылезти несоответствие указанных внутри <Anonymous ~ftp> значений User и Group и реальных uid/gid директории ~ftp и ее содержимого.
    Кроме того не забудьте проверить не установлены ли в конфигурациях server и global:
    <Limit LOGIN>
      DenyAll
    <Limit>
    
    Если установлены, то в директиве <Anonymous> добавьте:
      <Limit LOGIN>
         Order                       Allow,Deny
         Allow                       from ip-address1,...
         Deny from all
      <Limit>
    
    или
      <Limit LOGIN>
         AllowAll
      <Limit>
    

  6. Фильтры в proftpd

    Чтобы предотвратить попытку положить или взломать демон proftpd командой "ls */../*/../*/...", включите директиву фильтра DenyFilter \*.*/. Можно использовать эту директиву для дополнительной фильтрации, кроме того имеется директива PathDenyFilter "(^|/)[-.]"
    Например:

    DenyFilter \*.*/
    

  7. DNS-Reverse и задержки авторизация в proftpd

    Если пользователи жалуются на длительную авторизацию - вход по ftp, воспользуйтесь директивой UseReverseDNS off, дополнительно к ней можно использовать директиву IdentLookups off.
    Например:

    UseReverseDNS off
    
    или
    UseReverseDNS off
    IdentLookups off
    

  8. Пример рабочего proftpd.conf

    Конкретный пример настройки ProFTPD во FreeBSD:

    Лучший вариант, собрать proftpd из портов системы:

    cd /usr/ports/ftp/proftpd
    make
    make install
    rm -rf work
    
    Если мы хотим собрать proftpd с нужными нам модулями, необходимо посмотреть Makefile и при необходимости, поправить под свои нужды.
    Пример сборки без поддержки PAM:
    cd /usr/ports/ftp/proftpd
    make WITHOUT_PAM=yes 
    make install
    rm -rf work
    
    Далее отредактировать файл конфигурации

    /usr/local/etc/proftpd.conf под свои нужды.

    Допустим у нас имеется пользователь ftp с uid=ftp и gid=operator, а запустить демон proftpd мы хотим с USER nobody и Group nogroup, тогда, возможно придется сделать в секции Anonymous USER ftp и Group operator (по-умолчанию во FreeBSD пользователь ftp имеет uid=ftp, gid=operator).

    Соответственно удалить из файла /etc/ftpusers пользователей с именами nobody, ftp. Или, как вариант изменить uid/gid пользователя ftp на uid=ftp и gid=ftp, не забыв создать группу ftp и поменять владельца группы в директории ~ftp.

    Пример рабочей конфигурации ProFTPD 1.2.4 в FreeBSD:
    Примечание: демон стартует как nobody на порту 8041, в секции Anonymous ~ftp, uid=ftp, gid=operator, домашняя директория пользователей является корнем DefaultRoot ~.

  9. Запуск proftpd в отладочном режиме

    Проверка правильности синтаксиса конфигурации и работы ProFTPD. Для проверки правильности файла конфигурации, необходимо запустить демон со следующими ключами:

    ./proftpd -t
    
    Для определения с поддержкой каких модулей собран наш вариант proftpd, необходимо запустить демон с ключами:
    ./proftpd -l
    
    Для запуска демона в тестовом режиме, с выдачей диагностики на экран:
    ./proftpd -n -d 9 -c /path/proftpd.conf
    
    где -n - указывает что мы запускаем демон в режиме foreground
    -d 9 - указывает что в отладочном режиме с максимальным уровнем отладки 9.
    -c /path/proftpd.conf - указывает заданный файл конфигурации.

    Примечание: Не наступите на те же грабли что и я, проверка MaxClients, MaxClientsPerHost невозможна при запуске в отладочном режиме.

  10. Авторизация в Solaris/NIS+

    У меня Sun'овский кластер построен на NIS+. После установки ProFTPD, все прекрасно работает с chroot для anonymous, но не проходит авторизация пользователей через NIS+.

    У меня старый-боевой Solaris 2.5.1 без PAM, в настройках общей части сервера он выполнял chroot:

    ...
    User                            nobody
    Group                           nogroup
    ...
    
    Видимо все упиралось в доступ к NIS+ базам и вылечилось добавлением и изменением базовой конфигурации сервера:
    ...
    #PAM disable
    PersistentPasswd   off 
    ...
    User                            root
    Group                           other
    ...
    

  11. Полезные ссылки и расширение возможностей proftpd

    Ссылки на сайт TJ Saunders автора различных модулей, патчей и расширений для ProFTPD и документацию:


Copyleft Andrey Lavrentyev