Для Unix систем есть большое количество серверов ftp обладающих богатым функционалом,
каждый из которых обладает своими особенностями. Но в один прекрасный день мне потребовалось организовать
авторизацию с помощью скрипта, который в зависимости от IP адреса должен был пускать в разные домашние
директории. После недолгих поисков в интернете я обнаружил, что у Pure-FTPd авторизация по скрипту -
штатная возможность. Итак, приступим.Скачиваем архив с актуальной на текущий момент версии (в момент написания этой статьи текущая версия 1.0.22)
wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftp...
Распаковываем и простыми сочетаниями команд устанавливаем
./configure --with-rfc2640 --with-everything --prefix=/usr/local/pure-ftpd
make
sudo make install--with-rfc2640 - необходима для перекодировки названий файлов на лету в разные кодировки
(в моем случае клиенты подсоединяются к серверу с кодировкой cp1251 а на сервере же кодировка UTF-8)--with-everything - создание демона с поддержкой всех функций Pure-FTPd
--prefix=/usr/local/pure-ftpd - каталог, куда собственно демон устанавливать
Теперь когда сервер установлен переходим к базовой конфигурации. Копируем конфигурационный файл в /etc из каталога с исходниками
cp configuration-file/pure-ftpd.conf /etc/pure-ftpd.conf
Добавляем следующие строки в конфигурационный файл:
ExtAuth /var/run/ftpd.sock # Включаем авторизацию по скрипту
UserBandwidth 100 # Ограничиваем полосу в 100 Kb/c для каждого пользователя,
# чтобы они не забивали весь канал
MaxDiskUsage 90 # Установив это значение, мы запрещаем загрузку файлов на сервер,
# в случае если осталось всего 10% свободного места
FileSystemCharset UTF-8 # Говорим что на сервере кодировка UTF-8
ClientCharset CP1251 # А у пользователей CP1251Создаем авторизующий скрипт /usr/local/pure-ftpd/sbin/ftp-auth-handler
Со следующим содержанием:if test "$AUTHD_REMOTE_IP" = "192.168.0.102"; then
echo 'auth_ok:1'
echo 'uid:69'
echo 'gid:42'
echo 'dir:/tmp'
else
echo 'auth_ok:0'
fi
echo 'end'Этот скрипт успешно авторизует любого пользователя с IP 192.168.0.201
Кроме $AUTHD_REMOTE_IP в скрипте можно использовать следующие переменные:
AUTHD_ACCOUNT
AUTHD_PASSWORD
AUTHD_LOCAL_IP
AUTHD_LOCAL_PORT
AUTHD_REMOTE_IP
AUTHD_ENCRYPTEDВ ответе скрипта можно передавать следующие параметры
uid:xxx - UID пользователя в системе
gid:xxx - GID пользователя в системе
dir:xxx - Абсолютный путь до домашней директории
throttling_bandwidth_ul:xxx - Ширина канала закачки на сервер
throttling_bandwidth_dl:xxx - Ширина канала скачки с сервера
user_quota_size:xxx - Дисковая квота пользователя в байтах
user_quota_files:xxx - Максимальное количество файлов для пользователя
per_user_max:xxx - Максимальное количество одновременных сессийПосле этого осталось запустить сам сервер.
Скопируем запускающий скрипт pure-config.pl из каталога с исходниками
cp configuration-file/pure-config.pl /usr/local/pure-ftpd/sbin/
Для запуска сервера выполняем следующую команду:
/usr/local/pure-ftpd/sbin/pure-config.pl /etc/pure-ftpd.conf
Для запуска демона авторизации выполняем это:
/usr/local/pure-ftpd/sbin/pure-authd -s /var/run/ftpd.sock -r /usr/local/pure-ftpd/sbin/ftp-auth-handler &Осталось внести последние две строчки в автозагрузку, и на этом базовая настройка сервера закончена.
URL: http://tips.compuserv.biz/index.php/component/content/articl...
Обсуждается: http://www.opennet.me/tips/info/2137.shtml
стесняюсь спросить... а в Вашем дистрибутиве есть "пакетный менеджер" ? или wget+configure+make дает что-то архикошерное?
В пакетах может оказаться что-то без чего-то.
Например, без поддержки rfc2640.
И еще, совет мог быть для debian, а людям подавай freebsd.
> В пакетах может оказаться что-то без чего-то."Может оказаться"? Тогда это -- не Ваш дистрибутив :).
> людям подавай freebsd
Там rfc2640 по умолчанию выключен, но включается он способом. не похожим на описаный выше.
А чем вас не устраивает wget+configure+make ????./configure --help
более гибко и кустомизированно не то что дефолт (по дефолту это тока в винде)
тем что установленный таким образом софт не будет виден среди установленных пакетов. что есть говно (ящитаю).
хотя если у Вас шлакварь или убунту это простительно;-)
>А чем вас не устраивает wget+configure+make ????
>
>./configure --help
>
>более гибко и кустомизированно не то что дефолт (по дефолту это тока
>в винде)Бессмысленным расходом собственного времени на сопровождение получившейся инсталляции. Вам знакомо понятие "хранилище обновлений по безопасности"? Или "portaudit"? А на дюжине серверов?
а какая проблема в том что он не будет виден среди установленных пакетов?
убонтовод? потерялся сразу?
>а какая проблема в том что он не будет виден среди установленных
>пакетов?
>убонтовод? потерялся сразу?а проблема одна. я получая машину после таких "админов" громко матом разговариваю. ибо вывод например sockstat -4l и pkg_info говорит о разных вещах. а теперь вопрос знатоку: откуда эти команды? из убунты?
+миллион
та же хрень.. недавно отказался от администрирования подобного веб сервера.
нормальный админ всегда соберет пакет.
>а какая проблема в том что он не будет виден среди установленных
>пакетов?Если у вас один сервер и одна собранная вручную установка ПО -- проблем нет. Но такие ситуации в бою уже не встречаются, только в учении остались.
>убонтовод? потерялся сразу?Фи. Как не стыдно.
Можете (как неубунтовод?) предложить разумную ручную реализацию того, что делает portaudit или обновление из update-хранилищ?
>[оверквотинг удален]
>
>Если у вас один сервер и одна собранная вручную установка ПО --
>проблем нет. Но такие ситуации в бою уже не встречаются, только
>в учении остались.
>>убонтовод? потерялся сразу?
>
>Фи. Как не стыдно.
>
>Можете (как неубунтовод?) предложить разумную ручную реализацию того, что делает portaudit или
>обновление из update-хранилищ?Он смог и написал статью. А половина сраных тем от убунтоводов и дебьянщиков нахер не нужны.
Забыл что такое команда which и locate ,,? быдло сборки пакетов не нужны.
>[оверквотинг удален]
>>Фи. Как не стыдно.
>>
>>Можете (как неубунтовод?) предложить разумную ручную реализацию того, что делает portaudit или
>>обновление из update-хранилищ?
>
>Он смог и написал статью. А половина сраных тем от убунтоводов и
>дебьянщиков нахер не нужны.
>
>Забыл что такое команда which и locate ,,? быдло сборки пакетов не
>нужны.Вы просто не умеете собирать пакеты.
Умею. Но я вижу очень часто , вопли по поводу сборок так называемых в ковычках.Вы видимо кроме opennet.ru ни на какие форумы не заходите.
http://www.linuxquestions.org/
welcome ./
>>Можете (как неубунтовод?) предложить разумную ручную реализацию того, что делает portaudit или обновление из update-хранилищ?
>Он смог и написал статью.Пруфлинк? Ой, извиняюсь... Вас не спрашивали?
>Забыл что такое команда which и locate ,,?Готов поверить. Иначе бы не намекали, что они обладают свойствами portaudit.
Вообще, если бы не анонимность, вы здорово опустили бы себя подобным комментарием.
Вопрос про аналог portaudit задавался не мне. Читай внимательно.А тебе не наплевать про анонимность?
Я тебе могу накидать вагон ссылок где нубы тыкаются если что то в пакете не собрано.
Мне срать как то , у меня все конфиги штатно лежат . А вот некоторые пакеты приходится
пересобирать руками. Да и какая тебе нахрен разника где бинарник?
Конфиги по дефолту. Если нет пиз..ы админу.
>>Пруфлинк? Ой, извиняюсь... Вас не спрашивали?
>Вопрос про аналог portaudit задавался не мне.Вы меня правильно поняли :)
>Я тебе могу накидать вагон ссылок где нубы тыкаются если что-то в пакете не собрано.
Ну, это уже по совсем другой теме, хотя она здесь тоже возникала: если вы всё ещё "тыкаетесь", значит, это пока что не ваш дистрибутив.
>Мне срать как то , у меня все конфиги штатно лежат .
Это в /etc, /usr/local/etc, /opt/*/etc, /val/lib/*/etc и /home/*/*/etc? Или вы патчите софт на предмет складывания конфигов не туда, куда upstream их суёт, а в какое-то "штатное" место?
>А вот некоторые пакеты приходится пересобирать руками. Да и какая тебе нахрен разника где бинарник?
Где -- разницы никакой. Главное, чтобы обновление N пакетов на M площадках не "приходилось собирать руками" N*M раз. Хотя бы свести этот гемор к M операциям обновления. Но лучше к нулю. Это если вы доверяете тому хранилищу, откуда обновляетесь автоматически.