Для 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.dev/tips/info/2137.shtml