File Transfer Protocol (FTP) предназначен для передачи данных в интернете независимо от платформы на которой он установлен, он основан на клиент/сервер архитектуре. RFC 959[1] определяет FTP разделив его на 2 различных канала. Один служит для отправки данных (через TCP-порт 20), а другой для передачи комманд (TCP-порт 21). Этим каналом управляют клиент и сервер, обмениваясь друг с другом информацией о передаваемых данных. FTP соединение происходит в несколько этапов:
Авторизация пользователя
Установление соединения на 21 порт
Установка соединения на 20 порт
Закрытие соединения
Контроль над передачей данных выполняет протокол TCP (Transmission Control Protocol), который гарантирует получателю доставку сообщения, поэтому FTP нет необходимости проверять были ли пакеты потеряны и произошли ли какие-нибудь ошибки во время их передачи. TCP гарантирует, пришли ли они без ошибок и в правильной последовательности.
Передача данных происходит тремя различными способами маркировки потока, которые могут означать конец файла (EOF) или двумя другими, использующими маркировку конца записи (EOR).
Поток
Блок
Сжатие
Определяют еще два различных режима:
ASCII-режим
Binary-режим
ASCII-режим используется для передачи текстовой информации, а бинарный - для передачи других данных, обычно программ. Пользователю не нужно менять режимы при передачи своих данных, обычно функции определения их типа выполняет FTP-клиент.
Каждый пользователь должен понять, что пароли, передаваемые при авторизации, не шифруются , и на это нужно особо обратить внимание. Над этим стоит серьезно призадуматься. В октябре 1997 в RFC 2228[2] были опубликованы некоторые поправки, касающиеся безопасности 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 вы можете подчерпнуть из другой статьи [3]. Следующая статья [4] также рекомендуется к прочтению об этом интересном механизме безопасности в vsftpd
Среди многих требований предъявляемых к FTP-серверу, безопасность имеет наибольший приоритет, и в этом плане vsftpd значительно превосходит другие FTP-сервера. Достаточно упомянуть WU-FTPD[5] в котором было выявлено огромное количество ошибок за последние несколько лет.
Инсталляция
Установку vsftpd можно легко произвести из rpm-пакета, который входит во многие дистрибутивы. Также его можно установить из исходников, которые можно найти здесь [6].
После того как вы скачали и распаковали архив с исходниками, зайдите в созданную распаковщиком директорию и запустите 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 находиться здесь[7]. После изменений в конфигурационном файле перезапустите 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 , то вы можете посетить его домашнюю страничку и прочитать более подробную документацию.
Автор: Mario M. Knopf, Перевод: Лебедев Александр Сергеевич