proFTPd: кучка мелких траблов

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

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

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Abyrvalg
мл. сержант
Сообщения: 129
Зарегистрирован: 2009-03-04 10:24:44

proFTPd: кучка мелких траблов

Непрочитанное сообщение Abyrvalg » 2009-11-01 16:13:49

Привет тебе, о неустрашимый All!

В соответствии со Священным писанием поднял и настроил proFTPd 1.3.2a. Сразу скажу - с MySQL всё срослось, с этим проблем не испытываю. Проблемы образовались другого плана.

1. Проблема с правами на каталоги и файлы. Демон у меня стартует от имени юзера ftp, пребывающего в одноимённой группе. Домашним каталогом для всяческих юзеров я определил /var/ftp, там складируются подкаталоги юзеров. Для /var/ftp и подкаталогов владельцем выставлен ftp:ftp. Права доступа - 755.
Когда логинюсь каким-нибудь юзером (из локальной сети, без файрволла), он успешно заходит в свой каталог, успешно читает его содержимое, успешно скачивает файлы. А вот закачать или удалить не может. Хоть тресни. Проблему удаётся "решить", выставив на домашний каталог юзера права 777. Сами понимаете, это ни фига не решение проблемы. Где же грабли? Ведь юзер ftp:ftp, от имени которого и работает FTP-сервер, имеет все права на каталоги юзеров!

2. Проблема с доступом извне. Всё это безобразие установлено на машине, которая имеет подключается к инету через "Стрим". 21-й порт у них закрыт. Пришлось использовать другой (именно - TCP-порт 40). Открыв его в своём файрволле, я сперва не мог понять, почему извне FTP-сервер не работает корректно. Потом вспомнил, что нужно же ещё обеспечить порт FTPDATA, т.е. TCP-порт 20. К счастью, он не прикрыт "Стримом", поэтому я открыл его в файрволле. Однако это не шибко-то помогло. Из своей локальной сети (от которой файрволл не защищает, allow all) я вполне могу работать с FTP-сервером, скачивать и закачивать (исключая приведённую в п. 1 проблему), а вот извне - грабли. Из proFTPd FAQ я узнал, что FTP-клиент должен быть настроен на активный режим, и при открытых портах FTP (или аналог) и FTPDATA всё должно быть ок. Ниже приводится лог подключения извне, в роли FTP-клиента выступает Total Commander. Сперва клиент пытается подключиться (это удаётся после долгих тормозов), затем пытается закачать файл (ip.txt), неудачно. Прочитать содержимое каталога тоже не получается, равно как и скачать файл (russia_89.png) вслепую. Значительная часть команд (LIST, QUIT) выполнялась с большими тормозами, чего не было при работе из локальной сети.

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

----------
Connect to: (01.11.2009 15:55:44)
hostname=myserver.org:40
username=myuser
startdir=
myserver.org=xx.xx.xx.xx
220 ProFTPD 1.3.2a Server (MyServer) [xx.xxx.xx.xxx]
USER myuser
331 Необходим пароль для пользователя myuser
PASS ***********
230 Пользователь myuser подключён
SYST
215 UNIX Type: L8
FEAT
211-Возможности:
 MDTM
 MFMT
 LANG ru-RU.KOI8-R*
 MFF modify;UNIX.group;UNIX.mode;
 MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
 REST STREAM
 SIZE
211 Конец
Connect ok!
PWD
257 "/" является текущей директорией
Чтение каталога...
TYPE A
200 Тип установлен в A
PORT xxx,xxx,xx,xx,6,115
200 Команда PORT успешно обработана
LIST
PORT failed, try PASV mode!
PASV
TYPE I
425 Невозможно создать соединение данных: Operation timed out
PASV
227 Entering Passive Mode (xx,xxx,xx,xxx,213,27).
PORT xxx,xxx,xx,xx,6,177
200 Команда PORT успешно обработана
STOR ip.txt
425 Невозможно создать соединение данных: Operation timed out
Чтение каталога...
TYPE A
200 Тип установлен в A
PORT xxx,xxx,xx,xx,6,245
200 Команда PORT успешно обработана
LIST
PORT failed, try PASV mode!
PASV
Чтение каталога...
PASV
425 Невозможно создать соединение данных: Operation timed out
PORT xxx,xxx,xx,xx,7,31
227 Entering Passive Mode (xx,xxx,xx,xxx,220,188).
LIST
200 Команда PORT успешно обработана
SIZE russia_89.png
425 Невозможно создать соединение данных: Operation timed out
TYPE I
550 SIZE не разрешено в режиме ASCII
PORT 217,150,28,2,7,76
200 Тип установлен в I
RETR russia_89.png
200 Команда PORT успешно обработана
QUIT
(Всё вышеперечисленное совершалось при правах 777 на каталог пользователя, т.е. влияние проблемы из п. 1 ликвидировано.)

Вот мой конфиг:

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

ServerName                      "MyServer"
ServerAdmin                     root@myserver.org
ServerType                      standalone
DefaultServer                   on
ScoreboardFile          /var/run/proftpd/proftpd.scoreboard

LangEngine on
UseEncoding UTF-8 CP1251

Port                            40

Umask                           022
MaxInstances                    30
CommandBufferSize       512

User                            ftp
Group                           ftp

AllowOverwrite          on

<Limit SITE_CHMOD>
  DenyAll
</Limit>

SQLAuthTypes            Plaintext
SQLAuthenticate         users
SQLConnectInfo          ftp@localhost:3306 ftp ftp
SQLUserInfo             `users_table` `username` `password` `uid` `gid` \
                        `homedir` `shell`
RequireValidShell off
SQLLogFile      /var/log/proftpd.log
SQLLog          PASS            counter_login
SQLNamedQuery   counter_login   UPDATE "`last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 WHERE `username`='%u'" `users_table`
SQLLog          ERR_PASS        counter_err
SQLNamedQuery   counter_err     UPDATE "`last_err_login`=UNIX_TIMESTAMP(), `err_login_count`=`err_login_count`+1 WHERE `username`='%U'" `users_table`
SQLLog          RETR,STOR               log_story_transfer
SQLNamedQuery   log_story_transfer      INSERT "'', UNIX_TIMESTAMP(),'%u', '%f', '%b', '%h', '%a', '%m', '%T'" `xfer_table`
SQLLOG          ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO\
                                        log_err_modify
SQLNamedQuery   log_err_modify          INSERT "'', UNIX_TIMESTAMP(), '%u', '%f', '%h', '%a', '%m'" `xfer_errors`
UseReverseDNS     off
IdentLookups      off
DefaultRoot             ~       !admin

<Directory ~>
AllowOverwrite on
 <Limit Write>
  AllowAll
 </Limit>
 <Limit READ>
  AllowAll
 </Limit>
</Directory>

<Anonymous /var/ftp/ftp>
User            ftp
Group           ftp
UserAlias       anonymous ftp
MaxClients      10      "Sorry, max %m users - try again later"
 <Limit WRITE>
  DenyAll
 </Limit>
</Anonymous>
Вот права доступа на каталоги юзеров:

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

[root@myserver /var/ftp]# ls -alF
total 10
drwxr-xr-x   5 ftp   ftp    512  1 ноя 12:18 ./
drwxr-xr-x  26 root  wheel  512  1 ноя 01:18 ../
drwxr-xr-x   2 ftp   ftp    512  1 ноя 01:19 admin/
drwxr-xr-x   2 ftp   ftp    512  1 ноя 12:18 ftp/
drwxrwxrwx   2 ftp   ftp    512  1 ноя 15:44 myuser/
(как видите, для юзера myuser пришлось выставить 777, чтоб всё работало; если залогиниться под юзером admin, то этот юзер получит отлуп на попытки закачать или удалить файл)

Где грабли, братия?

Хостинговая компания 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/

Gerk
сержант
Сообщения: 194
Зарегистрирован: 2009-09-23 23:01:37
Откуда: Симферополь, UA

Re: proFTPd: кучка мелких траблов

Непрочитанное сообщение Gerk » 2009-11-01 18:12:10

Настройке ftp-сервер и фаервол для пассивного режима, т.к.
В активном режиме, когда клиент говорит "Привет!" он так же сообщает серверу номер порта (из динамического диапазона 1024-65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения для передачи данных. FTP-сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP-порта 20 для передачи данных. Для клиента такое соединение является входящим, так что зачастую работа в активном режиме клиентов, находящихся за файрволлом или NAT затруднена или требует дополнительных настроек.

Abyrvalg
мл. сержант
Сообщения: 129
Зарегистрирован: 2009-03-04 10:24:44

Re: proFTPd: кучка мелких траблов

Непрочитанное сообщение Abyrvalg » 2009-11-01 22:02:13

Сервер-то как специально настраивать для пассивного режима? Разве он не поддерживает оба режима в зависимости от запроса клиента?
В FAQ программы, наоборот, подчёркивается, что для работы через файрволл удобней активный режим, а пассивный практически невозможно реализовать.

Gerk
сержант
Сообщения: 194
Зарегистрирован: 2009-09-23 23:01:37
Откуда: Симферополь, UA

Re: proFTPd: кучка мелких траблов

Непрочитанное сообщение Gerk » 2009-11-02 16:02:25

Abyrvalg писал(а):Сервер-то как специально настраивать для пассивного режима? Разве он не поддерживает оба режима в зависимости от запроса клиента?
В FAQ программы, наоборот, подчёркивается, что для работы через файрволл удобней активный режим, а пассивный практически невозможно реализовать.
Настройка proftpd в пассивном режиме: http://brandonhutchinson.com/passive_proftpd.html,
не забудьте после этого ещё разрешить входящие для этого диапазона на фаерволе.
Оба режима proftpd поддерживает, но пассивный режим по умолчанию отключён http://www.proftpd.org/docs/directives/ ... SSIVEPORTS
Как-то Вы оригинально FAQ прочитали...

Abyrvalg
мл. сержант
Сообщения: 129
Зарегистрирован: 2009-03-04 10:24:44

Re: proFTPd: кучка мелких траблов

Непрочитанное сообщение Abyrvalg » 2009-11-03 16:12:52

Настройка proftpd в пассивном режиме
Ваша правда... Заработало. Спасибо!
Как-то Вы оригинально FAQ прочитали...
Чего уж там, каюсь - как обычно, прочитал по диагонали.

А вот первая проблема (с доступом к каталогам юзеров) так и не решилась. Уже голову сломал. Ведь простая должна быть. А где грабли - не пойму.

Abyrvalg
мл. сержант
Сообщения: 129
Зарегистрирован: 2009-03-04 10:24:44

Re: proFTPd: кучка мелких траблов

Непрочитанное сообщение Abyrvalg » 2009-11-03 17:08:28

Всё, допёр. Права на каталоги юзеров выставлялись в соответствии с их uid'ами, прописанными в БД. Я к этому вопросу невнимательно отнёсся и поплатился.
Всем спасибо!