Документация по ОС FreeBSD Пятница, 03.05.2024, 13:12
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » FTP

Маленькие ньюансы при установке и настройке 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_core - реализация команд FTP: CWD, CDUP, MKD, PWD, RMD, DELE...
  • mod_log - реализация сбора статистики, syslog
  • 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

#
# Logging options
#
SystemLog /var/log/proftpd/proftpd.log
TransferLog                     /var/log/proftpd/proftpd.log
ExtendedLog /var/log/proftpd/proftpd.log    auth,read
#
# Some logging formats
#
LogFormat         default "%h [%a] %l %u %t \"%r\" %s %f %b"
LogFormat         auth    "%v [%P] %h [%a] %t \"%r\" %s"
LogFormat         read    "%v [%P] %h [%a] %t \"%r\" %s %f %b"
LogFormat         write   "%h [%a] %l %u %t \"%r\" %s %f %b"

# Filter agains: ls */../*/../*/...
DenyFilter \*.*/

# Performance, let's do DNS resolution when we process the logs...
#--lavr uncomment below if login so slow
#UseReverseDNS        off
#IdentLookups         off

#--lavr already bind
#



   AnonRequirePassword  off
   RequireValidShell off
   UserAlias anonymous ftp

   User ftp
   Group operator

   AccessGrantMsg "Anonymous access granted for %u."

   MaxClients         2   "Sorry, max %m users -- try again later"

 
     Order                       allow,deny
     allow                       from 159.93.17., 62.84.100.
     deny from all
#--lavr for allow access to All, remove above up to Limit
#      AllowAll
 



#--lavr see above
#

---------------------------------------------------------------------------------------------

Примечание: демон стартует как 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+ базам и вылечилось добавлением и изменением базовой конфигурации сервера:
 
...
#PAM
disablePersistentPasswd off
...
User root
Group other
...
Категория: FTP | Добавил: oleg (29.10.2007)
Просмотров: 3387 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024