From: CoderInside <coder@linuxportal.vrn.ru.>
Newsgroups: email
Date: Mon, 27 Feb 2007 14:31:37 +0000 (UTC)
Subject: Виртуальные серверы на базе VSFTPD
Источник: Воронежский Linux портал
Содержание
1 Введение
2 Установка сервера
3 Теория реализации виртуальных FTP серверов
4 Установка xinetd
5 Создание общей структуры каталогов
6 Настройка анонимного сервера
7 Настройка сервера с доступом только по учетным записям
Введение
В статье рассматривается один из способов создания виртуальных FTP
серверов на базе "самого быстрого и безопасного" FTP демона -
VSFTPD. В примере рассматривается создание
двух виртуальных серверов. Первый - полностью анонимный, с двумя
директориями pub и incoming (наверное самый распространенный вариант). В
каталоге incoming пользователи смогут создавать директории, загружать и
скачивать файлы. Удалять закачанное - нельзя. В будущем содержимое этой
директории должно анализироваться администратором ftp сервера.
Администратор должен удалять мусор а все нужное и полезное перемещать в
директорию pub. К директории pub пользователи имеет доступ только для
чтения. Второй - с доступом только по учетным записям. Аккаунт anonymous
отсутствует. "Изюминка" его реализации - индивидуальная конфигурация для
каждого пользователя. Итак, начнем...
Установка сервера
# installpkg vsftpd-2.0.5-i486-1.tgz
Создаем загрузочный скрипт /etc/rc.d/rc.vsftpd
#!/bin/sh
ftp_start()
{
echo "Starting VSFTPD: "
if ! ps axc | grep -q " vsftpd" ; then
vsftpd &
else
echo "VSFTPD already running!"
fi
}
ftp_stop()
{
if ps axc | grep -q " vsftpd" ; then
killall vsftpd
else
echo "VSFTPD not running!"
fi
}
ftp_restart()
{
ftp_stop
sleep 1
ftp_start
}
case "$1" in
'start')
ftp_start
;;
'stop')
ftp_stop
;;
'restart')
ftp_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
Делаем его исполняемым
# chmod a+x /etc/rc.d/rc.vsftpd
По умолчанию, домашняя директория пользователя FTP - /home/ftp. Я предпочитаю
все что предоставляет компьютер как сервер - размещать в директории /srv.
Например /srv/ftp, /srv/samba, /srv/www. Имхо так как-то порядка в системе
больше :) Но это только мое ИМХО, а так - "на вкус и цвет все фломастеры
разные" ;) Открываем файл /etc/passwd, ищем пользователя ftp и меняем ему
домашнюю директорию на /srv/ftp. Если вы предпочитаете другое расположение
- замените все пути описанные ниже с /srv/ftp на ваши.
Теория реализации виртуальных FTP серверов
Виртуальные хосты на VSFTPD можно организовать двумя способами. Первый
способ: запустить нужное количество серверов в режиме демона и в
конфигурационном файле каждого сервера указать слушаемые IP адреса
listen_address=x.x.x.x. Т.е. если нужно 10 вируальных FTP серверов -
нужно запусть 10 копий vsftpd. Как видно это не самый лучший способ.
Врядли к этим 10 серверам постоянно будут подключены клиенты. Гораздо
экономнее запускать VSFTPD по требованию от суперсервера. Стандартный
inetd входящий в поставку дистрибутива Slackware нам не подойдет потому,
что в нем нельзя указать IP на котором будут слушаться соединения.
Заменим inetd на xinetd.
Установка xinetd
Останавливаем суперсервер
# /etc/rc.d/rc.inetd stop
Удаляем inetd
# removepkg inetd
Делам файл /etc/rc.d/rc.inetd неисполняемым
# chmod a-x /etc/rc.d/rc.inetd
Устанавливаем xinetd
# installpkg xinetd-2.3.14-i486-1bms.tgz
Переименовываем файл rc.xinetd.new в rc.xinetd
mv /etc/rc.d/rc.xinetd.new /etc/rc.d/rc.xinetd
Делам его исполняемым
chmod a+x /etc/rc.d/rc.xinetd
Из файла /etc/rc.d/rc.local.new копируем строки запуска сервера в наш
файл /etc/rc.d/rc.local. Руками переписывать - лень, перенаправим вывод
всего файла в конец нашего rc.local. Откроем файл /etc/rc.d/rc.local.new
и удалим из него все строки до # Start the xinetd server. Копируем текст
в наш rc.local
Видим что 17-го декабря 2006, по запросу с адреса 127.0.0.1 был запущен ftp сервер и ему был присвоем pid 3195. Здорово! Чтобы было еще интереснее в файле /etc/xinetd.conf допишем строку
log_on_success = HOST
до
log_on_success = HOST USERID PID DURATION EXIT
Перезапустим сервер и теперь в логах будет оботбражаться даже
продолжительность вызванных соединений ;)
Создание общей структуры каталогов
Займемся виртуальными хостами. Т.к. виртуальных FTP может быть и больше
10, чтобы не мусорить в /etc желательно создать директорию /etc/vsftpd
# mkdir /etc/vsftpd
А в нем, так как у нас будет два вируальных FTP сервера - создать
директории для каждого из них Например у нас будут 2 ftp на адресах
192.168.226.3 (ftp1) и 192.168.226.4 (ftp2).
Тоже касается и логов. Создаем директорию /var/log/vsftpd. В ней будут
файлы с логами соответствующих виртуальных FTP серверов. Т.е. в
/etc/vsftpd/192.168.226.3/vsftpd.conf ищем строчку
xferlog_file=/var/log/vsftpd.log
и меняем ее на
xferlog_file=/var/log/vsftpd/192.168.226.3.log
Тоже самое для второго FTP.
Прописываем создание двух дополнительных IP адресов при запуске. В конец
файла /etc/rc.d/rc.inet1 добавляем
/sbin/ifconfig eth0:1 192.168.226.3 netmask 255.255.255.0 up
/sbin/ifconfig eth0:2 192.168.226.4 netmask 255.255.255.0 up
Сохраняемся, выходим.
И создаем их сейчас:
# ifconfig eth0:1 192.168.226.3 netmask 255.255.255.0 up
# ifconfig eth0:2 192.168.226.4 netmask 255.255.255.0 up
Добавим записи о FTP серверах в DNS (прямая зона)
ftp1 IN A 192.168.226.3
ftp2 IN A 192.168.226.4
Перезапустим DNS сервер
# /etc/rc.d/rc.bind restart
Открываем файл /etc/xinetd.conf и множим секцию ftp. В одну секцию
добавляем директиву
Теперь xinetd в зависимости на какой IP обратились, будет запускать
vsftpd с соответствующими конфигурационными файлами. Внимание:
интерфейсы и записи в DNS должны существовать до того как будет
перезапущен xinetd! Иначе ничего не получиться. Т.е. сначала создаем
интерфейсы (или дополнительные IP адреса), если будет использоваться DNS
- прописываем адреса в DNS и только потом запускаем/перезапускаем
xinetd.
Настройка анонимного сервера
Создадим струткуру каталогов для анонимного сервера. Директория incoming
предназначена для закачки файлов пользователями. pub - только для
скачивания.
Для anonymous пользователя корневым будут каталог
/srv/ftp/192.168.226.3. Тем самым создается иллюзия что это разные
серверы. Хотя на самом деле - просто разные директории.
Пропишем это в конфигруационном файле:
anon_root=/srv/ftp/192.168.226.3
Чтобы сделать директорию incoming доступной для записи - нужно
установить ее в группу ftp и дать этой группе права на запись.
Настройка сервера с доступом только по учетным записям
Создадим файл userlist, в который будем прописывать пользователей
которым разрешен доступ на FTP.
# touch /etc/vsftpd/192.168.226.4/userlist
Пропишем в него первым делом самого себя :) у меня это пользователь
coder Создадим директорию для хранения индивидульных настроек для
каждого пользователя
# mkdir /etc/vsftpd/192.168.226.4/users
Создадим в этом каталоге файл для настроек пользователя coder
# touch /etc/vsftpd/192.168.226.4/users/coder
Пропишем в него все права и корневую директорию. Добавим:
Сообщим vsftpd о том, что мы будем использовать индивидуальные настройки
для каждого пользователя. Добавим в
/etc/vsftpd/192.168.226.4/vsftpd.conf следующие строки:
Чтобы webmaster мог быстро перейти на сайт зайдя например по SSH или с
SAMBA, в его домашней директории создадим символьную ссылку на
директорию с web сайтом.