Proftpd настройка прав

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

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

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Evgen Vasko
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-05-25 16:27:56

Proftpd настройка прав

Непрочитанное сообщение Evgen Vasko » 2009-05-25 17:00:25

Добрый день.
Необходимо настроить Proftpd специальным образом.
Есть организация которая выкладывает файлы для клиентов на FTP в один каталог. Как можно настроить доступ к этому каталогу для клиентов, чтоб они могли выкачать файл только по ссылке (пример --ftp://xxx.yy.ua/test.txt) и не имели права видеть остальные файлы в каталоге. Пользователи в Proftpd записаны в файл (не системные).
:st: Спасибо !

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

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Proftpd настройка прав

Непрочитанное сообщение zg » 2009-05-25 17:17:01

запрети доступ на чтение для папки с файлами

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

%chmod +r test
%ls test/
1.sh    ff      ubstr
%chmod -r test
%ls test/
ls: : Permission denied
%cat test/1.sh
#!/bin/sh

SDIR=/usr/home/zg/test/ff
DDIR=/some/dir

ls -1 ff | awk '{print substr($1,1,4), substr($1,5,2), substr($1,7,2), $1}' | while read YEAR MONTH DAY FILE
do
  DIR=$DDIR/$YEAR/$MONTH/$DAY

  echo "[-d \"$DIR\"] || mkdir -p \"$DIR\""
  echo "mv $SDIR/$FILE $DIR/$FILE"
done

%

Evgen Vasko
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-05-25 16:27:56

Re: Proftpd настройка прав

Непрочитанное сообщение Evgen Vasko » 2009-05-25 17:37:04

Пример хороший. Тоесть клиент вбив --ftp://xxx.yy.ua/test.txt в брайзере и введая пароль скачает файл test.txt,
зайдя на --ftp://xxx.yy.ua/ не увидит не одного файла? А что должно быть прописано в proftpd.conf ? ;-)

AzureZ
мл. сержант
Сообщения: 124
Зарегистрирован: 2007-11-06 17:07:27
Откуда: Москва

Re: Proftpd настройка прав

Непрочитанное сообщение AzureZ » 2009-05-26 8:47:13

А если так попробовать. В proftpd.conf

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

<Directory /путь до папки>
        <Limit LIST>
        DenyAll
        </Limit>
</Directory>
Последний раз редактировалось AzureZ 2009-05-26 9:18:26, всего редактировалось 1 раз.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Proftpd настройка прав

Непрочитанное сообщение zg » 2009-05-26 8:59:52

Evgen Vasko писал(а):зайдя на --ftp://xxx.yy.ua/ не увидит не одного файла?
ему система не даст списка фалойв, но это крайне нежелательный вариант, лучше попробуй, как AzureZ советует.

Plohish
мл. сержант
Сообщения: 89
Зарегистрирован: 2009-12-23 21:22:15

Re: Proftpd настройка прав

Непрочитанное сообщение Plohish » 2010-05-01 12:51:49

господа, подскажите плиз
имеем Proftpd на роутере
из домашней сети файлы из FTP качаются нормально, а из внешней пишет Permission denied!
на маленьких файлах, до 300 килобайт, не заметно, успевает скачать, если больше, вот такая лажа.
сначала не мог понять почему не качает большие файлы, потом попробовал тотал командер и вижу Permission denied

прямых указаний сетей в конфигах Proftpd нету...

Аватара пользователя
baton4eg
сержант
Сообщения: 274
Зарегистрирован: 2009-10-11 14:36:35
Контактная информация:

Re: Proftpd настройка прав

Непрочитанное сообщение baton4eg » 2010-05-01 12:56:42

конфиг proftpd.conf в студию
и можно посмотреть /var/log/proftp-transfer.log и error.log на предмет ошибоки и что происходит
в sockstat можно посмотреть 21 порт
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!" (c)
"Я ем руками, она вилкой и ножом, я бью вилкой и ножом, она руками" (с)

Plohish
мл. сержант
Сообщения: 89
Зарегистрирован: 2009-12-23 21:22:15

Re: Proftpd настройка прав

Непрочитанное сообщение Plohish » 2010-05-01 13:00:05

конфиг

дело в том, что заходит на FTP из внешки нормально, и файлы видит, и даже закачивать можно, а скачать обратно можно только файлы которые сам закачивал, другие нет... сказал бы права на файлы виноваты, но из домашней сети те же файлы скачиваются нормально.

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

#
# For more informations about Proftpd configuration
# look at : http://www.proftpd.org/
#
# This is a basic ProFTPD configuration file (rename it to 
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.


# Конфиг proftpd - 2010-21-01


# имя сервера - показывается коннектящимся клиентам
ServerName              "Main FTP servant :)"
# тип сервера (даже не тип самого сервера, а тип его запуска,
# standalone/inetd - сам или через inetd)
ServerType              standalone
# смысл следующей директивы такой: если клиент коннектится не на имя
# а на IP или на виртуальный хост, не описанный в конфиге, то при
# установке в `off` он получит отлуп, если же установлено `on` то
# он будет обслужен `сервером по-умолчанию`
DefaultServer           on
# e-mail администратора (по идее для каждого ВиртуалХоста его можно
# поставить разный - но я делаю один сервер без извращений с
# виртуальными хостами)
ServerAdmin             plohish@server.net
# файло где хранится инфа о сессиях
#ScoreboardFile         /var/run/proftpd.scoreboard

# порт на котором работает сервер
Port                    21
#PassivePorts		49152 65534

# Маска с которой создаются новые файлы (не совсем маска - маска получается
# из этого значения, путём его вычитания из 777 - т.е. в даном случае получится
# маска 755)
Umask                   022

# Максимальное число `детей` (работает только в standalohe режиме)
# необходимо для защиты от атак типа `отказ в обслуживании` да и
# от перегрузки сервера поможет :)
MaxInstances            30

# Юзер от которого работает сервер
User                    ftp
# группа, под которой работает сервер
Group                   ftp

#Перекодировка на лету
LangEngine on
UseEncoding KOI8-R CP1251

# Тип авторизации (на самом деле - в каком виде хрянятся
# пароли в БД - в данном случае - открытым текстом)
SQLAuthTypes            Plaintext
# Кого и как аутентифицируем - on - всех и вся :)
# Но - если поставить `on` то он ломится в БД за группами.
# мне группы никчему. Посему поставил `users`
SQLAuthenticate         users
# инфа для соединения с MySQL сервером:
# имя_базы_данных@хост_где_MySQL:порт имя_пользователя пароль
SQLConnectInfo          proftpd@localhost:3306 name pass
# в каком порядке вернёт поля запрос - первое поле, это
# имя таблицы, где лежат пользователи
SQLUserInfo             `users_table` `username` `password` `uid` `gid` \
                        `homedir` `shell`
# должен ли быть у юзера (для того, чтобы он мог коннектится),
# `реальный` shell описанный в /etc/shells
RequireValidShell off

# лог файл работы с SQL
#SQLLogFile      /var/log/proftpd.log

# Вот тут моя натура склонная к ведению логов на всё в
# БД MySQL смогла разыграться на полную катушку :)
# Записываем удачные логины в БД. Общий смысл такой - создаём
# именованую кверю, с указанием что мы должны сохранять
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`

# логируем что сохраняет и тащщит с сервера:
# переменные
# %u - имя пользователя (с которым залогинился)
# %f - полный путь и имя файла который был скачан
# %b - число байт, которые были скачаны
# %h - имя клиента (из DNS), если не удалось разрешить - IP
# %a - IP-адрес клиента
# %m - имя команды полученной от клиента (RETR/STOR)
# %T - время (секунд) ушедшее на передачу файла клиенту

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`

# если вылезет проблема, типа тормозов при подключении
# (в момент установления коннекта `задумывается` на 10-20 секунд)
# то раскомментируйте следующие две строки
UseReverseDNS     off
IdentLookups      off

# если надо чтобы ВСЕ пользователи по ftp были ограниченны
# своей домашней директорией, то надо раскомментировать
# следующую строку:
#DefaultRoot            ~
# у меня хитрее сделано - себе я разрешил шариться по всему серверу
# а остальных за`chroot`ил. Если, например, надо чтобы пользователи
# могли по серверу шариться а анонимоусы нет, то надо указать !users
# также можно указать определённую группу.
DefaultRoot             ~       !pppppp

#AllowOverwrite		on
#AllowRetrieveRestart	on
#AllowStoreRestart	on
#AllowForeignAddress	on

# Директории
<Directory ~>
AllowOverwrite		on
AllowRetrieveRestart	on
AllowStoreRestart	on
<Limit Write>
AllowAll
</Limit>
<Limit READ>
AllowAll
</Limit>
</Directory>


<Anonymous /data/ftp/pub>
# пользователь от которого анонимоусы шарятся
User            ftp
# группа анонимоусов
Group           ftp
# альясы ананонимоусов (можно будет входить как ftp, а
# не anonymous)
UserAlias       anonymous ftp
# максимально число анонимоусов
MaxClients      10      "Sorry, max %m users - try again later"
<Limit WRITE>
AllowUser	ppppppp
DenyAll
</Limit>
</Anonymous>

Plohish
мл. сержант
Сообщения: 89
Зарегистрирован: 2009-12-23 21:22:15

Re: Proftpd настройка прав

Непрочитанное сообщение Plohish » 2010-05-02 9:04:00

извините, ошибся, даже те файлы которые сам закачивал, скачать нельзя... (из внешней сети) начинается скачка, и тут же пермишн дениед!
из домашней сети, под тем же именем и паролем, запросто всё работает... чудеса...

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

May  2 09:57:52 plohish proftpd[6762]: plohish.com (192.168.100.240[192.168.100.240]) - USER user: Login successful. 
May  2 09:59:06 plohish proftpd[6762]: plohish.com (192.168.100.240[192.168.100.240]) - notice: user user: aborting transfer: Permission denied 
May  2 09:59:10 plohish proftpd[6762]: plohish.com (192.168.100.240[192.168.100.240]) - notice: user user: aborting transfer: Permission denied 
May  2 09:59:23 plohish proftpd[6762]: plohish.com (192.168.100.240[192.168.100.240]) - notice: user user: aborting transfer: Permission denied 
May  2 09:59:32 plohish proftpd[6762]: plohish.com (192.168.100.240[192.168.100.240]) - notice: user user: aborting transfer: Permission denied 
May  2 10:01:11 plohish proftpd[6762]: plohish.com (192.168.100.240[192.168.100.240]) - FTP session closed. 

Plohish
мл. сержант
Сообщения: 89
Зарегистрирован: 2009-12-23 21:22:15

Re: Proftpd настройка прав

Непрочитанное сообщение Plohish » 2010-05-02 20:21:25

так, из за чего происходит косяк понял, вот правила ipfw

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

внутрення сетевуха fxp0
внешня сетевуха fxp1

${FwCMD} -f flush
# Правила для loopback
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
# Разрешаем обмен пакетами TCP через локальный интерфейс
${FwCMD} add allow tcp from any to any out via fxp0
# Правила nat-a, проброс портов
${FwCMD} nat 1 config log if fxp1 reset same_ports redirect_port tcp МАШИНКА_ВНУТРИ:порт1 порт1 redirect_port udp МАШИНКА_ВНУТРИ:порт2 порт2
${FwCMD} add nat 1 ip from any to any via fxp1
# Правила nat-а для локальный сети (правила шлюза)
${FwCMD} nat 2 config ip ВНЕШНИЙ_IP log
${FwCMD} add nat 2 ip from ВНУТРЕННЯЯ_СЕТЬ to ВНЕШНЯЯ_СЕТЬ
если убрать nat1, proftpd начинает нормально работать из внешней сети, но тогда весь nat пропадает...
подскажите плиз что нужно сделать?

Plohish
мл. сержант
Сообщения: 89
Зарегистрирован: 2009-12-23 21:22:15

Re: Proftpd настройка прав

Непрочитанное сообщение Plohish » 2010-05-03 9:38:46

вяло как то нынче на форуме... :(

сам спросил - сам ответил...
добавил до nat

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

${FwCMD} add allow tcp from any to me 21,50000-50100
${FwCMD} add allow tcp from me to any keep-state
в proftpd прописал порты для пассива 50000-50100
всё заработало, всем спасибо :)