Здравствуйте уважаемые участники форума!
Никак не удается разобраться с вопросом, связанным с квотированием дискового пространства для пользователей 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...
Спасибо.