The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Proftpd Не работает квотирование на FreeBSD 9"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (FTP / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Proftpd Не работает квотирование на FreeBSD 9"  +/
Сообщение от metallicafan email(ok) on 05-Дек-12, 05:17 
Здравствуйте уважаемые участники форума!
Никак не удается разобраться с вопросом, связанным с квотированием дискового пространства для пользователей ftp-сервера который реализован на Unix FreeBSD 9 через proftpd. Это собственно и подтолкнуло меня зарегистрироваться на этом полезном форуме который я часто посещал как гость...теперь самому нужна консультация.

Итак...

Нужен FTP-сервер на который пользователи могли бы выгружать файлы под своим именем пользователя и паролем при этом имея в своем распоряжении не более указанного количества дискового пространства на ftp-сервере...

Действия (источник http://www.bsdnotes.ru/?lnk=srv_proftpd):

Установка из портов:

1. Иду в каталог порта proftpd:
# cd /usr/ports/ftp/proftpd
2. Выполняю настройку конфигурации:
# make config
И здесь первое несоответствие с множеством статей по поводу квотирования. Во многих источниках говорится что  надо указать  пункт QUOTA            Include mod_quota для того чтобы связать proftpd с ftpquota но у меня почему-то этот модуль отсутствует...Всё что есть это:
HTMLDOCS
IPV6
MEMCACHE
NLS
PCRE
(Options for proftpd 1.3.4b)
3. Выполняю сборку:
# make install clean

Настройка анонимного доступа

1. Создаю каталог, который будет являться корневым каталогом для FTP сервера:
# mkdir -p /usr/ftp/pub
2. Задаю владельца каталога pub:
# chown nobody:nobody /usr/ftp/pub
3. Правлю proftpd.conf (/usr/local/etc/) к следующему виду:
ServerName "FTP server"
ServerType standalone
DefaultServer on
MaxLoginAttempts 20
UseReverseDNS off
IdentLookups off
DefaultRoot ~
RequireValidShell off

AuthUserFile /usr/local/etc/proftpd.pass
AuthGroupFile /usr/local/etc/proftpd.grp

SystemLog /var/log/proftpd/system.log
TransferLog /var/log/proftpd/transfer.log
ExtendedLog /var/log/proftpd/extended.log

ScoreboardFile /var/run/proftpd/proftpd.scoreboard

Port 21
Umask 022
MaxInstances 30

User nobody
Group nobody

LangEngine on
UseEncoding koi8-r cp1251

AccessDenyMsg "Access Denied"
AccessGrantMsg "Welcome to FTP server"

<Limit LOGIN>
  DenyAll
</Limit>

<Anonymous /usr/ftp>
  User anonftp
  Group anonftp
  UserAlias anonymous anonftp
  MaxClients 20 "Sorry, SERVER OVERLOADED."
  MaxClientsPerHost 2 "Sorry, You can't connect more than TWO times from ONE host"
  ShowSymlinks on
    <Limit WRITE>
        DenyAll
    </Limit>
    <Limit LOGIN>
        Order deny,allow
        Allow from all
    </Limit>
</Anonymous>
4. Создаю два файла - proftpd.pass и proftpd.grp для аутентификации пользователей.

# ee proftpd.pass

Содержимое файла /usr/local/etc/proftpd.pass:  
anonftp:*:65534:65534::/usr/ftp:/usr/sbin/nologin

5.  Редактирую proftpd.grp

# ee proftpd.grp

Содержимое файла /usr/local/etc/proftpd.grp:  
anonftp:x:65534:

6. Создаю каталог для логов сервера:

# mkdir /var/log/proftpd

7. Запускаю ftp:
# proftpd

8. Для автозагрузки в /etc/rc.conf прописываю строку:
proftpd_enable="YES"

Административный доступ
Формат файла proftpd.pass предусматривает кодирование пароля пользователя при помощи специального алгоритма на базе md5. Поэтому для добавления пользователя потребуется вписать пароль в файл proftpd.pass в кодированном виде. Для создания кодированного пароля потребуется модуль Crypt::PasswdMD5 для последующего написания скрипта. Устанавливаю его из портов:

# cd /usr/ports/security/p5-Crypt-PasswdMD5
# make install clean

Далее создаю скрипт htpass.pl

# touch /usr/local/bin/htpass.pl
# ee /usr/local/bin/htpass.pl

Содержимое файла /usr/local/bin/htpass.pl:  
#!/usr/bin/perl -wl
use strict;
use Crypt::PasswdMD5 qw(unix_md5_crypt);
my @salt = ( '.', '/', 0 .. 9, 'A' .. 'Z', 'a' .. 'z' );
my $password = shift || die "usage: htpass.pl password";
my $encrypted = unix_md5_crypt( $password, gensalt(8) );
print "Crypted pass $password:$encrypted";

sub gensalt {
  my $count = shift;
  my $salt;
  for (1..$count) {
    $salt .= (@salt)[rand @salt];
    }
    return $salt;
}

Устанавливаю права на выполнение:

# chmod 0755 /usr/local/bin/htpass.pl

Генерирую пароль 12345

# htpass.pl 12345

В ответ получаю:

Crypted pass 12345:$1$ygAg5c4h$pjfLl9Tt0cZMlYZljrAvS0

Добавляю в файл proftpd.pass пользователя "admin" с данным паролем:

# ee /usr/local/etc/proftpd.pass

Привожу файл к следующему виду:

Содержимое файла /usr/local/etc/proftpd.pass:  
anonftp:*:65534:65534::/usr/ftp:/usr/sbin/nologin
admin:$1$ygAg5c4h$pjfLl9Tt0cZMlYZljrAvS0:65534:65534::/usr/ftp:/usr/sbin/nologin

Открываю proftpd.conf и добавляю разрешение доступа для пользователя "admin"

Перезапускаю FTP сервер
# sh /usr/local/etc/rc.d/proftpd restart

И сервер готов авторизировать как анонимного пользователя, так и пользователя admin, который имеет полный доступ к содержимому FTP сервера.

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

Поэтому продолжил искать решение и наткнулся на описание mod_quotatab (http://www.castaglia.org/proftpd/contrib/ftpquota.html)

- Создаю таблицы

ftpquota.limittab
# ftpquota --create-table --type=limit

ftpquota.tallytab:
# ftpquota --create-table --type=tally

- Добавляю строки в proftpd.conf

<IfModule mod_quotatab_file.c>
QuotaEngine on
QuotaLog /var/log/proftpd/ftpquota.log
<IfModule mod_quotatab_file.c>
QuotaLimitTable file:/usr/local/etc/ftpquota.limittab
QuotaTallyTable file:/usr/local/etc/ftpquota.tallytab
</IfModule>
</IfModule>

- Создаю запись для ограничения дискового пространства пользователю в 200 мегабайт:
ftpquota -add-record --type=limit --name=admin --quota-type=user --bytes-upload=200 --units=Mb

- Просматриваю текущие квоты:
# ftpquota --show-records --type=limit
Вижу что квота задана для admin. Кстати команда ftpquota --show-records --type=limit срабатывает почему-то только если находится в /usr/local/etc/. Если находится к примеру в каталоге "/" и попросить показать квоты с указанием пути где находится файл ftpquota.limittab
# ftpquota --show-records --type=limit --path /usr/local/etc

в ответ получаю:
# ftpquota: unable to open ./ftpquota.limittab: No such file or directory
пока не понятно...

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

Пожалуйста направьте на путь истенный...Помогите, если кто сталкивался с квотами для ftp...

Спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Proftpd Не работает квотирование на FreeBSD 9"  +/
Сообщение от lavr email on 05-Дек-12, 10:46 
> Здравствуйте уважаемые участники форума!
> Никак не удается разобраться с вопросом, связанным с квотированием дискового пространства
> для пользователей ftp-сервера который реализован на Unix FreeBSD 9 через proftpd.
> Это собственно и подтолкнуло меня зарегистрироваться на этом полезном форуме который
> я часто посещал как гость...теперь самому нужна консультация.

<skipped>

> Пожалуйста направьте на путь истенный...Помогите, если кто сталкивался с квотами для ftp...

учиться читать и думать:

- изменения в proftpd - модульность

proftpd.conf
...
#LoadModule name
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c

- что мешает посмотреть скрипт ftpquota?

# /usr/local/bin/ftpquota --help
...
--table-path         Specifies the path to a quota table file to use.
...
--verbose            Toggles more verbose information about the doings of
                       the tool as it works.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Proftpd Не работает квотирование на FreeBSD 9"  +/
Сообщение от metallicafan email(ok) on 07-Дек-12, 06:40 
lavr, Спасибо Вам огромное! Всё сработало теперь...Вы действительно мне очень помогли и были правы," учиться читать и думать", увы не сообразил в конкретной ситуации...Всего наилучшего, премного благодарен! Тема закрыта.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру