Proftpd и его настройка.

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Proftpd и его настройка.

Непрочитанное сообщение InventoR » 2011-04-10 23:21:40

Поставил proftpd из репозитария.


Полный его конфиг выглядит по умолчанию так:

Код: Выделить всё

[root@gw sysconfig]# grep -v -E "#|^$"  /etc/proftpd.conf
ServerName                      "ProFTPD server"
ServerIdent                     on "FTP Server ready."
ServerAdmin                     root@localhost
DefaultServer                   on
VRootEngine                     on
DefaultRoot                     ~ !adm
VRootAlias                      etc/security/pam_env.conf /etc/security/pam_env.conf
AuthPAMConfig                   proftpd
AuthOrder                       mod_auth_pam.c* mod_auth_unix.c
UseReverseDNS                   off
User                            nobody
Group                           nobody
MaxInstances                    20
UseSendfile                     off
LogFormat                       default "%h %l %u %t \"%r\" %s %b"
LogFormat                       auth    "%v [%P] %h %t \"%r\" %s"
<IfDefine TLS>
  TLSEngine                     on
  TLSRequired                   on
  TLSRSACertificateFile         /etc/pki/tls/certs/proftpd.pem
  TLSRSACertificateKeyFile      /etc/pki/tls/certs/proftpd.pem
  TLSCipherSuite                ALL:!ADH:!DES
  TLSOptions                    NoCertRequest
  TLSVerifyClient               off
  TLSLog                        /var/log/proftpd/tls.log
  <IfModule mod_tls_shmcache.c>
    TLSSessionCache             shm:/file=/var/run/proftpd/sesscache
  </IfModule>
</IfDefine>
<IfDefine DYNAMIC_BAN_LISTS>
  LoadModule                    mod_ban.c
  BanEngine                     on
  BanLog                        /var/log/proftpd/ban.log
  BanTable                      /var/run/proftpd/ban.tab
  BanOnEvent                    MaxLoginAttempts 2/00:10:00 01:00:00
  BanControlsACLs               all allow user ftpadm
</IfDefine>
<Global>
  Umask                         022
  AllowOverwrite                yes
  <Limit ALL SITE_CHMOD>
    AllowAll
  </Limit>
</Global>
<IfDefine ANONYMOUS_FTP>
  <Anonymous ~ftp>
    User                        ftp
    Group                       ftp
    AccessGrantMsg              "Anonymous login ok, restrictions apply."
    UserAlias                   anonymous ftp
    MaxClients                  10 "Sorry, max %m users -- try again later"
    DisplayLogin                /welcome.msg
    DisplayChdir                .message
    DisplayReadme               README*
    DirFakeUser                 on ftp
    DirFakeGroup                on ftp
    <Limit WRITE SITE_CHMOD>
     DenyAll
    </Limit>
    <Directory uploads/*>
      AllowOverwrite            no
      <Limit READ>
        DenyAll
      </Limit>
      <Limit STOR>
        AllowAll
      </Limit>
    </Directory>
    WtmpLog                     off
    ExtendedLog                 /var/log/proftpd/access.log WRITE,READ default
    ExtendedLog                 /var/log/proftpd/auth.log AUTH auth
    ExtendedLog                 /var/log/proftpd/all.log ALL
  </Anonymous>
</IfDefine>
[root@gw sysconfig]#

А вот ошибка которая показывается на клиенте во время попытки записать файл в uploads

Код: Выделить всё

150 Opening ASCII mode data connection for MLSD
Загрузка
Ожидание ответа сервера...
226 Transfer complete
TYPE I
200 Type set to I
PORT 192,168,10,2,11,91
200 PORT command successful
STOR telephone.txt
550 telephone.txt: Operation not permitted
OFFLINE6, error=0
----------
Connect to: (10.04.2011 19:13:01)
hostname=192.168.10.1
username=anonymous
startdir=/uploads
Методом вычисления была найдено что на запрет записи влияет секция:

Код: Выделить всё

<Limit WRITE SITE_CHMOD>
  DenyAll
</Limit>
А конкретнее слово WRITE, как только оно здесь присутствует, сразу появляется ошибка.
Но ведь по идее запрет записи распространяется на корневую директорию, а вот на подпапки отдельные права, но как не пробовал не хочет работать, а как только удаляешь WRITE то сразу начинает писать.
Права на /var/ftp/uploads стоят в режиме ftp и 777

Подскажите, как правильно быть в этой ситуации, ведь когда разработчики писали конфиг они придерживались какой-то идеологии.
ну вот и сказочке конец, кто слушал, тот молодец.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

ink08
рядовой
Сообщения: 21
Зарегистрирован: 2010-07-02 23:31:20

Re: Proftpd и его настройка.

Непрочитанное сообщение ink08 » 2011-04-11 0:12:22

Most <Limit> sections appear within <Directory> sections in proftpd.conf. This means that, like the other <Directory> configuration effects, the <Limit>s will be inherited by all subdirectories that appear in the <Directory> path, unless explicitly overridden by a "closer" <Limit> section. This means that one could configure a <Limit> section denying all FTP commands for all directories, and then explicitly allow the READ or WRITE FTP command groups in appropriate subdirectories (e.g. pub/ or incoming/ directories).
т.е. права наследуются, рекомендуют установить запреты для корня, и разрешать отдельно для нужных ресурсов

Код: Выделить всё

<Directory uploads/*>
      AllowOverwrite            no
      <Limit READ>        # это перенести в корень
        DenyAll
      </Limit>
      <Limit STOR WRITE>
        AllowAll
      </Limit>
    </Directory>

Код: Выделить всё

<Limit ALL SITE_CHMOD>
    AllowAll
  </Limit>
тут 2 ошибки, 1 - ALL определяет все права, т.е. незачем дописывать SITE_CHMOD, 2 - не безопасно писать тут AllowAll