FTP серверы в UNIX и UNIX-like ОС

Треплемся, перемываем косточки, сплетничаем...
Форум доступен всем без исключений.
Все вопросы сюда.

Модератор: icerain

Аватар пользователя
Сообщений: 3
Зарегистрирован: 16 мар 2011, 13:35
СообщениеДобавлено: 10 май 2011, 12:35
 "Настройка анонимного и юзер-ориентированного сервера на базе vsftpd"
Содержание

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

Код: выделить все
# cat /etc/rc.d/rc.local.new >> /etc/rc.d/rc.local



Теперь файл можно удалить.

Код: выделить все
# rm /etc/rc.d/rc.local.new



Запускаем xinetd

Код: выделить все
# /etc/rc.d/rc.xinetd start



Пробуем подключиться к FTP

Код: выделить все
[b]# ftp 127.0.0.1
        Connected to 127.0.0.1.
        220 (vsFTPd 2.0.5)
        Name (127.0.0.1:coder): 530 This FTP server is anonymous only.
        ftp> [/b]



Запустился! Посмотреть кто когда и что хотел запустить можно через cat
/var/log/servicelog.

06/12/17@13:29:36: START: ftp pid=3195 from=127.0.0.1


Видим что 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).

Код: выделить все
# mkdir /etc/vsftpd/192.168.226.3
        # mkdir /etc/vsftpd/192.168.226.4



Скопируем в эти каталоги конфигурационный файл.

Код: выделить все
# cp /etc/vsftpd.conf /etc/vsftpd/192.168.226.3/vsftpd.conf
        # cp /etc/vsftpd.conf /etc/vsftpd/192.168.226.4/vsftpd.conf



Тоже касается и логов. Создаем директорию /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. В одну секцию
добавляем директиву

bind = 192.168.226.3


а строку server_args = vsftpd допоолняем до

server_args = vsftpd /etc/vsftpd/192.168.226.3/vsftpd.conf


в другую

bind = 192.168.226.4


и

server_args = vsftpd /etc/vsftpd/192.168.226.4/vsftpd.conf


Перезапустим xinetd

Код: выделить все
# /etc/rc.d/rc.xinetd restart



Теперь xinetd в зависимости на какой IP обратились, будет запускать
vsftpd с соответствующими конфигурационными файлами. Внимание:
интерфейсы и записи в DNS должны существовать до того как будет
перезапущен xinetd! Иначе ничего не получиться. Т.е. сначала создаем
интерфейсы (или дополнительные IP адреса), если будет использоваться DNS
- прописываем адреса в DNS и только потом запускаем/перезапускаем
xinetd.

Настройка анонимного сервера

Создадим струткуру каталогов для анонимного сервера. Директория incoming
предназначена для закачки файлов пользователями. pub - только для
скачивания.

Структура анонимного FTP сервера:

Код: выделить все
# mkdir /srv/ftp/192.168.226.3
        # mkdir /srv/ftp/192.168.226.3/incoming
        # mkdir /srv/ftp/192.168.226.3/pub



Для anonymous пользователя корневым будут каталог
/srv/ftp/192.168.226.3. Тем самым создается иллюзия что это разные
серверы. Хотя на самом деле - просто разные директории.

Пропишем это в конфигруационном файле:

anon_root=/srv/ftp/192.168.226.3


Чтобы сделать директорию incoming доступной для записи - нужно
установить ее в группу ftp и дать этой группе права на запись.

Код: выделить все
# chgrp -R ftp /srv/ftp/192.168.226.3/incoming/
        # chmod -R g+w /srv/ftp/192.168.226.3/incoming/



Вот в принципе и все. На этом можно считать настройку анонимного ftp
сервера законченной. Вот листинг конфигурационного файла

Код: выделить все
anonymous_enable=YES
        write_enable=YES
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_umask=022
        file_open_mode=0777
        anon_root=/srv/ftp/192.168.226.3

        local_enable=NO
        dirmessage_enable=YES
        xferlog_enable=YES
        connect_from_port_20=YES
        xferlog_file=/var/log/vsftpd/192.168.226.3.log
        xferlog_std_format=YES
        ls_recurse_enable=YES


Настройка сервера с доступом только по учетным записям

Создадим файл 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



Пропишем в него все права и корневую директорию. Добавим:

Код: выделить все
cmds_allowed=ABOR,MKD,CWD,DELE,LIST,MDTM,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,
        STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

        local_root=/srv/ftp/192.168.226.4/



Сообщим vsftpd о том, что мы будем использовать индивидуальные настройки
для каждого пользователя. Добавим в
/etc/vsftpd/192.168.226.4/vsftpd.conf следующие строки:

Код: выделить все
anonymous_enable=NO
        local_enable=YES
        userlist_enable=YES
        userlist_deny=NO
        userlist_file=/etc/vsftpd/192.168.226.3/userlist
        user_config_dir=/etc/vsftpd/192.168.226.3/users



Все пользователи в Slackware по умолчанию принадлежат группе users.
Дадим всем пользователям группы users доступ на запись в
/srv/ftp/192.168.226.4.

# chgrp -R users /srv/ftp/192.168.226.4
# chmod -R g+w /srv/ftp/192.168.226.4



Для примера, также создадим пользователя webmaster, который в теории
должен через этот FTP заливать файлы на корпоративный сайт.

# adduser webmaster


Установим пароль

# passwd webmaster


В директории /srv/ftp/192.168.226.4/users/ создадим файл настроек
пользователя webmaster.

# touch /srv/ftp/192.168.226.4/users/webmaster


Пропишем в него директорию в которая будет корневой для пользователя (в
данном случае директория с сайтом)

Код: выделить все
local_root=/srv/www/www.mysite.lan/



Сменим группу и пользователя директории с сайтом на webmaster:users

# chown -R webmaster:users /srv/www/www.mysite.lan


Чтобы webmaster мог быстро перейти на сайт зайдя например по SSH или с
SAMBA, в его домашней директории создадим символьную ссылку на
директорию с web сайтом.

# ln -s /srv/www/www.mysite.lan /home/webmaster/www


Вот в принципе и все. Можно проверять.

Полное содержание vsftpd.conf


Код: выделить все
anonymous_enable=NO
file_open_mode=0777

local_enable=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/192.168.226.4/userlist
user_config_dir=/etc/vsftpd/192.168.226.4/users
chroot_local_user=YES
write_enable=YES
local_umask=022

ftpd_banner=Welcome to FTP server

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd/192.168.226.4.log
xferlog_std_format=YES
ls_recurse_enable=YES


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Источник : http://www.linuxportal.vrn.ru

Вернуться в Болталка

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Яндекс.Метрика
cron