Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
Итак ставим:
|
Файловая авторизация
Мне надо было чтобы у FTP-пользователя не было реального shell и FTP-сервер был бы прост в обслуживании.
Proftpd поддерживает различные схемы авторизации пользователей (через базы данных, PAM-модули, LDAP), мне нужно авторизация через "альтернативный файл пользователей и паролей" (проще говоря текстовый файл).
Если в конфиге ничего не указывать про тип авторизации, то используется системный passwd.
Создаем в системе юзера ftp без шелла (/usr/sbin/nologin) от котрого будет работать proftpd.
Затем добавляем в proftpd.conf:
|
Заходим в архив /usr/ports/distfiles/proftpd-1.3.3.tar.bz2 //contrib и берем перловский скрипт ftpasswd.
Курим ман на офф сайте
http://www.proftpd.org/docs/contrib/ftpasswd.html
В итоге у меня получилась такая шпаргалка
/usr/local/etc/scripts/Proftpd/proftpd_genpass.sh
|
получим в /usr/local/etc/proftpd.passwd
artem:$1$pqOzVW4E$NlCrBCSZ0G5sv1:1002:1002:: /usr/proftp_shara/artem:/sbin/nologin
Смысл такой создается свой аналог системного /etc/passwd в каталоге.Здесь сперва идет его имя, потом хэш пароля,ID юзера (реального любого который есть в системе например нашего ftp),ID группы(реальной группы),каталог куда будет доступ у этого юзера по фтп,пустой шелл.
Не забудьте создать эти каталоги и выставить права такие чтоб у этих ID было право на запись. Таким образом на одного юзера системного можно назначить кучу виртульных логинов proftp со своими каталогами и паролями. Полученый файл можно свободно редактировать текстовым редактором, дополнительные файлы типа pwd.db ему не нужны.
По аналогии создается файл групп proftpd.group, аналог /etc/group, в принципе его можно и руками создать:
test:*:1002:
site:*:80:artem,petrov
Название группы , ее ID, список, кроме одноименного, юзеров которые туда входят.В принципе файл вообще может быть пустым, он используется в конфигах самого proftp для установки различных прав на целую группу юзеров.
Утилита ftpwho позволит глянуть кто сейчас залогинился.(для корректной работы проверьте чтоб было в конфиге ScoreboardFile /var/run/proftpd.scoreboard)
Квоты в файлах
Квоты реализуются отдельным модулем mod_quotatab, который умеет хранить квоты используя файлы,LDAP,RADIUS,SQL.При сборке не забываем его указать - [X] QUOTA Include mod_quota
Добавляем в proftpd.conf
|
Аналогично, заходим в архив /usr/ports/distfiles/proftpd-1.3.3.tar.bz2 //contrib и берем перловский скрипт ftpquota.
Курим ман на офф сайте http://www.proftpd.org/docs/contrib/mod_quotatab.html и тут http://www.proftpd.org/docs/howto/Quotas.html
Используется две таблицы в первой лежат квоты, во второй лежит информация сколько сейчас занято.
В итоге у меня получилась так:
/usr/local/etc/scripts/Proftpd/proftpd_quota.sh
|
--------— описание ключей ---------------
квота по байтам
#--bytes-upload --bytes-download --bytes-xfer (скач/загружено вместе)
квота по количеству файлов
#--files-upload --files-download --files-xfer (колич файлов скач/загруж вместе)
метод лимита квоты
#--limit-type "hard"(по умолчанию идет) -закачует на сервер пока есть место,
а потом удаляет последний закачивемый( или один большой) файл,
"soft" -разрешит закачать на сервер большой
файл сверх квоты (!), а следующий файл уже не даст
тип того, кто будет подвергатся квотированию
#--quota-type "user", "group", "class", или "all" (весь сервак).
# "group" все юзеры входящие в группу
# "class" список IP образуют класс
имя того кто будет квотироваться
#--name имя записи user/login name(логин), group name(имя группы), или
class name(имя класса)
#или игнорируется если --quota-type all
#--verbose писать лог
Глянуть сколько осталось квот можно тремя способами
- как указано выше, (для всех) запустив скрипт (ftpquota --show-records)
- залогинившись на ftp под нужным юзером и написать ftp>quote site quota,
- можно еще использовать сообщение при логине используя директиву DisplayLogin и переменные модуля квот http://www.proftpd.org/docs/contrib/mod_quotatab.html , но у меня директива что то не захотела работать.
Внимание! Модуль квот проверяет владельца файла и группы в соотвествии с системными UID/GUID, про виртуального владельца он знать не знает. Поэтому при доступе с разными логинами на одну у ту же шару и выключеной опции ScanOnLogin возникают некоторые проблемы в квотах на ЮЗЕРА (USER):
-если удалять чужие файлы с другого логина, но с системным UID таким же как у вас, то занятое место будет отниматься у вас, а у того вообще ничего не произойдет. В конце концов это приведет к тому, что у него якобы будет занято места больше(в tallytab), чем есть на самом деле(!).
-если удалять чужие файлы с другого логина, владелец которых с другим системным UID, занятое место будет правильно отниматься у чужого, притом фтп подумает, что владельцем файла есть тот, кто первый будет в списке proftpd.passwd (!) с таким UID.Та же история с разными системными группами...
Как предупреждать админа о превышении квоты смотри раздел Мониторинг
Прочее. Что такое class в proftpd
Наборы адресов(IP,имена) можно обьеденять в классы и затем ставить для них квоты и различные права
proftpd.conf:
# <Class test1>
# From 192.168.0.0/16
# From !1.2.3.4
# From proxy.*.com # не забудте проверить работу днс сервера и обратный ресолвинг тоже
# From my.example.com #врубить UseReverseDNS on
# по умолчанию в класс попадет то значение что первее, можно сказать между значения стоит "или"
# Satisfy all #позволит проверять все строки, можно сказать между значения ставит логическое "и"
# </Class>
можно использовать классы для доступа и для квот,а можно и другие ограничения лепить если включен mod_ifsession
# <Limit ALL>
#AllowClass DenyClass DisplayGoAway MaxClientsPerClass
# AllowClass internal
# DenyAll
# </Limit>
# <IfClass !test1>
# MaxClients 25
# </IfClass>
Прочее. ProFTPD и IPNAT
При использовании IPNAT возникают некоторые трудности.
Добавляюем в proftpd.conf
|
Сколько портов укажите столько и будет одновременно коннектов. kkkkk.dp.ua - ваше днс имя
Добавляюем в ipnat.conf
|
Прочее. Мониторинг proftpd в jail
Конфиг monit(в портах) /usr/local/etc/monitrc
|
Скрипт /usr/local/etc/script/ezjail_exec_web02_proftp.sh
|
Список доп литературы
http://www.proftpd.org/docs/contrib/ftpasswd.html
http://www.proftpd.org/docs/contrib/mod_quotatab.html
http://www.proftpd.org/docs/howto/Quotas.html
http://www.proftpd.org/docs/directives/linked/config_ref_Class.html
http://linux.yaroslavl.ru/docs/serv/ProFTPD.html
http://www.lissyara.su/articles/freebsd/programms/proftpd+mysql/
http://www.opennet.ru/base/net/proftpd_setup.txt.html
http://www.opennet.ru/base/net/adv_proftpd.txt.html
http://uvsw.narod.ru/project/proftpd.html
http://www.opennet.ru/base/net/proftpd_mysql_quota.txt.html
http://unixforum.org/index.php?showtopic=107132
размещено: 2010-04-30,
последнее обновление: 2010-05-19,
автор: gonzo111
MASiK, 2010-08-30 в 13:12:22
Создание групп
#ftpasswd --group --name=group-name --gid=group-id --member=user-member1 \\
--file $dir1/usr/local/etc/proftpd.passwd
Наверно всё таки
/usr/local/etc/proftpd.group
А в остальном хорошая статья )
Всё работает спасибо )
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [1 шт.]