Friday, August 14, 2009

Настройка Pure-FTPd c авторизацией по скрипту

Настройка Pure-FTPd c авторизацией по скрипту
Для Unix систем есть большое количество серверов ftp обладающих богатым функционалом, 
каждый из которых обладает своими особенностями. Но в один прекрасный день мне потребовалось организовать 
авторизацию с помощью скрипта, который в зависимости от IP адреса должен был пускать в разные домашние 
директории. После недолгих поисков в интернете я обнаружил, что у Pure-FTPd авторизация по скрипту - 
штатная возможность. Итак, приступим.

Скачиваем архив с актуальной на текущий момент версии (в момент написания этой статьи текущая версия 1.0.22)

  wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.22.tar.bz2

Распаковываем и простыми сочетаниями команд устанавливаем
  ./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 &

Осталось внести последние две строчки в автозагрузку, и на этом базовая настройка сервера закончена.
 
12.08.2009, Автор: ExpE , Источник: http://tips.compuserv.biz/index.php... 

No comments: