VSFTPD - безопасный FTP-сервер

Эта статья описывает основные возможности "Very Secure FTP Daemon".

После этого мы произведем установку и настройку vsftpd-демона. И закончим тестом работоспособности нашего сервера.

Введение

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-сервер будет скомпрометирован злоумышленником, он не сможет выйти за пределы этой директории и нанести вред системе.

Среди многих требований предъявляемых к FTP-серверу, безопасность имеет наибольший приоритет, и в этом плане vsftpd значительно превосходит другие FTP-сервера. Достаточно упомянуть WU-FTPD[5] в котором было выявлено огромное количество ошибок за последние несколько лет.

Инсталляция

Установку vsftpd можно легко произвести из rpm-пакета, который входит во многие дистрибутивы. Также его можно установить из исходников, которые можно найти здесь [6].

После того как вы скачали и распаковали архив с исходниками, зайдите в созданную распаковщиком директорию и запустите make. Ниже показан один из способов, как можно это сделать:

> 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". Это можно сделать при помощи следующих комманд:

> mkdir /var/ftp

neo5k@phobos> useradd -d /var/ftp ftp

Для обеспечения безопасности директория"/var/ftp" не должна принадлежать пользователю"ftp" с правами записи. Следующие две команды позволяют сменить владельца папки и отобрать у него эти привелегия.

> chown root.root /var/ftp

neo5k@phobos> chmod og-w /var/ftp

После всего этого мы можем приступить к установке vsftp-демона:

neo5k@phobos> make install

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

> cp vsftpd /usr/sbin/vsftpd

neo5k@phobos> cp vsftpd.conf.5 /usr/share/man/man5

neo5k@phobos> cp vsftpd.8 /usr/share/man/man8

Пока не скопирован конфигурационный файл - сделаем наше вступление более доступным - начнем новый раздел:

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" :

> vi /etc/inetd.conf

Далее, надо найти строку, в которой упоминается FTP, раскомментировать ее, и в конце строки вписать vsftpd . Затем следует перезапустить inetd. У вас должно получиться примерно  так, как показано ниже:

# ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   in.ftpd

ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   vsftpd

xinetd

Рекомендуется запускать 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 &

Просмотреть, является ли эта папка проверяемой по-умолчанию можно вот так:

neo5k@phobos> echo $PATH

/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin

Естественно, если мы запускаем сервер вручную, мы должны убедиться, что сервер не запущен при помощи inetd или xinetd.

Проверка работы

После удачной инсталляции и конфигурирования давайте проверим доступ к FTP-серверу:

> 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>

Оригинал

free-templates.ru