Сделать безопасный доступ на FTP сервер администраторам Сделать безопасный доступ на FTP сервер для пользователей держащих домашние странички на сервере www.matrix.ru. Сделать виртуальный FTP сервер для клиентов www.client.com Сделать безопасный анонимный FTP cервер www.guest.com.
Выбор операционной по мнению автора лежит на FreeBSD в силу ее надежности и корректной реализации chroot-ed. Итак приступим. Если Вы счастливый обладатель какого нибудь доступа в интернет то заходим в /usr/ports/ftp/ProFTPD набираем make , идем пить кофе, выпив кофе подходим к клавиатуре набираем make install и через 10 секунд ftp сервер готов.
Сравните как просто ;). В портах FreeBSD находятся ссылки на сервер разработчиков и на свежие патчи к ProFTPD что намного предпочтительнее именно так ставить FTP демон чем через /stand/sysinstall - но если у вас нет и-нета то тогда именно так и придется поступать. Теперь займемся конфигурированием. По умолчанию конфигурационный файл находится в /usr/local/etc/proftpd.conf а скрипт запуска в standalone режиме /usr/local/etc/rc.d/proftpd.sh. По поводу запуска ProFTPD есть два нюанса - можно запустить его в standalone режиме (как запускают обычную программу) а можно и через демон inetd. При запуске proftpd через inetd вы получаете экономию памяти, при запуске как standalone вы получаете большую гибкость но в любом случае не запускайте его под root-om.
Первым делом создайте группу и пользователя ftp, под этим аккаунтом Вы будете запускать ProFTPD. Этот аккаунт не должен иметь shell-a и home directores. Предположим, что файлы вашего www сервера уже уже находятся на диске в отдельном разделе /clients/sites и /clients/pages. Первый каталог нужен для виртуальных серверов а второй для хранения виртуальных страничек клиентов. Начинаем заполнять файл /usr/local/etc/proftpd.conf. Сразу оговоримся что реальный сервер мы не выставляем на всеобщее обозрение как ftp.server.com (ограничивая доступ только локальным администраторам), сервер нашего сайта имеет имя ftp.company.com (или www.company.com) , а виртуальный сервер нашего клиента ftp.client.com (или www.client.com). Заносим данные о нашем боевом сервере в /usr/local/etc/proftpd.conf:
# Имя хоста на котором работает данный сервер, его администратор и тип запуска
# Выключаем строчку, информирующую о типе FTP сервера
ServerIdent Off
ServerType inetd
# Порт сервера
Port 21
# Ограничиваем время работы на ftp сессии и период бездействия
TimeoutIdle 600
TimeoutNoTransfer 900
# Устанавливаем маску для вновь создаваемых файлов и каталогов
Umask 022
MaxClients 50
MaxLoginAttempts 30
# Пользователь под которым работает FTP-демон
User ftp
Group ftp
# Лог передаваемых файлов и дополнительный для параноиков ;)
TransferLog /var/log/ftp/server.log
ExtendedLog /var/log/ftp/server.log
# Нижеописанные директивы нужны на случай прорыва chroot.
# Запишем их для всего сервера в директиве Global
# Если администраторам необходимо работать с этими каталогами, то
# Достаточно просто указать вместо "DenyAll" - "DenyUser !admin" DenyAll
# Ограничиваем доступ к /var DenyAll
# Ограничиваем доступ к /usr DenyAll
# Домашний каталог по умолчанию берется от home
# пользователя из /etc/passwd, но здесь мы ограничиваем доступ только администраторам
# на уровень выше, чем обычным пользователям и запрещаем его всем кроме
# нижеуказанных логинов администраторов
DefaultRoot /clients/~ DenyUser !admin1, admin2
# Ограничиваем доступ к нашему серверу только по IP
# хостов администраторов Order Allow,Deny Deny from all Allow from 192.168.1.1,192.168.1.2 Как Вы видите, синтактис конфигурационного файла очень подож на директивы, используемые в WEB сервере Apache.
# На этом конфигурирование базовго хоста ftp.server.com закончено.
# Теперь начинаем конфигурирование нашего виртуального ftp сервера ftp.client.com (дающий доступ к файлам на
# www.company.com) . Этот сервер служит основным для задания путей в домашних страничках пользователей,
# например, предполагая что файлы и их расположение
# где хранятся homepage пользователей AllowAll Теперь конфигурируем виртуальные сервера наших клиентов. Предполагам что владелец виртуального сервера имеет login name - "client".
# Разрешаем доступ к каталогу, где находятся html сервера и ограничивая доступ всем кроме
# учетной владельца данного сайта. DenyAll ! client Теперь приступим к созданию конфигурации анонимного сервера. Предполагаем что он будет размещать файлы в /clients/public в подкаталогах "uploads" и "pub" :
# Записываем файлы сообщений которые появляются при входе в систему DisplayLogin welcome.msg DisplayFirstChdir .message
# Заполняем директивы для uploads каталога
# Разрешаем всем доступ Allow ALL
# Запрещаем запись
Deny All
IgnoreHidden on
DenyAll
IgnoreHidden on
Allow All
IgnoreHidden on
Deny All
IgnoreHidden on
AllowALL I
gnoreHidden on
Вот и готов файл конфигурации FTP сервера. После внесения изменений в конфигурационный файл не забывайте давал команду kill -HUP pid_proftpd или /usr/local/etc/rc.d/proftpd.sh stop , proftpd.start.
Если у Вас включён ipfw, то в его правилах вы должны указать следующее:
ipfw add pass tcp from any to any 20
ipfw add pass tcp from any 21 to any
ipfw add pass tcp from any to any 21
ipfw add pass tcp from any 21 to any
При этом мы предполагаем что мы запретили прохождение всех пакетов во всем протоколам, разрешив только явно указанные нами, что в принципе является хорошим тоном.