суббота, 4 октября 2008 г.

Замена pure-ftpd-wrapper на pure-config в Debian

Продолжаю переносить статьи со старого блога. К статье могу добавить комментарий, что в принципе установка pure-ftpd из deb-src была сделана с одной лишь целью - ознакомиться с технологией. pure-ftpd можно просто поставить двоичным пакетом, а из тарболла с исходниками просто взять нужный нам wrapper и настроить скрипт в /etc/init.d на использование этого wrapper'а.

Перепробовал я под FreeBSD много разных FTP-серверов:
  1. родной bsdftpd, просто и со вкусом, ненужно заморачиваться с установкой, уже присутствует в самой системе;
  2. он-же, но споддержкой SSL и TSL - bsdftpd-ssl, после предыдущего практически не нужно ничего перенастраивать, но сразу добавляются шифрованные варианты протокола;
  3. proftpd с конфигурационным файлом, подобным оному в Apache, гибко, но тяжело. К тому же в своё время без сторонних патчей прикрутить русскую локаль было невозможно (только не кидайте камнями, типа это не по стандарту: оно бывает нужно, а добавить эту возможность в виде опции разработчики поленились);
  4. vsftpd, легко и безопасно, но почему-то тоже не прижился.
В поисках совершенства начал использовать Debian.

Человек я ленивый, а во FreeBSD тупо обновить систему с накатом обновлений безопасности сложновато:
  1. сама система - cvsup, make buildworld, make buildkernel, make installkernel, перезагрузка, смотрим как работает свежее ядро, затем make installworld;
  2. можно и проще freebsd_update, но если ядро собрано своё - опять-таки ядро придётся пересобирать;
  3. дерево портов cvsup или portsnap;
  4. проверка уязвимых установленных пакетов portaudit;
  5. установка свежих пакетов или установка из портов: portupgrade;
  6. исправление возможных глюков из-за обновлённых версий программ (конфиги поправить, запускные скрипты).
Некоторые пакеты не работают правильно, пока их не пересобирёшь из портов (бывало такое, бывало)! На это опять-таки нужно тратить время, ресурсы системы (а машинки бывают очень слабенькие - компиляция среднего размера пакетов может идти часами), или извращаться с монтированием удалённых каталогов, компилировать на более мощной системе.

В Debian тупо:
# apt-get update
# apt-get upgrade
И все обновления безопасности стоят в системе, конфигов править не нужно! Можно легко сопровождать таким способом десятки серверов, полезно лишь поставить на одну из машинок apt-cacher, чтобы не грузить почём зря официальные зеркала.

А учитывая, что в Debian есть достойная замена портам - deb-src, то жить становится значительно легче. И собственноручно собранные пакеты можно зафиксировать в системе, чтобы они не обновлялись вместе с остальными:
# dpkg --get-selections \* > selections.txt
Изменяем в selections.txt в строчке с названием пакета слово "install" на слово "hold".
# dpkg --set-selections < selections.txt
Захотелось мне поставить в качестве FTP-сервера pure-ftpd под Debian. Из достоинств: поддержка авторизации PAM (можно на свой вкус настроить на использование любых модулей), дедовский Unix (по файлам /etc/passwd, /etc/shadow, /etc/group), по собственной базе данных puredb, по базам данных в mysql и postgres, настройка дисковых квот, смена корня, ограничение пропускной способности и количества одновременных клиентов, поддержка различных кодовых страниц для конвертирования имён файлов и многое другое. Поставил, да вот незадача, у разработчиков Debian весьма нетрадиционное представление об удобстве его настройки. Поскольку pure-ftpd настраивается запуском с нужными опциями, а опций очень много, то хорошие люди придумали т.н. "wrapper", программу которая читает конфигурационный файл и запускает демон с нужными опциями. Так вот, в Debian кому-то очень понравилось хранить значения ключей настройки в отдельных файлах с соответствующими именами в каталоге /etc/pure-ftpd/conf/. Меня эта идея не вдохновила и я решил сменить перловый скрипт pure-ftpd-wrapper на стандартный pure-config.pl, идущий в комплекте с исходниками pure-ftpd. Устанавливаем пакеты, необходимые для установки из исходников (возможно я пропустил ещё какие-то нужные пакеты):
# apt-get install dpkg-dev
# apt-get install fakeroot
Скачиваем и распаковываем исходники pure-ftpd:
# apt-get source pure-ftpd
Переходим в каталог с исходниками:
# cd pure-ftpd-1.0.21
Устанавливаем пакеты, необходимые для построения пакета pure-ftpd из исходников:
# apt-get build-dep pure-ftpd
Строим пакет:
# dpkg-buildpackage -rfakeroot -us -uc
Как вариант, можно воспользоваться скриптами в каталоге с распакованным pure-ftpd:
# debian/rules build
# debian/rules binary
Выходим из каталога с исходниками:
# cd ..
И попадаем в каталог, где лежат свежепостроенные пакеты. Устанавливаем пакет pure-ftpd_1.0.21-8_i386.deb:
# dpkg -i pure-ftpd_1.0.21-8_i386.deb
Эта же технология применяется для установки любого пакета, если Вы хотите его настроить особым образом на этапе компиляции: наложить дополнительные патчи, изменить константы в исходных текстах, скомпилировать с дополнительными опциями или без ненужных. Далее, копируем новый скрипт в систему:
# cp pure-ftpd-1.0.21/configuration-file/pure-config.pl /usr/sbin/pure-ftpd-config
И устанавливаем права на выполнение:
# chmod a+x /usr/sbin/pure-ftpd-config
Теперь удаляем всё из каталога /etc/pure-ftpd/:
# rm -R /etc/pure-ftpd/*
И копируем сюда пример конфигурационного файла:
# cp pure-ftpd-1.0.21/configuration-file/pure-ftpd.conf /etc/pure-ftpd/
Исправляем скрипт запуска /etc/init.d/pure-ftpd, заменяем строчку:
WRAPPER=/usr/sbin/pure-ftpd-wrapper
На нашу:
WRAPPER=/usr/sbin/pure-ftpd-config
Добавляем после этого строчку:
CONFIG=/etc/pure-ftpd/pure-ftpd.conf
Заменяем в секциях case start и restart|force-reload:
--exec $WRAPPER -- $SUFFIX
на
--exec $WRAPPER $CONFIG -- $SUFFIX
Я собираюсь запускать pure-ftpd как самостоятельный сервер, поэтому меняю настройки запуска по-умолчанию в файле /etc/default/pure-ftpd-common: Заменяю
STANDALONE_OR_INETD=inetd
на
STANDALONE_OR_INETD=standalone
На этом пока что всё. К сожалению по этому серверу на русском языке очень мало информации, есть несколько how-to, но это не документация.

Комментариев нет: