Главная > Программы

Настройка ftpd

Этот пост пишу потому, что в интернете не нашел нормальной статьи по настройке встроенного во FreeBSD ftp-сервера: кругом сплошные сслыки на “man ftpd”. Интак, мне необходимо поднять ftp с ограниченным доступом по логину/паролю к отдельным папкам для каждого пользователя. Для этих целей ftpd будет выше крыши.

1. В файл /etc/rc.conf добавляем строчки:

ftpd_enable=”YES”
ftpd_flags=”" # здесь прописываем нужные флаги. Их описание я привёл ниже.

Доступные флаги:
-D: запускать ftpd в режиме демона.
-a <адрес>: в режиме демона принимать соединения только на указанный IP-адрес.
-d: включить режим отладки (подробная информация о работе будет выдаваться серверу syslog как LOG_FTP).
-h: не выводить информацию о системе в сообщениях сервера.
-l: протоколировать все сессии (обычно используется/var/log/xferlog).
-A: разрешить только анонимный доступ.
-M: запретить анонимным пользователям создавать папки.
-m: разрешить анонимным пользователям модифицировать существующие файлы (если для этого достаточно системных прав).
-o, -O: разрешить только запись на сервер всем пользователям (-o) или только анонимному пользователю (-O). В частности, таким образом можно организовать сбор с удаленных серверов файлов резервных копий, чтение которых пользователями не предусмотрено.
-r: перевести сервер в режим "только для чтения". Любая модификация размещенных данных будет запрещена.

2. Создаем учётные записи пользователей (например, с помощью adduser), которым будут разрешен доступ к серверу, после чего убеждаемся в том, что их имена не упоминаются в файле /etc/ftpuser (пользователям, упомянутым в этом файле, доступ к ftp будет запрещён).
Для анонимного доступа к серверу необходимо создать учётную запись с именем “ftp”. Корневым каталогом и будет его домашняя папка.

3. Создаем файл /etc/ftpchroot и заполняем его по такому шаблону:

<имя пользователя> <путь к папке>
<@ имя группы> # это для того, чтобы все пользователи данной группы были ограничены одной папкой (можно не указывать).

test /home/test
@ wheel

4. Устанавливаем нужные права на папку /home/test (то, что мы хотим разрешить/запретить пользователю test).

5. При необходимости редактируем:
/etc/ftphosts – настройка виртуальных хостов
/etc/ftpwelcome – приветственное сообщение
/etc/ftpmotd – приветственное сообщение, выводимое при входе на сервер

6. Определяемся, как мы будем запускать сервер – через inetd, или же как standalone.
В первом случае в файле /etc/inetd.conf раскоментируем строчку

ftp stream tcp nowait root usr/liexec/ftpd ftpd -l

Во втором случае для запуска используем скрипт /etc/rc.d/ftpd:

Если его в системе нет (старые версии FreeBSD), создаём вручную:

#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/ftpd,v 1.1 2006/01/21 18:08:15 yar Exp $
#

# PROVIDE: ftpd
# REQUIRE: LOGIN cleanvar

name=”ftpd”
rcvar=`set_rcvar`
command=”/usr/libexec/${name}”
pidfile=”/var/run/${name}.pid”
start_precmd=ftpd_prestart

ftpd_prestart()
{
rc_flags=”-D ${rc_flags}”
return 0
}

load_rc_config $name
run_rc_command “$1″

Вот и всё :) Заходим на свой сервер и радуемся жизни;)

Материал взят с сайта:

Введение

1. Назначение и область применения изделия

· Протокол FTP (File Transfer Protocol)

FTP (File Transfer Protocol или "Протокол Передачи Файлов") - один из старейших протоколов в Internet и входит в его стандарты. Обмен данными в FTP проходит по TCP-каналу. Построен обмен по технологии "клиент-сервер". На рисунке 1.1 изображена модель протокола.

Рис. 1 . 1 . Модель протокола

В FTP соединение инициируется интерпретатором протокола пользователя. Управление обменом осуществляется по каналу управления в стандарте протокола TELNET. Команды FTP генерируются интерпретатором протокола пользователя и передаются на сервер. Ответы сервера отправляются пользователю также по каналу управления. В общем случае пользователь имеет возможность установить контакт с интерпретатором протокола сервера и отличными от интерпретатора пользователя средствами.

Команды FTP определяют параметры канала передачи данных и самого процесса передачи. Они также определяют и характер работы с удаленной и локальной файловыми системами.

Сессия управления инициализирует канал передачи данных. При организации канала передачи данных последовательность действий другая, отличная от организации канала управления. В этом случае сервер инициирует обмен данными в соответствии с параметрами, согласованными в сессии управления.

Канал данных устанавливается для того же host"а, что и канал управления, через который ведется настройка канала данных. Канал данных может быть использован как для приема, так и для передачи данных.

Возможна ситуация, когда данные могут передаваться на третью машину. В этом случае пользователь организует канал управления с двумя серверами и организует прямой канал данных между ними. Команды управления идут через пользователя, а данные напрямую между серверами (рисунок 1.2).

Канал управления должен быть открыт при передаче данных между машинами. В случае его закрытия передача данных прекращается.


Рис. 1 . 2 . Соединение с двумя разными серверами и передача данных между ними

· Версии FTP

Протокол FTP формировался многие годы. Первые реализации в МТИ относятся к 1971. (RFC 114 и 141). RFC 172 рассматривает протокол, ориентированный на пользователя, и предназначенный для передачи файлов между ЭВМ. Позднее в документах RFC 265 и RFC 281 протокол был усовершенствован. Заметной переделке протокол подвергся в 1973, и окончательный вид он обрел в 1985 году. Таким образом, данный протокол является одним из старейших.

В настоящее время разработаны версии FTP для работы с IPv6 (RFC-2428).

· Сравнение FTP с другими протоколами передачи файлов

Одним из самых быстрых является протокол HyperProtocol. Как и Zmodem, он является потоковым протоколом, но помимо этого может сжимать передаваемые данные, как и протокол Kermit. Согласно протокола HyperProtocol приемник посылает подтвержение не после каждого файла, а в конце всего сеанса передачи. Он может быть с успехом использован для передачи информации по высрокоскоростньтм каналам.

Особенность протокола BiModem состоит в том, что он является дуплексным, т.е. позволяет одновременно передавать файлы во встречных направлениях. Протокол BiModem также предусматривает возобновление передачи после обрыва связи и гибкое изменение размера блока от 16 байт до 16 Кбайт.

Однако Bi Modem недостаточно устойчиво работает по каналам с высоким уровнем помех.

Близким по функциональным возможностям к протоколу Bi Modem является дуплексный протокол HS/Link. Также как и протокол BiModem, он предоставляет возможность пользователям во время предачи файлов общаться в режиме Chat.

Высокоскоростной дуплексный протокол Hydra отличается хорошей ус-тойчивочтью работы на линиях низкого качества и каналах с большими задержками передачи.

Часто выбор протокола передачи файлов ограничен возможностями используемой коммуникационной программы. Тем не менее, существует возможность подключения некоторых протоколов передачи файлов к отдельным терминальным программам, которые штатно не предусматривают их использование. Это возможно в основном для большинства программ для DOS. Подключаемые внешние протоколы в таком случае должны быть в виде ис-полнямых (*.ехе) файлов.

Параметр

Сжатие данных

Размер файла

Дата модификации файла

Минимальный размер блока, байт

Максимальный размер блока, байт

1500(для Ethernet)

Масштабирование блоков

ARQ типа SAW

ARQ типа QBN

Запрос файлов

Групповая передача

Восстановление

Переименование

Прерывание передачи

Прерывание передачи отдельного файла

Протоколирование

Дуплексная передача

Скорость при соединении DTE-DTE, Кбит/с

1,313 Мбит/с для Ethernet

2. Описание и обоснование.

· Настройка с.о.с FreeBSD для FTP- сервера

Установка Операционной Системы FreeBSD.

Заходим в BIOS.

Boot -> 1st Boot Device = CD/DVD

Exit -> Save Changes and Exit

Перезагружаем компьютер.

Открываем меню запуска FreeBSD.

Нажимаем Enter.

Открывается первое Окно(Выбиаем Страну).

Российская Федерация -> Нажимаем Enter.

Открывается следующее Окно(Выбор языка клавиатуры).

Кириллица -> Нажимаем Enter.

Открывается следующее Окно(Выбор типа установки).

Custom (выборочная) - Нажимаем Enter.

Открывается список Опций.

Заходим в раздел Partition.

Удаляем все разделы клавишей "D".

Создаем раздел, нужного объема, клавишей "С".

· указываем размер (в нашем случае "40000 М") - М - мегабайты.

· указываем тип файловой системы (в нашем случае "165").

Заходим в раздел Label.

Создаем логические диски, клавишей "C".

Имя | Размер

1."/"(корневой раздел) | 1 Gb

2."/swap" | 1 Gb

3."/var" | 2 Gb (логи и т.п.)

4."/tmp" | 1-5 Gb (временные файлы)

5."/usr"(аналог /home) | (остальное свободное место)

Заходим в раздел Distribution.

Fonts -> xAll

Заходим в раздел Media.

Выбираем установку -> по умолчанию (с диска)

Заходим в раздел Commit.

Нажимаем "Yes"

Начинается Копирование файлов и Установка ОС FreeBSD = -

После установки открывается окно.

Нажимаем "No".

Выходим из установки, перезагружаемся.

Установка выполнена = -

Проведена. По хорошему ещё осталось поднять FTP-сервис доступа к файлам, чем мы сегодня и займёмся.

Встроенный FTP сервер идет в составе суперсервера inetd, к которому мы обязательно ещё вернёмся. Итак, элементарная инструкция по установке и настройке FTPD-службы.

Создаём пользователя для FTPD

FTPD использует учетные записи, созданные в ОС. Поэтому просто создадим для сервиса FTPD отдельную учётную запись. Как это делается?

# pw useradd –n -m –h 0

После ввода команды появится приглашения для ввода пароля пользователя. Пусть в нашем случае будет

# pw useradd -n ftpuser -m -h 0

password: ftppass

Когда я заморочился с FTP сервером, то у меня стояла задача доступа к логам одного сервиса по протоколу ftp (для анализа логов сторонней программой на другой ОС). Так что можно сразу указать домашнюю директорию для пользователя. К примеру, нам надо получить доступ только на /var/log/squid/. Команда:

# pw useradd –n ftpuser -d /var/log/squid –h 0

Ограничиваем пользователя

В файле /etc/ftpchroot (если его нет, создаём) добавить строку с именем пользователя и путь к директории вида:

ftpuser /var/log/squid

файл /etc/ftpchroot нужен для того, чтобы пользователь, который зашел на сервер не смог видеть другие директории. Мы меняем корневую директорию. Необходимо добавить права доступа на директорию, куда будет осуществляться доступ (если их конечно не хватает). Команда:

# chmod 755 –R /var/log/squid

Подготавливаем сервис FTPD к старту

В файле /etc/inetd.conf найти строку

#ftp stream tcp nowait root /usr/libexec/ftpd ftpd –l

Раскомментировать ее (убрать #).

В файл /etc/rc.conf добавить строку

inetd_enable=”YES”

В файл /etc/ftpusers добавить существующие учетные записи, которые не должны иметь доступ на FTP сервер.

Запускаем FTPD на FreeBSD

Теперь надо стартануть сервер. Если он стартанут, то надо его перечитать.

# /etc/rc.d/inetd start

Проверка встроенного FTPD сервера

подключимся к себе посредством утилиты ftp, попробуем авторизоваться!


Теперь, когда вы узнали, как пользоваться клиентом FTP в системе FreeBSD, давайте посмотрим, как можно реализовать сервис FTP. Первая ваша задача – определиться с тем, как запускать демон ftpd(8), из inetd(8) или в автономном режиме.

По умолчанию FreeBSD запускает демон FTP из inetd(8). Большинство систем получают не так много запросов FTP, поэтому inetd легко справляется с поступающими запросами. Если не требуется поддерживать много сессий FTP одновременно, можно использовать inetd(8). Достаточно раскомментировать строку с описанием службы FTP в файле /etc/inetd.conf (глава 15) и перезапустить inetd. Любое изменение командной строки запуска ftpd(8) можно внести в файле /etc/inetd.conf.

Однако если предполагается, что ваш сервер FTP будет обслуживать сотни и тысячи одновременных соединений, то запуск FTP из inetd приведет к дополнительной нагрузке на систему. Чтобы этого не было, настройте использование FTP в автономном (standalone) режиме, подразумевающем постоянное прослушивание сети и самостоятельное обслуживание запросов. Не забудьте убрать запуск ftpd(8) из inetd, а затем добавьте строку ftpd enable= "YES" в файл /etc/rc.conf. После этого можно будет запустить ftpd(8) с помощью сценария /etc/rc.d/ftpd или перезагрузки.

Вы можете выполнить некоторые подстройки ftpd(8) с помощью ключей командной строки. Добавьте эти ключи в строку запуска ftpd(8) в файле /etc/inetd.conf или в параметр ftpd flags в файле /etc/rc.conf. Теперь посмотрим, какие возможности предлагает демон ftpd(8), входящий в состав FreeBSD.

Протоколирование обращений Kftpd(8)

Демон ftpd(8) имеет два уровня протоколирования. Если задать ключ -1 один раз (значение по умолчанию в /etc/inetd.conf), ftpd(8) будет протоколировать все успешные и неуспешные попытки регистрации. Если данный ключ указать дважды, ftpd(8) будет протоколировать все операции FTP: загрузку и выгрузку файлов, создание и удаление каталогов и т. д.

Режим «только для чтения»

Иногда требуется запретить выгрузку файлов на сервер, замещение файлов или любые другие операции, приводящие к изменениям в файловой системе сервера. Этот режим прекрасно подходит для организации серверов, разрешающих выполнять только загрузку файлов, таких как сайты-зеркала. Для этого применяется ключ – г.

Режим «только для записи»

Возможно, вам потребуется организовать сервер, куда пользователи смогут выгружать файлы, но не смогут загружать их. Для этого применяется флаг -о.

Тайм-аут

По умолчанию, если сеанс связи с пользователем простаивает 15 минут (900 секунд), соединение разрывается. Определить новое значение тайм-аута можно с помощью ключа -t, которому следует передать значение в секундах.

Управление пользователями FTP

С работающим сервером FTP связаны две типичные проблемы: 1) он позволяет пользователям загружать произвольные системные файлы и 2) пароли FTP могут быть похищены. Стоит ли подвергать свою систему риску из-за того, что какой-то пользователь-разиня, подключившись к серверу из местного интернет-кафе, не уберег свой пароль, и злоумышленник смог загрузить ключевые системные файлы! Лучший способ управлять пользователями заключается в том, чтобы выбрать, кто может входить на сервер и какие каталоги будут доступны этим выбранным пользователям.

chroot для пользователей

Вы можете заблокировать пользователей FTP в своих домашних каталогах с помощью chroot(8). Для пользователя его домашний каталог будет выглядеть как корень файловой системы. Пользователи не смогут покинуть свои домашние каталоги или получить доступ к произвольным системным файлам. Это очень напоминает маленькую клетку. Вариант с chroot полезен для веб-серверов с большим количеством клиентов на одной машине, то есть для веб-серверов с большим числом виртуальных хостов. В конце концов, только пользователь должен видеть свой каталог и больше никто.

Чтобы посадить пользователя в клетку, добавьте его имя в файл /etc/ ftpchroot. Каждый пользователь должен указываться в отдельной строке. Всякий раз, когда пользователь подключается к системе по FTP, его учетная запись сравнивается с содержимым /etc/ftpchroot. Если имя есть в этом файле, пользователь блокируется в своем домашнем каталоге с возможностью полностью контролировать его (если это позволяют установленные вами права доступа), создавать столько подкаталогов и хранить столько файлов, сколько позволяет отведенное ему дисковое пространство. Но пользователь не может покидать свой домашний каталог и исследовать систему.

В файле /etc/ftpchroot можно также указывать группы, что будет приводить к блокированию в домашних каталогах всех пользователей, входящих в эту группу. Имена групп должны начинаться с символа @ (например, @customers).

Допустим, в системе есть два веб-дизайнера, Гордон и Крис. Требуется разрешить им выгрузку файлов только в свои домашние каталоги. Есть также группа клиентов, которые поддерживают свои веб-сайты. Клиенты входят в группу webclients. Чтобы «посадить» всех этих пользователей в клетку, настройте /etc/ftpchroot так:

Теперь все эти пользователи заперты в своих домашних каталогах. Запрет доступа к FTP

Имя файла /etc/ftpusers обманчиво. Файл содержит не список разрешенных пользователей, а список тех, кому не позволено входить в систему по FTP. По умолчанию в /etc/ftpusers представлены разные системные учетные записи, такие как root и nobody. Ни один системный администратор не сможет зарегистрироваться как root!

В этот файл можно добавить группы, поместив перед их именами символ Обычно я запрещаю доступ к FTP членам группы wheel. Пользователи, применяющие пароль root, не должны передавать свои пароли открытым текстом! Все, кому я могу доверить доступ в систему с привилегиями пользователя root, знают, как пользоваться SSH, scp(l) и sftp(l)!

Сообщения сервера FTP

При подключении сервер FTP может выводить два разных сообщения, текст которых хранится в файлах /etc/ftpwelcome и /etc/ftpmotd.

Когда клиент устанавливает соединение FTP впервые, ftpd(8) отображает содержимое файла /etc/ftpwelcome. В него можно поместить правила пользования, предупреждения, сообщения о предоставляемых возможностях, непристойности, угрозы, то есть все что угодно. Пользователи увидят данную информацию еще до получения приглашения к регистрации. Это замечательное место для сообщения «Несанкционированное использование запрещено». Факт наличия этого сообщения, пусть и не такого забавного, как «Пользователи, совершившее незаконное вторжение, будут преследоваться по всей строгости моим злобным ротвейлером и 12-зарядным дробовиком», пригодится в суде, если кто- нибудь воспользуется вашими услугами в противозаконных целях.

Как только пользователь войдет в систему, отображается содержимое /etc/ftpmotd. Обычно в нем содержатся соглашения по пользованию услугой.