Глава 4. Текущие проблемы

1. ProFTPD не работает.
2. "inet_create_connection() failed: Недозволенная операция".
3. Невозможно связаться с портом/Адрес уже используется
4. "(Login failed): Invalid shell"
5. "Неисправимая ошибка: Операция на панеле или нет"
6. "Неисправимая ошибка: невозможно определить IP адрес "hostname:
7. У меня проблемы с FTP клиентами за файрволами
8. Могу ли я использовать больше одного VirtualHost на одном IP?
9. Как мне запустить ProFTPD из inetd?
10. Могу я использовать tcp-wrappers с ProFTPD?
11. Могу я работать с FTP сервером на нестандартном порте?
12. Могу я контролировать соотношения скачиваний/закачиваний?
13. Медленные логины
14. Многочисленные сообщения "FTP session closed"
15. Как я могу увидеть, кто подключен в данный момент?
16. Могу я сделать так, чтобы ProFTPD прослушивался только на одном IP?
17. "FTP server shut down ... please try again later."
18. Как мне закрыть сервер без закрытия proftpd?
19. Возможно ли закрыть один VirtualHost?
20. Ошибка 421
21. proftpd нет в списке обработки данных
22. Как мне перегрузить/запустить заново сервер?
23. 503 Не подается команда PORT
24. Неисправимая ошибка: невозможно определить IP адрес
25. 451 добавление записи/перезагрузка запрещены, попробуйте еще раз
26. 501 REST несовместим с конфигурацией сервера
27. Указываемое время неверно
28. Аутентификация занимает слишком много времени
29. Поврежденные файлы
30. Могу я обновить ProFTPD без прерывания текущих сессий?
31. Нет такой группы "nogroup"
32. Почему я вижу "unable to set groups: Invalid argument"?
33. Почему я вижу подобные сообщения об ошибках при выходе из системы?

При отправке вашего вопроса по почте, предоставьте достаточно полную информацию, включающую сведения о (и не только):

  • OS и версии сервера (proftpd -vv)

  • Список учтенных модулей (proftpd -l)

  • Необходимые отрывки из журнала регистрации

  • Выходные данные из режима debug

  • Фрагмент конфигурации

Спецификация FTP подразумевает, что для всех коммуникаций должны быть использованы две панели. Первая запускается через порт 21 и является управляющим каналом, по которому посылаются все команды и коды ответа каждый раз, когда необходима передача данных, например, при загрузке файла, листинге директории и т.д. Второй канал создается по необходимости; эта панель может принимать одну-две формы.

non-Passive

Со своей стороны сервер для сокетов данных использует tcp порт с номером 20. С ним легко и удобно работать в firewall конфигурации.

Passive

На удаленной стороне для передачи данных адреса или номера портов будут назначаться динамически. В сущности, сделать это практически невозможно в firewall конфигурации, учитывая, что отображение в памяти (mapping) порта будет новым для каждого соединения.

Решить данную проблему можно, заставив пользователей использовать конфигурации для non-passive режима (т.е. порт 20)

Нет, по крайней мере не HTTP/1.1 через виртуальный хостинг. Это изначальное ограничение текущего FTP RFC., в отличие от HTTP/1.1 спецификации, не имеющее сравнимого с HTTP разделом "Host: foo.bar.com" механизма для указания информации, с какой машиной установлено соединение. Таким образом, единственный способ для того, чтобы определить, для какого VirtualHost предназначено соединение, это по IP пункта назначения.

Единственным исключением здесь является ситуация, в которой вы хостите многочисленные серверы на одном IP при помощи разных портов, однако здесь необходимо, чтобы клиент использовал non-standard порт, отсюда можно сделать вывод, что данное решение массового хостинга не самое лучшее.

Есть ли какая-нибудь возможность устранения данной неполадки?

Существует ориентировочный стандарт http://search.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-12.txt с IETF, который расширяется и обновляется информацией по спецификации FTP, включая поддержку для команды HOST. Однако, учитывая то, что проблема с IP происходит от вебсайтов, не от виртуальных ftp серверов, маловероятно, что в ближайшее время будут значительные продвижения в данном направлении.

Да, модуль mod_ratio предусмотрен специально для этого.

Существует четыре коэффициента директив: файловый коэффициент, начальный кредит файлов и начальный byte кредит. Установка любого коэффициента на 0 отменяет данный контроль.

Директивы следующие: HostRatio (согласуется с FQDN, можно использовать wildcards), AnonRatio (согласуется с паролем, вводимым при логине), UserRatio (принимает "*" для "любой пользователь" ("any user"), и GroupRatio.

Коэффициенты 
на                                    # enable module
UserRatio ftp 0 0 0 0
HostRatio master.debian.org 0 0 0 0          # leech access (default)
GroupRatio proftpd 100 10 5 100000           # 100:1 files, 10 file cred 5:1 bytes, 100k byte cred
AnonRatio billg@microsoft.com 1 0 1 0        # 1:1 ratio, no credits
UserRatio * 5 5 5 50000                      # special default case
              

Данный пример приведен для тех, кто (1) загрузил 1 файл размером 82k, (2) ничего не закачал, (3) имеет коэффициент файлов 5:1 и 5:1 байтов, (4) имеет 4 файла и остаток кредита в 17k, и (5) в настоящий момент меняет директорию на /art/nudes/young/carla. Начальный кредит, не указнный здесь, был 5 файлов и 100k (UserRatio * 5 5 5 100000).

Версия 2.0 и более современные версии этого модуля интегрируются с mod_sql.

Ограничения mod_ratio

Ограничения коэффициентов в mod_ratio поддерживаются только на посессионной основе и не наблюдается трекинга потребления.

Если проблема осталась, попробуйте указать временную зону через SetEnv, например: "SetEnv TZ :/etc/localtime"

Настройка привилегий группы для обработки данных использует системный вызов setgroups(2). Данный вызов не удастся совершить - при этом мы увидим вышеуказанное сообщение об ошибке. Это может произойти по двум причинам: для одной из групп значение GID отрицательно, либо максимальное количество групп для одного пользователя превысило допустимое значение.

В идеале, все IDs, как UID, так и GID, будут положительными. К сожалению, обычно в большинстве систем используется -1 или -2, особенно для таких пользователей, как 'nobody', или группы 'nogroup'. Использование данных значений применяет обращение C с разными видами данных для того, чтобы сделать текущее цифровое значение высоким; хотя некоторые функции, такие, как setgroups(), не воспринимают это. Вообще, всегда старайтесь использовать положительные ID цифры.

Другим ограничением является количество дополнительных групп для пользователя (например, второстепенные группы, те, которые были сконфигурированы в in /etc/group). Максимальное количество дополнительных групп, к которым может принадлежать пользователь, определяется константой оперативной системы NGROUPS_MAX. На некоторых оперативных системах, таких, как Solaris, это ограничение может быть настроено по собственному желанию.

Некоторые другие приложения могут не иметь данной ошибки, если они используют функцию initgroups(3), которая считывает файл /etc/group для членства в дополнительных группах пользователя, а также устанавливает все группы. Данная функция, однако, игнорирует любые дополнительные группы для пользователя, большие, чем NGROUPS_MAX, в отличие от setgroups(2).

Если в этом заключается ошибка, упоминающаяся в сообщении, в любом случае, скорее всего придется сократить количество групп, членами которых являются ваши пользователи, либо настроить значение NGROUPS_MAX, если ваша операционная система позволяет это.

            PAM(exit): Permission denied open_module: stat(/usr/lib/security/pam_unix.so.1) failed: No such file or directory
            load_modules: can not open module /usr/lib/security/pam_unix.so.1 PAM(exit): Dlopen failure. 

Данные сообщения появляются, когда действует директива конфигурации DefaultRoot. По этой директиве пользователь будет ограничен при использовании системного звонка chroot(2). Однако, данный звонок влияет на все другие утилиты системы, такие, как PAM. В этом случае, конфигурация PAM заставляет библиотеку PAM пытаться открыть PAM модули, используя путь, больше не являющийся действующим, что соответственно приводит к ошибкам. Это происходит при выходе из системы, потому что chroot уже создан к этому моменту; на входе в систему, модули PAM успешно найдены и загружены еще до chroot, поэтому не возникает никаких ошибок. Это просто ошибки, сообщающие о внешних неполадках, не приводящие к сбою функциональной работы сервера или дырам в системе безопасности.