Автор Mario M. Knopf <netzmeister/at/neo5k/dot/org>
Перевод на Русский: Лебедев Александр Сергеевич <slice(at)list.ru>
Резюме:
Эта статья описывает основные возможности "Very Secure FTP Daemon". Я
начну с описания основ работы FTP и vsftpd. После этого мы произведем
установку и настройку vsftpd-демона. И закончим тестом
работоспособности нашего сервера.
Введение
File Transfer Protocol (FTP) предназначен для передачи данных в
интернете независимо от платформы на которой он установлен, он основан
на клиент/сервер архитектуре. RFC 959
ftp://ftp.rfc-editor.org/in-notes/rfc959.txt определяет FTP разделив его
на 2 различных канала. Один служит для отправки данных (через TCP-порт
20), а другой для передачи комманд (TCP-порт 21). Этим каналом
управляют клиент и сервер, обмениваясь друг с другом информацией о
передаваемых данных.
FTP соединение происходит в несколько этапов:
* Авторизация пользователя
* Установление соединения на 21 порт
* Установка соединения на 20 порт
* Закрытие соединения
Контроль над передачей данных выполняет протокол TCP (Transmission
Control Protocol), который гарантирует получателю доставку сообщения,
поэтому FTP нет необходимости проверять были ли пакеты потеряны и
произошли ли какие-нибудь ошибки во время их передачи. TCP
гарантирует, пришли ли они без ошибок и в правильной
последовательности.
Передача данных происходит тремя различными способами маркировки
потока, которые могут означать конец файла (EOF) или двумя другими,
использующими маркировку конца записи (EOR).
* Поток
* Блок
* Сжатие
Определяют еще два различных режима:
* ASCII-режим
* Binary-режим
ASCII-режим используется для передачи текстовой информации, а бинарный
- для передачи других данных, обычно программ. Пользователю не нужно
менять режимы при передачи своих данных, обычно функции определения их
типа выполняет FTP-клиент.
Каждый пользователь должен понять, что пароли, передаваемые при
авторизации, не шифруются , и на это нужно особо обратить внимание.
Над этим стоит серьезно призадуматься. В октябре 1997 в RFC 2228
ftp://ftp.rfc-editor.org/in-notes/rfc2228.txt
были опубликованы некоторые поправки, касающиеся безопасности FTP.
vsftpd
vsftpd - представляет собой сервер для Linux-подобных операционных
систем, он запускается на таких платформах как Linux, *BSD, Solaris,
HP-UX и IRIX. Он включает в себя множество полезных функций, которых
нет в других FTP-серверах. Такие как:
* высокие требования к безопасности
* контроль над полосой пропускания канала
* хорошая расширяемость
* возможность создавать виртуальных пользователей
* поддержка IPnG
* высокая производительность
* возможность устанавливать виртуальные IP-адреса
* высокая скорость работы
Название vsftpd произошло от "very secure FTP deamon" (чрезвычайно
безопасный FTP-демон) который разрабатывается под руководством Chris
Evans. С самого начала этапа разработки FTP-сервера, безопасности
уделялось особое внимание.
К примеру, vsftpd можно запустить в chroot-среде. Это означает, что
программа ( vsftpd)создает для нее новую корневую директорию (l), к
которой не будут иметь доступ внешние программы или файлы. Поэтому,
если FTP-сервер будет скомпрометирован злоумышленником, он не сможет
выйти за пределы этой директории и нанести вред системе. Больше
информации о chroot вы можете подчерпнуть из другой статьи
http://www.linuxfocus.org/Russian/January2002/article225.shtml
Следующая статья http://vsftpd.beasts.org/DESIGN также рекомендуется
к прочтению об этом интересном механизме безопасности в vsftpd
Среди многих требований предъявляемых к FTP-серверу, безопасность
имеет наибольший приоритет, и в этом плане vsftpd значительно
превосходит другие FTP-сервера. Достаточно упомянуть WU-FTPD[5] в
котором было выявлено огромное количество ошибок за последние
несколько лет.
Инсталляция
Установку vsftpd можно легко произвести из rpm-пакета, который входит
во многие дистрибутивы. Также его можно установить из исходников,
которые можно найти здесь http://www.vsftpd.beasts.org/
После того как вы скачали и распаковали архив с исходниками, зайдите в
созданную распаковщиком директорию и запустите make. Ниже показан один
из способов, как можно это сделать:
neo5k@phobos> tar xzvf vsftpd-x.x.x.tar.gz
neo5k@phobos> cd vsftpd-x.x.x
neo5k@phobos> make
Настоятельно рекомендуется проверить существует ли пользователь
"nobody", а также проверить наличие директории "/usr/share/empty" и
если ее нет, то создать ее. Если планирутся предоставить доступ
анонимным пользователям, то также потребуется создать
пользователя"ftp" и предоставить ему домашнюю директорию "/var/ftp".
Это можно сделать при помощи следующих комманд:
Для обеспечения безопасности директория"/var/ftp" не должна
принадлежать пользователю"ftp" с правами записи. Следующие две команды
позволяют сменить владельца папки и отобрать у него эти привелегия.
Пока не скопирован конфигурационный файл - сделаем наше вступление
более доступным - начнем новый раздел:
neo5k@phobos> cp vsftpd.conf /etc
Конфигурирование
Файл конфигурации может быть найден в директории "/etc" под именем
"vsftpd.conf". Как и в большинствах конфигурационных файлах
комментарий обозначается знаком #("решетка").
# Это - комментарий
# Простейшая конфигурация демона может выглядеть примерно вот так:
# Разрешать ли анонимный доступ ? YES/NO
anonymous_enable=NO
# Разршать ли загрузку файлов анонимному пользователю? YES/NO
anon_upload_enable=NO
# Разрешать ли анонимному пользователю создавать свои директории ? YES/NO
anon_mkdir_write_enable=NO
# Разрешать ли пользователю производить операции с записью, такие как
# перименование или удаление ? YES/NO
anon_other_write_enable=NO
# Регистрировать ли сообщения локальных пользователей ? YES/NO
local_enable=YES
# Должны ли пользователи находится только в своих директориях ? YES/NO
chroot_local_user=YES
# Максимальная скорость передачи данных для зарегистрированных
# пользователей. По-умолчанию = 0 (неограниченная).
local_max_rate=7200
# Разрешать ли запись в каталог ? YES/NO
write_enable=YES
# Включать сообщения при смене директории ? YES/NO
dirmessage_enable=YES
# Показ баннера при регистрации пользователя.
ftpd_banner="Welcome to neo5k's FTP service."
# Включить регистрацию событий ? YES/NO
xferlog_enable=YES
# Регистрировать все ативные FTP-соединения ? YES/NO
# Осторожно! Возможно на экране будет огромное количество информации.
log_ftp_protocol=NO
# Разрешать соединения только на порт 20 (ftp data) ? YES/NO
connect_from_port_20=YES
# Таймаут сессии
idle_session_timeout=600
# Таймаут передачи данных
data_connection_timeout=120
# Предоставлять вход через Pluggable Authentication Modules (PAM)
pam_service_name=vsftpd
# Запускать вручную ? YES/NO - зависит от режима (inetd, xinetd, Standalone).
# У автора FTP-сервис запускается через xinetd, поэтому у него стоит значение NO.
listen=NO
Запуск FTP-службы
vsftpd может быть запущен тремя различными способами. Первый способ -
запуск через inetd или xinetd, третий - запускать сервер вручную.
inetd
Если FTP-сервис должен запускаться через inetd, то следует поместить
следующие строчки в конфигурационный файл "/etc/inetd.conf" :
neo5k@phobos> vi /etc/inetd.conf
Далее, надо найти строку, в которой упоминается FTP, раскомментировать
ее, и в конце строки вписать vsftpd . Затем следует перезапустить
inetd. У вас должно получиться примерно так, как показано ниже:
Рекомендуется запускать vsftp именно таким способом, так как xinetd
намного новее, чем inetd. В нем есть такие вещи как регистрация
запросов, контроль доступа, привязка сервиса к определенному сетевому
интерфейсу и т.д. Очень хорошая статья, посвященная xinetd находиться
здесь (http://www.linuxfocus.org/Russian/November2000/article175.shtml).
После изменений в конфигурационном файле перезапустите
xinetd . Этот файл может выглядеть примерно вот так:
# vsftp daemon.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
per_source = 5
instances = 200
no_access = 192.168.1.3
banner_fail = /etc/vsftpd.busy_banner
log_on_success += PID HOST DURATION
log_on_failure += HOST
nice = 10
}
Ручной способ
Существует также возможность запуска vsftp вручную. Для этого откройте
его конфиг и внесите следующие изменения:
# Должен ли vsftpd-демон запускаться вручную? YES/NO
listen=YES
После этого можно запустить сервер:
neo5k@phobos> /usr/sbin/vsftpd &
А если было правильно указано, в какой папке искать в первую очередь,
то просто:
neo5k@phobos> vsftpd &
Просмотреть, является ли эта папка проверяемой по-умолчанию можно вот
так:
Естественно, если мы запускаем сервер вручную, мы должны убедиться,
что сервер не запущен при помощи inetd или xinetd.
Проверка работы
После удачной инсталляции и конфигурирования давайте проверим доступ к
FTP-серверу:
neo5k@phobos> ftp phobos
Connected to phobos
220 "Welcome to neo5k's FTP service."
Name (phobos:neo5k): testuser
331 Please specify the password.
Password:
230 Login successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -l
229 Entering Extended Passive Mode
150 Here comes the directory listing
drwxr-xr-x 11 500 100 400 May 07 16:22 docs
drwxr-xr-x 9 500 100 464 Feb 01 23:05 hlds
drwxr-xr-x 39 500 100 4168 May 10 09:15 projects
226 Directory send OK.
ftp>
Вывод
Как вы наверно уже убедились, vsftp не является сложным ни в
инсталляции, ни в конфигурировании. Однако он является достаточно
функциональным средством и предоставляет высокий уровень безопасности.
Конечно, эта статья описывает лишь малую часть того, что может
предоставить нам vsftpd, раскрыты не все аспекты его конфигурирования.
Если вы хотите найти больше информации о vsftpd , то вы можете
посетить его домашнюю страничку http://www.vsftpd.beasts.org/ и
прочитать более подробную документацию.