Замена 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, легко и безопасно,s но почему-то тоже не прижился.

В поисках совершенства начал использовать Debian.

Человек я ленивый, а во FreeBSD тупо обновить систему с накатом обновлений безопасности сложновато:

  1. сама система - cvsup, make buildworld, make buildkernel, make installkernel, перезагрузка, смотрим как работает свежее ядро, затем make installworld;

    можно и проще freebsd_update, но если ядро собрано своё - опять-таки ядро придётся пересобирать;

  2. дерево портов cvsup или portsnap;
  3. проверка уязвимых установленных пакетов portaudit;
  4. установка свежих пакетов или установка из портов: portupgrade;
  5. исправление возможных глюков из-за обновлённых версий программ (конфиги поправить, запускные скрипты).

Некоторые пакеты не работают правильно, пока их не пересобирёшь из портов (бывало такое, бывало)! На это опять-таки нужно тратить время, ресурсы системы (а машинки бывают очень слабенькие - компиляция среднего размера пакетов может идти часами), или извращаться с монтированием удалённых каталогов, компилировать на более мощной системе.

В 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, но это не документация.

Написать автору