|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> proftpd file auth"a
Proftpd - квоты и авторизация из файлов. Мониторинг.
Автор: gonzo111.
Вступление
Авторизация из файла
Квоты в файлах
Прочее. Что такое class в proftpd
Прочее. ProFTPD и IPNAT
Прочее. Мониторинг proftpd в jail
Литература
Вступление
Написал короткую заметку дабы не забыть.
Настраивал я недавно клетку для хостинга и понадобился мне в ней хороший ftp без мускула.
Выбор упал на proftpd- когда листаешь маны, то аж слюни текут сколько он умеет всего делать.
uname -a
FreeBSD server.k123.dp.ua 6.4-RELEASE-p9 FreeBSD 6.4-RELEASE-p9 #1:
proftpd -v
ProFTPD Version 1.3.3
| Итак ставим:
cd /usr/ports/ftp/proftpd
make install clean
[X] QUOTA Include mod_quota
|
Файловая авторизация
Мне надо было чтобы у FTP-пользователя не было реального shell и FTP-сервер был бы прост в обслуживании.
Proftpd поддерживает различные схемы авторизации пользователей (через базы данных, PAM-модули, LDAP), мне нужно авторизация через "альтернативный файл пользователей и паролей" (проще говоря текстовый файл).
Если в конфиге ничего не указывать про тип авторизации, то используется системный passwd.
Создаем в системе юзера ftp без шелла (/usr/sbin/nologin) от котрого будет работать proftpd.
Затем добавляем в proftpd.conf:
# Set the user and group under which the server will run.
User ftp
Group ftp
AuthUserFile /usr/local/etc/proftpd.passwd
AuthGroupFile /usr/local/etc/proftpd.group
RequireValidShell off # не проверять есть ли такой шелл на самом деле
DefaultRoot ~
<Directory ~>
AllowOverwrite on
<Limit Write>
AllowAll
</Limit>
<Limit READ>
AllowAll
#IgnoreHidden
</Limit>
#<Limit LOGIN>
#Allow test
#DenyAll
#</Limit>
</Directory>
| Заходим в архив /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
dir1=/usr/jails/web02
name=artem
Создание юзера
#./ftpasswd --name $name --home /usr/proftp_shara/$name --uid 1002
--gid 1002 \
--file $dir1/usr/local/etc/proftpd.passwd --shell /sbin/nologin --passwd
#mkdir -vp 755 ${dir1}/usr/proftp_shara/${name}
#chown -v 1002:1002 ${dir1}/usr/proftp_shara/${name}
#./ftpasswd --name $name --home /usr/local/www/inkom/files --uid 80 --gid 80 \
--file $dir1/usr/local/etc/proftpd.passwd --shell /sbin/nologin --passwd
Смена пароля
#./ftpasswd --passwd --name=$name --change-password --not-previous-password \
--file $dir1/usr/local/etc/proftpd.passwd
Создание групп
#ftpasswd --group --name=group-name --gid=group-id --member=user-member1 \
--file $dir1/usr/local/etc/proftpd.passwd
# --member=user-member2 ... --member=user-memberN
| получим в /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
# config quotas
# ===========
QuotaEngine on # включить квоту
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
QuotaLimitTable file:/usr/local/etc/proftpd.quota.limittab
QuotaTallyTable file:/usr/local/etc/proftpd.quota.tallytab
QuotaLog /var/log/proftpd/quota.log
| Аналогично, заходим в архив /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
dir1=/usr/jails/web02
name=artem
Cоздание таблиц квоты(первый раз)
#./ftpquota --create-table --type=limit \
--table-path=$dir1/usr/local/etc/proftpd.quota.limittab
во второй таблице хранится сколько сейчас закачано юзером мб
опция QuotaOptions ScanOnLogin позволяет при логине пересчитать сколько
реально там есть МБ(пересчет замедляет вход(!))
#./ftpquota --create-table --type=tally \
--table-path=$dir1/usr/local/etc/proftpd.quota.tallytab
создание квоты на юзера site,квота 15 мб
./ftpquota --name=$name --bytes-upload=15 --add-record --type=limit \
--quota-type=user --units=Mb --verbose \
--table-path=$dir1/usr/local/etc/proftpd.quota.limittab
Для изменения квоты юзера artem,квота 30 мб
#./ftpquota --name=$name --bytes-upload=30 --update-record --type=limit
--quota-type=user --units=Mb --verbose \
--table-path=$dir1/usr/local/etc/proftpd.quota.limittab
Удаление квоты
#ftpquota --delete-record --type=limit --name=browsers --quota-type=user \
--table-path=$dir1/usr/local/etc/proftpd.quota.limittab
# очистка таблицы текщего занятого места
#./ftpquota --delete-record --name=artem --verbose --quota-type=user \
--type=tally --table-path=$dir1/usr/local/etc/proftpd.quota.tallytab
Просмотр текущей квоты для всех (или пользователя name)
./ftpquota --show-records --units=Mb --type=limit \
--table-path=$dir1/usr/local/etc/proftpd.quota.limittab \
#| grep -A9 $name
echo
echo ===сколько сейчас занято========
echo
./ftpquota --show-records --units=Mb --type=tally \
--table-path=$dir1/usr/local/etc/proftpd.quota.tallytab \
#| grep -A9 $name
| --------— описание ключей ---------------
квота по байтам
#--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
Port 21
# для IPNAT
# Restrict the range of ports from which the server will select when sent the
# PASV command from a client. Use IANA-registered ephemeral port range of
# 49152-65534
PassivePorts 60123 60127
MasqueradeAddress kkkkk.dp.ua
| Сколько портов укажите столько и будет одновременно коннектов. kkkkk.dp.ua - ваше днс имя
Добавляюем в ipnat.conf
rdr tun0 195.248.xx.xx/32 port 10077 -> 10.0.0.35 port 21 tcp
rdr tun0 195.248.xx.xx/32 port 60123 -> 10.0.0.35 port 60123 tcp
rdr tun0 195.248.xx.xx/32 port 60124 -> 10.0.0.35 port 60124 tcp
rdr tun0 195.248.xx.xx/32 port 60125 -> 10.0.0.35 port 60125 tcp
rdr tun0 195.248.xx.xx/32 port 60126 -> 10.0.0.35 port 60126 tcp
rdr tun0 195.248.xx.xx/32 port 60127 -> 10.0.0.35 port 60127 tcp
|
Прочее. Мониторинг proftpd в jail
Конфиг monit(в портах) /usr/local/etc/monitrc
check system k.dp.ua
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 90% then alert
if cpu usage (user) > 95% then alert
if cpu usage (system) > 38% then alert
if cpu usage (wait) > 25% then alert
check device usr_fs with path /jail
if space usage > 80% for 5 times within 10 cycles then alert
# proftpd jail 10.0.0.35
check process proftpd_jail with pidfile \
/jail/web02.k.dp.ua/var/run/proftpd.pid
start program = "/usr/local/etc/script/ezjail_exec_web02_proftp.sh start"
stop program = "/usr/local/etc/script/ezjail_exec_web02_proftp.sh stop"
if failed host 10.0.0.35 port 21 protocol ftp with timeout 20 seconds then
restart
if 5 restarts within 8 cycles then timeout
# проверка первышения квот смотри логи в /usr/jails/web02.k.dp.ua
#/var/log/proftpd/quota.log
check file proftpd_quota_log with path
/usr/jails/web02.k.dp.ua/var/log/proftpd/quota.log
if match "removed" then exec "/usr/local/etc/script/sendxmpp В \
proftpd_jail был удален файл закачаный больше квоты"
| Скрипт /usr/local/etc/script/ezjail_exec_web02_proftp.sh
jail_id=`jls |grep web02.k.dp.ua | cut -c 4-8 -`
/usr/sbin/jexec $jail_id /usr/local/etc/rc.d/proftpd $1
| Список доп литературы
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
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=25932.
размещено: 2010-04-30,
последнее обновление: 2010-05-19,
автор: gonzo111
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
|
Статистика сайта
|
Сейчас на сайте находится: 38 чел.
|
За последние 30 мин было: 220 человек
|
За сегодня было 2962 показов, 741 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [1 шт.]