The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Маленькие ньюансы при установке и настройке ProFTPD (ftp example virtual)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: ftp, example, virtual,  (найти похожие документы)
From: Андрей Лаврентьев <lavr@unix1.jinr.ru> Original: http://unix1.jinr.ru/~lavr/ Subject: Маленькие ньюансы при установке и настройке ProFTPD Автор: Андрей Лаврентьев (lavr@unix1.jinr.ru), http://unix1.jinr.ru/~lavr/ Маленькие ньюансы при установке и настройке ProFTPD (на базе FreeBSD): 1. Многие администраторы, прежде чем установить новый-свежий продукт, проверяют его. В случае 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 2. В стандартный набор модулей 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 3. Дополнительные модули: * 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 4. В ProFTPD реализована технология chroot не в полном смысле этого понятия, а лишь частично, те позволяет нам в качестве корневой директории сделать директорию реального пользователя или ftp/anonymous. Данная технология позволяет запускать демон proftpd под указанным в настройках, директивы User и Group, пользователем с его uid/gid. А также изменять "корневую директорию" с помощью директив: * DefaultRoot - в конфигурации server config, , * <Anonymous root-directory> - в конфигурации server config,, Так к примеру, мы можем за"chroot"ить всех локальных пользователей указав в конфигурации серверной части: DefaultRoot ~ 5. Если у вас возникли проблемы с авторизацией 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 командой "ls */../*/../*/...", включите директиву фильтра DenyFilter \*.*/. Можно использовать эту директиву для дополнительной фильтрации. Например: DenyFilter \*.*/ 7. Если пользователи жалуются на длительную авторизацию - вход по ftp, воспользуйтесь директивой UseReverseDNS off, дополнительно к ней можно использовать директиву IdentLookups off. Например: UseReverseDNS off или UseReverseDNS off IdentLookups off 8. Конкретный пример настройки 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 ~. * Файл конфигурации proftpd 9. Проверка правильности синтаксиса конфигурации и работы ProFTPD. Для проверки правильности файла конфигурации, необходимо запустить демон со следующими ключами: ./proftpd -t Для определения с поддержкой каких модулей собран наш вариант proftpd, необходимо запустить демон с ключами: ./proftpd -l Для запуска демона в тестовом режиме, с выдачей диагностики на экран: ./proftpd -n -d 9 -c /path/proftpd.conf где -n - указывает что мы запускаем демон в режиме foreground -d 9 - указывает что в отладочном режиме с максимальным уровнем отладки 9. -c /path/proftpd.conf - указывает заданный файл конфигурации. _________________________________________________________________ Copyleft Andrey Lavrentyev _________________________________________________________________ Пример конфигурации: # This sample configuration file illustrates configuring two # anonymous directories, and a guest (same thing as anonymous but # requires a valid password to login) ServerName "ProFTPD Server" ServerType standalone # Port 21 is the standard FTP port. Port 1021 # If you don't want normal users logging in at all, uncomment this # next section #<Limit LOGIN> # DenyAll #</Limit> # Set the user and group that the server normally runs at. #User root #Group wheel User nobody Group nogroup #--lavr/pam #AuthPAMAuthoritative on #PersistentPasswd on #AuthPAM off #AuthPAMConfig ftp # 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 10 # Set the maximum number of seconds a data connection is allowed # to "stall" before being aborted. TimeoutStalled 300 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayFirstChdir .message # # Logging options # TransferLog /var/log/proftpd/xferlog # # Some logging formats # LogFormat default "%h %l %u %t \"%r\" %s %b" #LogFormat auth "%v [%P] %h %t \"%r\" %s" #LogFormat write "%h %l %u %t \"%r\" %s %b" # Our "basic" anonymous configuration, including a single # upload directory ("uploads") #<Anonymous ~ftp> <VirtualHost 159.93.17.121> <Anonymous ~ftp> #--lavr; this msg for <VirtualHost>, <Anonymous>, <Global> AccessGrantMsg "Anonymous access granted for %u." # User nobody # Group nogroup User ftp Group operator #--lavr don't check /etc/shells & ftp-shell RequireValidShell off #--lavr: AnonRequirePassword off for <Anonymous>, default=off AnonRequirePassword off #--lavr: AllowRetrieveRestart on [default] for <VirtualHost>, <Anonymous>, <Directory> #--lavr: AnonRatio foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess #--lavr: Bind address for server config, <VirtualHost> #--lavr: ByteRatioErrMsg foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess #--lavr: Class "name" limit|regex|ip value for server config, <VirtualHost> # see example: #Classes on #Class local limit 100 #Class default limit 10 #Class local regex .*foo.com #Class local ip 172.16.1.0/24 # #--lavr: Classes on|off for server config, <VirtualHost> # #--lavr: DefaultQuota foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess # #--lavr: DefaultRoot directory [group-expression] for server config, <VirtualHost>, <Global> #--lavr: DefaultServer on|off for server config,<VirtualHost> # #--lavr: DeferWelcome on|off for server config, <VirtualHost>, <Global> # #--lavr: Deny ["from"] "all"|"none"|host|network[,host|network[,...]] # for <Limit> # #--lavr: DenyAll for <Directory>, <Anonymous>, <Limit> # #--lavr: DisplayConnect filename - when connect # #--lavr: DisplayGoAway filename - when limit or deny #%T Current Time #%F Available space on file system #%C Current working directory #%R Remote host name #%L Local host name #%u Username reported by ident protocol #%U Username originally used in login #%M Max number of connections #%N Current number of connections #%E Server admin's e-mail address #%x The name of the user's class #%y Current number of connections from the user's class #%z Max number of connections from the user's class # #--lavr: DisplayLogin filename for server config, <VirtualHost>, <Anonymous> # #--lavr: DisplayQuit filename for server config, <VirtualHost>, <Anonymous> # #--lavr: DisplayReadme filename or pattern for server config, <VirtualHost>, <Anonymous> # #--lavr: ExtendedLog filename [[command-classes] format-nickname] for # server config, <VirtualHost>, <Anonymous> # classes: NONE=No commands; AUTH=Authentication commands (USER, PASS) # INFO=Informational commands (PWD, SYST, etc) # DIRS=Directory commands (LIST, CWD, MKD, etc) # READ=File reading (RETR) # WRITE=File/directory writing or creation # MISC=Miscellaneous commands (SITE, etc) # ALL=default # #--lavr: FileRatioErrMsg foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess # #--lavr: HostRatio foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess # #--lavr: IdentLookups on|off for server config, <VirtualHost>, <Global> # try to define remote-user name # #--lavr: <Limit command|command-group [command2 ..]> for # server config, <VirtualHost>, <Directory>,<Anonymous>, <Global>, .ftpaccess # command: # CWD (Change Working Directory) # MKD (MaKe Directory) # RNFR (ReName FRom), RNTO (ReName TO # DELE (DELEte) # RMD (ReMove Directory) # RETR (RETRieve) # STOR (STORe) # additional command-group: # READ;WRITE;DIRS;ALL;LOGIN # #--lavr: LeechRatioMsg foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess # #--lavr: LogFormat nickname "format-string" # default: LogFormat default "%h %l %u %t \"%r\" %s %b" # #--lavr: LoginPasswordPrompt on|off for server config, <VirtualHost>, <Anonymous>,<Global> # #--lavr: MaxClients number|none [message] for server config, <Anonymous>, <VirtualHost>;<Global> # #--lavr: MaxClientsPerHost number|none [message] # for server config, <Anonymous>, <VirtualHost>,<Global> # #--lavr: MaxInstances number - how many process-ftpd in standalone # #--lavr: MaxLoginAttempts number for server config, <VirtualHost>, <Global> # how many attempts for login-authenticate # #--lavr: Order allow,deny|deny,allow for <Limit> # examp: Order allow,deny: # 1. Check Allow directives. If one or more apply, exit with result: # ALLOW # 2. Check Deny directives. If one or more apply, exit with result: # DENY # 3. Exit with default implicit ALLOW # examp: Order deny,allow # 1. Check Deny directives. If one or more apply, exit with result: # DENY # 2. Check Allow directives. If one or more apply, exit with result: # ALLOW # 3. Exit with default implicit: DENY # #--lavr: PersistentPasswd on|off see Guide # #--lavr: Port port-number for server config, <VirtualHost> # #--lavr: RateReadBPS byte_per_sec-number for server config, <VirtualHost>, <Anonymous>,<Directory>, <Global> # #--lavr: RateReadFreeBytes number of bytes for server config, <VirtualHost>, <Anonymous>,<Directory>, <Global> # #--lavr: RateReadHardBPS on/off for server config, <VirtualHost>, <Anonymous>,<Directory>, <Global> # #--lavr: RatioFile foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess # #--lavr: Ratios foo1 foo2 foo3 for <Directory>, <Anonymous>, <Limit>,.ftpaccess # #--lavr: ServerIdent On|Off [identification string] # #--lavr: SocketBindTight on|off # #--lavr: SyslogFacility facility-level # mode=AUTH[AUTHPRIV],CRON,DAEMON,KERN,LPR,MAIL,NEWS,USER,UUCP,LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,LOCAL6,LOCAL7 # #--lavr: SystemLog filename|NONE # #--lavr: TimeoutIdle seconds - default=600 # #--lavr: TimeoutLogin seconds - default=300 # #--lavr: TimeoutStalled seconds - default=0 # #--lavr: TimeoutNoTransfer seconds - default=600 # #--lavr: UseFtpUsers on|off - see /etc/ftpusers # #--lavr: UseReverseDNS on|off # Allow logins if they are disabled above. #--lavr: Allow ["from"] "all"|"none"|host|network[,host|network[,...]] # see example, use in <Limit> # <Limit LOGIN> # Order Allow,Deny # Allow from # 128.44.26.,128.44.26.,myhost.mydomain.edu,.trusted-domain.org # Deny from all # </Limit> #<Limit LOGIN> #--lavr: AllowAll in <Directory>, <Anonymous>, <Limit>, .ftpaccess # AllowAll #</Limit> <Limit LOGIN> # Order allow,deny # Allow from all # Deny from .microsoft.com, .msn.com AllowAll </Limit> # Maximum clients with message MaxClients 10 "Sorry, max %m users -- try again later" # User ftp # Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Limit WRITE everywhere in the anonymous chroot <Limit WRITE> DenyAll </Limit> # An upload directory that allows storing files but not retrieving # or creating directories. <Directory incoming/moviez/incoming/*> # Normally, we want files to be overwriteable. AllowOverwrite on Umask 000 <Limit READ DIRS> AllowAll </Limit> <Limit STOR MKD RMD> AllowAll </Limit> </Directory> <Directory incoming/raid/*> # Normally, we want files to be overwriteable. AllowOverwrite on Umask 000 <Limit READ> DenyAll </Limit> <Limit STOR MKD RMD> AllowAll </Limit> </Directory> </Anonymous> </VirtualHost 159.93.17.121>

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
 
  • 1.1, Диам, 22:01, 11/10/2002 [ответить] [смотреть все]
  • +/
    Как можно поменять режим работы proftpd с активного на пассивный. Спасибо.
     
  • 1.3, Сергей, 00:57, 05/11/2005 [ответить] [смотреть все]
  • +/
    Как можно разрешить пользователю рпосматривать несколько папок например: /home/user домашняя, и /mnt/hd/soft. А остальные папки пользователь не мог просматривать.
    Заранее Спасибо.
     
     
  • 2.4, Whte, 15:05, 31/10/2006 [^] [ответить] [смотреть все]
  • +/
    тоже хотелось бы узнать :)
     
  • 2.7, xor, 09:39, 29/01/2010 [^] [ответить] [смотреть все]
  • +/
    бинди каталог

    mount --bind  /mnt/hd/soft /home/user/soft

     
  • 1.5, Роман, 18:17, 13/11/2006 [ответить] [смотреть все]
  • +/
    Вопрос.
    Директива(ы)
    RateReadBPS
    RRateReadFreeBytes
    RateReadHardBPS
    Почему то не работают. При загрузке демон пишет "Не известная директива" " -Fatal: unknown configuration directive ...."
    Что это может быть?
     
  • 1.6, Роман, 15:05, 14/11/2006 [ответить] [смотреть все]  
  • +/
    Разобрался.
    Все эти параметры заменены на единый параметр TransferRate
     
  • 1.8, Cully, 15:32, 13/10/2012 [ответить] [смотреть все]  
  • +/
    Как сделать так, чтобы файлы в папке удалялись через определенное время?
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor