Маленькие ньюансы при установке и настройке ProFTPD (на базе FreeBSD)
Запуск proftpd на нестандартном порту
Многие администраторы, прежде чем установить новый-свежий продукт, проверяют его. В случае proftpd, либо должен быть остановлен предыдущий демон ftpd, либо следует использовать директивы ниже, чтобы демон слушал, например порт 8041:
Port 0
Bind 159.93.17.121
SocketBindTight on
Port 8041
Port 0 - отказ от прослушивания 21'ого порта в сумме с нижними директивами
Bind 159.93.17.121 - привязка на конкретный ip
SocketBindTight on - позволяет отказаться от открытия by-default порта 21
Port 8041 - командный порт, который будет слушать proftpd
Стандартные модули в proftpd
В стандартный набор модулей ProFTPD (всегда включенных) входят следующие:
mod_auth - реализация таких команд как: USER, PASS, ACCT, REIN
mod_ls - встроенная реализация команд FTP: LIST, NLST и STAT
mod_site - встроенная реализация команд FTP: SITE, HELP и CHMOD
mod_unixpw - интерфейс к password-auth OS Unix
mod_xfer - реализация команд FTP: STOR, RETR, APPE, REST...
Модуль PAM подключается в том случае, если система имеет поддержку pam:
mod_pam - интерфейс к системе авторизации PAM (Pluggable Authentication Modules)
Модуль для отображение фалов readme - директива "DisplayReadme"
mod_readme
Дополнительные модули в proftpd
Дополнительные модули:
mod_linuxprivs - реализация дополнительной схемы security POSIX 1e, только для Linux
mod_quota - дисковые квоты
mod_ratio - система реализации коэффициента upload/download
mod_wrap - использование доступа с учетом ограничений tcp-wrappers
Дополнительные модули авторизации, интерфейс на основе DB:
mod_ldap
mod_sql
mod_sql_mysql
mod_sql_postgres
Chroot, DefaultRoot в proftpd
В ProFTPD реализована технология chroot не в полном смысле этого понятия, а лишь частично, те позволяет нам в качестве корневой директории сделать директорию реального пользователя или ftp/anonymous. Данная технология позволяет запускать демон proftpd под указанным в настройках, директивы User и Group, пользователем с его uid/gid. А также изменять "корневую директорию" с помощью директив:
DefaultRoot - в конфигурации server config, ,
- в конфигурации server config,,
Так к примеру, мы можем за"chroot"ить всех локальных пользователей указав в конфигурации серверной части:
DefaultRoot ~
Авторизация и 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
Иногда может вылезти несоответствие указанных внутри значений User и Group и реальных uid/gid директории ~ftp и ее содержимого. Кроме того не забудьте проверить не установлены ли в конфигурациях server и global:
DenyAll
Если установлены, то в директиве добавьте:
Order Allow,Deny
Allow from ip-address1,...
Deny from all
или
AllowAll
Фильтры в proftpd
Чтобы предотвратить попытку положить или взломать демон proftpd командой "ls */../*/../*/...", включите директиву фильтра DenyFilter \*.*/. Можно использовать эту директиву для дополнительной фильтрации, кроме того имеется директива PathDenyFilter "(^|/)[-.]" Например:
DenyFilter \*.*/
DNS-Reverse и задержки авторизация в proftpd
Если пользователи жалуются на длительную авторизацию - вход по ftp, воспользуйтесь директивой UseReverseDNS off, дополнительно к ней можно использовать директиву IdentLookups off. Например:
UseReverseDNS off
или
UseReverseDNS off
IdentLookups off
Пример рабочего 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:
# This sample configuration file illustrates configure standalone server # at port 8041, anonymous and chrooting local users to their home-dir
ServerName "FTP Server" ServerType standalone ServerIdent off DefaultServer on
#--lavr Port 21 is the standard FTP port, unwanted. Port 0
#--lavr, bind to ip=159.93.17.121 and listen port=8041 #Bind 159.93.17.121 SocketBindTight on Port 8021
# Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. Umask 022
# # don't give the server banner until _after_ authentication # DeferWelcome off
# Set the user and group that the server normally runs at. User nobody Group nogroup
# If you don't want normal users logging in at all, uncomment this # next section # # DenyAll #
# for Anonymous #DefaultRoot /pub/ftp/ #-lavr for chroot all user's to home-dir DefaultRoot ~
# ScoreBoard Path ScoreboardPath /var/run
#--lavr/pam # uncomment AuthPAM to disable PAM auth #AuthPAM off #AuthPAMAuthoritative off #--lavr, by default "AuthPAMConfig ftp", not ftpd!!! #for FreeBSD: #-------------------------- quote from /etc/pam.conf------------------------ #after insert to /etc/pam.conf, delete ONLY ONE "#" symbol from each line below ## Same requirement for ftpd as login ##--lavr, default for native ftpd daemon ##ftpd auth sufficient pam_skey.so #ftpd auth requisite pam_cleartext_pass_ok.so #ftpd auth required pam_unix.so try_first_pass # ##--lavr, for proftpd pam-auth #ftp auth required pam_unix.so try_first_pass #ftp account required pam_unix.so try_first_pass #ftp session required pam_permit.so #-------------------------- end of quote ----------------------------------
#AuthPAMConfig proftpd, see proftpd auth at /etc/pam.conf #PersistentPasswd off
#--lavr uncomment below for disable to check /etc/ftpusers #UseFtpUsers off
# Maximum clients with message
MaxClients 3 "Sorry, max %m users -- try again later" MaxClientsPerHost 1 "Sorry, you may not connect more than one time."
# To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd) MaxInstances 20
# Set the maximum number of seconds a data connection is allowed # to "stall" before being aborted. TimeoutStalled 300 TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900
# We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayFirstChdir .message
Примечание: демон стартует как nobody на порту 8041, в секции Anonymous ~ftp, uid=ftp, gid=operator, домашняя директория пользователей является корнем DefaultRoot ~.
Запуск 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 невозможна при запуске в отладочном режиме.
Авторизация в Solaris/NIS+
У меня Sun'овский кластер построен на NIS+. После установки ProFTPD, все прекрасно работает с chroot для anonymous, но не проходит авторизация пользователей через NIS+.
У меня старый-боевой Solaris 2.5.1 без PAM, в настройках общей части сервера он выполнял chroot:
...
User nobody
Group nogroup
...
Видимо все упиралось в доступ к NIS+ базам и вылечилось добавлением и изменением базовой конфигурации сервера: