• 11.1. Сервер FTP wu-ftpd
  • 11.1.1. Файл ftpaccess
  • 11.1.2. Файл ftphosts
  • 11.1.3. Файл ftpusers
  • 11.1.4. Файл ftpgroups
  • 11.1.5. Файл ftpconversions
  • 11.1.6. Файл xferlog
  • 11.2.СерверProFTP
  • 11.2.1. Файл /etc/proftpd.conf
  • 11.2.2. Ограничение доступа
  • 11.2.3. Файл .ftpaccess
  • 11.3. Организация анонимного FТР-сервера
  • 11.4. Вспомогательные программы
  • 11.5. Виртуальный узел FTP
  • 11

    Настройка FTP

    Сервер FTP (File Transfer Protocol) используется для обмена файлами между системами. Обычно на FTP-сервере размещают большое количество файлов, например, какой-нибудь программный комплекс или набор музыкальных файлов. Примером FTP-сервера может послужить сервер ftp://ftp.redhat.com. На этом сервере вы можете найти как саму операционную систему Linux Red Hat, так и обновления ее пакетов, а также дополнительные программы.

    Доступ к серверу FTP осуществляется с помощью FTP-клиента. В любой сетевой операционной системе есть простейший FTP-клиент — программа ftp (см. п. 19.3). Обычно для того, чтобы начать работу с FTP-сервером, вы должны зарегистрироваться на нем, другими словами, ввести имя пользователя и пароль. После регистрации вы получаете доступ к своему каталогу. Над файлами и каталогами вы можете производить обычные операции: создание, удаление, копирование, перемещение, переименование. Как правило, при выполнении операции копирования вы либо копируете файлы на сервер (команда put) — загружаете на сервер, либо копируете файлы с сервера на свою локальную машину (команда get) — скачиваете с сервера.

    Существуют также так называемые общедоступные (анонимные) серверы, к которым имеют доступ все пользователи. На таких серверах размещается свободно распространяемое программное обеспечение, обновление программ, драйверы, документация и прочая публичная информация. Для регистрации на таких серверах обычно нужно использовать имя пользователя anonymous, а в качестве пароля — адрес электронной почты. Создание анонимного сервера рассмотрено в пункте 11.3.

    В главе 19.3 рассмотрены все команды клиента FTP. Сейчас же просто рассмотрим регистрацию пользователя на сервере и что при этом происходит. Допустим, имеется некий FTP-сервер, к которому могут подключаться не только обычные пользователи, но и анонимные (см. рис. 11.1).

    Рис. 11.1. FTP-клиент в окне терминала


    Перед самой регистрацией сначала FTP-клиент сообщит, что соединение с сервером FTP установлено, а затем вас поприветствует сам сервер — сообщение 220: ProFTPD 1.2.0 Server. Далее, в ответ на приглашение Name введите имя пользователя (пусть будет den). Так как пользователь не является анонимным, сервер сообщит вам, что нужно ввести пароль для этого пользователя. Правильно введя пароль, вы успешно зарегистрируетесь на сервере, о чем вам сообщит сервер — сообщение 230. Также сервер вам сообщит, что удаленной системой является UNIX и что сейчас используется двоичный (binary) режим передачи файлов. Я не рекомендую изменять этот режим на текстовый, потому что при передаче нетекстовой информации, например, пакетов RPM, двоичные файлы будут повреждены.

    11.1. Сервер FTP wu-ftpd

    Сервер FTP wu-ftpd является разработкой Вашингтонского университета. Этот сервер очень распространен и входит в состав практически каждого дистрибутива Linux. Для его установки нужно установить пакет wu-ftpd. Как и любой другой сервер, wu-fptd может быть постоянно загруженным в память или вызываться суперсервером inetd по мере необходимости. Первый режим называется standalone и применяется, как правило, если FTP-серверу нужно часто обрабатывать запросы клиентов. Второй режим используется в целях экономии памяти и если нагрузка на FTP-сервер не очень велика.

    Если вы решите настроить работу сервера FTP во втором режиме, в файле inetd.conf должна быть соответствующая запись (см. листинг 11.1)

    Листинг 11.1. Фрагмент файла inetd.conf

    ftp stream top nowait root/usr/sbin/tcpd in.ftpd -l -a

    Из листинга 11.1 видно, что FTP-сервер вызывается не напрямую, а через демон tcpd, чем обеспечивается дополнительная безопасность. В том случае, если вы используете новую версию inetd — xinetd, формат записи у вас будет другой (см. листинг 11.2).

    Листинг 11.2. Фрагмент файла xinetd.conf

    service ftp

    {

     socket_type = stream

     wait = no

     user = root

     server = /usr/etc/in.ftpd

     server_args = -l

     instances = 4

     log_on_success += DURATION USERID

     log_on_fallure += USERID

     access_times = 2:00-8:59 12:00-23:59

     nice = 10

    }

    Опция -l сервера FTP регистрирует все сеансы FTP в файле syslog.

    Кроме этой опции, сервер ftp имеет ряд других опций, указанных в табл. 11.1.

    Опции командной строки сервера wu-ftpd Таблица 11.1

    Опция Описание
    -d Записывает отладочную информацию в журнал syslog
    –l Регистрирует все FTP-сеансы в журнале syslog
    -L Регистрирует в журнале syslog все команды, отправленные серверу FTP
    -t секунды Устанавливает предел времени ожидания для пассивных клиентов (по умолчанию 15 минут). Если за этот промежуток времени от клиента не поступит ни одной команды, то FTP-сеанс с сервером будет разорван
    -Т секунды Максимально допустимое время сеанса FTP (по умолчанию 2 часа)
    Разрешает использование файла конфигурации ftpaccess
    Запрещает использование файла конфигурации ftpaccess. Эта опция установлена по умолчанию
    -i Регистрирует в журнале xferlog файлы, полученные сервером FTP
    Регистрирует в журнале xferlog файлы, переданные сервером во время сеанса

    Сервер wu-ftp использует пять файлов конфигурации: ftpaccess, ftphosts, ftpusers, ftpgroups, ftpconversions. В этой главе мы подробно рассмотрим каждый из них.

    11.1.1. Файл ftpaccess

    Основным файлом конфигурации является ftpaccess. Как и другие файлы конфигурации, он располагается в каталоге /etc. Пример файла /etc/ftpaccess приведен в листинге 11.3.

    Листинг 11.3. Пример файла ftpaccess

    class all real,guest,anonymous *

    email rootdlocalhost loginfails 3

    readme README* login

    readme README* cwd=*

    message /welcome.msg login

    message .message cwd=*

    compress yes all

    tar yes all

    chmod no guest,anonymous

    delete no guest,anonymous

    overwrite no guest, anonymous

    rename no guest, anonymous

    log transfers anonymous,real inbound,outbound

    shutdown /etc/shutmsg

    passwd-check rfc822 warn

    Файл ftpaccess определяет возможности доступа к FTP-серверу, которые будут иметь различные группы пользователей. В этом файле задаются параметры доступа, разрешенные операции, виды регистрируемых событий.

    Директива class определяет класс пользователей, которые будут иметь доступ к серверу FTP. В листинге 11.3 задан класс all, который состоит из следующих типов пользователей: настоящие (real), гости (guest), анонимные (anonymous). Под настоящими пользователями подразумеваются те, которые зарегистрированы на сервере, то есть их учетные записи хранятся в файле /etc/passwd.

    С помощью директивы email можно указать адрес администратора сервера.

    Директива loginfails задает максимальное количество попыток регистрации. Если это количество превышено, пользователь автоматически будет отключен. Значение по умолчанию для этой директивы равно 5.

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

    Директивы chmod и delete определяют, могут ли пользователи использовать одноименные команды FTP. А директивы overwrite или delete разрешают или запрещают определенным пользователям перезаписывать или удалять файлы на сервере. В приведенном примере (см. листинг 11.3) пользователи классов guest и anonymous не могут выполнять ни одну из упомянутых операций. Общие директивы сервера wu-ftpd перечислены в табл. 11.2.

    Директивы сервера wu-ftpd Таблица 11.2

    Директива Описание
    autogroup имя_группы имя_класса […] Разрешает доступ анонимным пользователям определенных классов к файлам, которые принадлежат к указанной группе
    alias псевдоним каталог Создает псевдоним для каталога на FTP-сервере. Псевдоним позволяет быстро (указав только псевдоним) перейти в соответствующий ему каталог из любого другого каталога на сервере
    anonymous-root каталог [имя_класса] Указывает каталог, который будет использоваться в качестве корневого для заданного класса пользователей. После успешной регистрации пользователя на FTP-сервере он автоматически попадет в соответствующий его классу каталог. Если имя класса не указано, то данная директива будет задавать корневой каталог для анонимных пользователей, для которых корневой каталог не определен явно
    banner файл Перед регистрацией клиента ему будет показано сообщение из указанного файла. В качестве параметра файла задается полное (абсолютное) имя файла
    bit-limit [raw] in|out|total макс_кол_байт [имя_класса] Устанавливает ограничение на количество пересылаемой информации в байтах для пользователей указанного класса. Если имя класса не указать, то данное ограничение будет применяться ко всем пользователям, для которых нет явных указаний по этому поводу. Необязательный параметр raw позволяет ограничить весь объем пересылаемой информации (в том числе и служебной), а не только пересылаемых файлов. Значения in, out, total указывают поток данных (на сервер, от сервера или и тот, и другой одновременно), подлежащий учету
    class имя_класса типы_пользователей адреса_хостов Создает класс пользователей с указанным именем. В качестве типа пользователей используются ключевые слова anonymous (анонимные пользователи), guest (гостевые пользователи) и real (зарегистрированные пользователи). Если указывается несколько типов, то они перечисляются через запятую без пробелов. В поле адреса_хостов указываются адреса хостов, только пользователи которых будут принадлежать данному классу. Символ звездочка «*» означает все хосты (см. листинг 11.3). Адреса хостов могут указываться в виде одного из следующих форматов: IP-адрес — отдельный IP-адрес. IP-адрес: маска_сети — IP-адрес с маской сети. IP-адрес/cidr — IP-адрес с информацией CIDR. !nameserved — указание этого идентификатора приводит к запрету доступа со всех хостов, имена которых не удается получить от DNS-сервера. /имя_файла — Указывается абсолютное имя текстового файла, в котором содержится список IP-адресов (по одному в каждой строке)
    cdpath каталог Определяет для директивы cdpath выражение, с помощью которого задается путь поиска при переходе в указанный каталог
    compress yes|no имя_класса Разрешает или запрещает сжатие данных перед отправкой (команда compress) для указанного класса пользователей
    defaultserver private Запрещает анонимный доступ к серверу
    deny адреса_хостов файл_сообщения Запрещает доступ к серверу для хостов с указанными адресами. При этом будет отображено сообщение из файла_сообщения. При указании файла необходимо использовать полное (абсолютное) имя. Адреса хостов могут указываться в виде одного из следующих форматов: IP-адрес — отдельный IP-адрес. IP-адрес: маска_сети — IP-адрес с маской сети. IP-aflpec/cidr — IP-адрес с информацией CIDR. !nameserved — указание этого идентификатора приводит к запрету доступа со всех хостов, имена которых не удается получить от DNS-сервера. /имя_файла — указывается абсолютное имя текстового файла, в котором содержится список IP-адресов (по одному в каждой строке)
    email адрес почты Почтовый адрес администратора сервера
    file-limit [raw] in|out|total количество_файлов [имя_класса] Устанавливает ограничение на количество пересылаемых файлов для пользователей указанного класса. Параметр количество_файлов как раз и задает максимально допустимое количество файлов. Значение остальных параметров такое же как и для директивы bit-limit
    guestgroup имя_группы [имя_группы…] Всем пользователям, входящим в группу с указанным именем, будет разрешен гостевой доступ к серверу FTP
    limit имя_класса максимум периоды файл_сообщения Ограничивает число одновременно работающих пользователей, принадлежащих указанному классу, в определенное время суток. Параметр максимум задает максимально допустимое количество одновременно работающих пользователей. Параметр периоды задает временные интервалы. Клиенту, которому запрещается доступ к FTP-серверу в результате действия данной директивы, будет показано сообщение из файла файл_сообщения
    loginfails количество Определяет максимальное число неудачных попыток регистрации пользователя, после которых он будет отключен. По умолчанию количество попыток равно 5
    log commands типы_пользователей Регистрирует в журнале команды, которые вводились пользователями указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class)
    log transfers тип_пользователей список_направлений Регистрирует в журнале акты передачи файлов пользователями указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class). В поле список_направлений задается направление передачи, подлежащее протоколированию: inbound (входящие файлы), outbound (исходящие). Если указываются оба направления, то они должны быть разделены запятой без пробела (см. листинг 11.3)
    message файл_сообщения действие Отображает файл_сообщения во время регистрации или при переходе в другой каталог. Соответственно значение в поле действие может быть либо LOGIN (регистрация) или CWD=каталог (переход в каталог). Запись cwd=* задает любой каталог (см. листинг 11.3)
    noretrieve [class=имя_класса] список_файлов Запрещает получение указанных в списке файлов. Если указан параметр class, то этот запрет распространяется только на пользователей заданного класса
    readme файл действие Во время регистрации или при смене каталога пользователь получит сообщение о существовании и времени модификации указанного файла. Параметр действие определяется так же, как и в директиве message
    tar yes|no имя_класса Разрешает или запрещает использование команды tar для указанного класса пользователей, то есть разрешает или запрещает архивирование файлов архиватором tar перед их пересылкой
    virtual адрес Разрешает использование виртуального FTP-узла

    Кроме общих директив, сервер wu-ftp имеет директивы, которые управляют правами доступа. Директивы прав доступа определяют, какие операции могут выполнять пользователи того или иного типа. Эти директивы указаны в табл. 11.3.

    Директивы прав доступа Таблица 11.3

    Директива Описание
    chmod yes|no типы_пользователей Разрешает или запрещает выполнять команду chmod для пользователей указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class)
    delete yes|no типы_пользователей Разрешает или запрещает выполнять команду delete для пользователей указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class)
    overwrite yes|no типы_пользователей Разрешает или запрещает пользователям указанных типов перезаписывать файлы на сервере. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class)
    rename yes|no типы_пользователей Разрешает или запрещает пользователям указанных типов переименовывать файлы на сервере. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class)
    password-check rfc822|trivial|none enforce|warn Задает уровень проверки пароля. При этом в качестве первого параметра указывается метод проверки пароля: none — отключает проверку паролей; trivial — все пароли должны обязательно содержать символ '@'; rfs822 — в качестве паролей должны указываться адреса электронной почты, задаваемые согласно стандарту RFC822 (рекомендую использовать именно это значение). Вторым параметром задается действие, которое должно производиться в тех случаях, когда пользователь введет неправильный пароль. Значение warm говорит о том, что пользователь просто будет проинформирован об ошибке в пароле и далее ему будет позволено заново зарегистрироваться на FTP-сервере. Если указать значение enforce, то пользователю будет выдано сообщение о неправильном пароле и ему в дальнейшем будет запрещен доступ к серверу
    upload yes|no типы_пользователей Разрешает или запрещает выгрузку файлов на сервер пользователям указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real (см. описание опции class)

    11.1.2. Файл ftphosts

    Файл ftphosts используется для разрешения или запрещения доступа определенных пользователей с указанных узлов. Например, вы можете разрешить доступ пользователю admin только с компьютера admm.domain.ru и запретить со всех остальных. А для других пользователей разрешить доступ со всех компьютеров. Таким образом, в файле могут быть записи двух видов: разрешающие и запрещающие. Формат записей в файле ftphosts следующий:

    allow|deny user hosts [host…]

    Разрешающая запись allow разрешает пользователю регистрироваться с хостов, указанных в списке hosts, но запрещает регистрацию со всех остальных. Запись deny, наоборот, запрещает доступ с определенных хостов, но разрешает со всех остальных. В листинге 11.4 приведен пример файла ftphosts.

    Листинг 11.4. Пример файла ftphosts

    allow admin 192.168.1.1

    deny user 192.168.1.2 192.168.1.3

    В приведенном примере пользователь admin может регистрироваться на сервере только с компьютера с IP-адресом 192.168.1.1. Если этот пользователь попробует зарегистрироваться с другого компьютера, то ему будет отказано в доступе. Пользователю user запрещено регистрироваться с компьютеров 192.168.1.2 и 192.168.1.3, но он может зарегистрироваться с любого другого компьютера сети.

    11.1.3. Файл ftpusers

    Файл ftpusers содержит список пользователей, которым запрещено использовать команду ftp. Эти пользователи не могут зарегистрироваться на сервере. При попытке регистрации будет выведено сообщение об ошибке Login Incorrect, даже если пользователь ввел правильный пароль. Из соображений безопасности этот файл должен содержать хотя бы имена пользователей root, bin, news, uucp. Пустые строки, а также строки, начинающиеся с символа #, игнорируются. Полностью корректный с точки зрения безопасности файл представлен в листинге 11.5.

    Листинг 11.5. Файл ftpusers

    root

    bin

    daemon

    adm

    IP

    sync

    shutdown

    halt

    mail

    news

    uucp

    operator

    games

    nobody

    11.1.4. Файл ftpgroups

    Файл ftpgroups содержит специальные пароли, с помощью которых пользователи FTP будут рассматриваться как пользователи определенной группы. Такое разрешение получит пользователь, для которого запись в файле ftpgroups содержит выражение yes. Более подробную информацию об этом файле вы можете получить в справочной системе, введя команду man ftpgroups.

    11.1.5. Файл ftpconversions

    В файле ftpconversions заданы операции сжатия, разрешенные пользователям для выполнения во время сеанса FTP. Стандартный файл ftpconversions представлен в листинге 11.6.

    Листинг 11.6. Файл ftpconversions

    :.Z: : :/bin/compress –d –с %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

    : : :.Z:/bin/compress. –c %s:T_REG:0_COMPRESS:COMPRESS

    :.gz: : :/bin/gzip –cd %s:T_REG|T_ASCII:0_UNCOMPRESSrGUNZIP

    : :.gz:/bin/gzip –9 –c %s:T_REG:0_COMPRESS:GZIP

    : :. tar  :/bin/tar –c –f – %s:T_REG|T_DIR:O_TAR:TAR

    : :.tar.Z :/bin/tar –c –Z –f –%s:T_REG|T_DIR:0_COMPRESS|0_TAR:TAR+COMPRESS

    : :.tar.gz:/bin/tar –c –z –f –%s:T_REG|T_DIR:0_COMPRESS|0_TAR:TAR+GZIP

    Каждая запись этого файла состоит из восьми полей. Поля разделяются с помощью символа двоеточия. Эти поля содержат префиксы и постфиксы удаления и добавления, внешнюю команду, тип операции и описание. Например, сжатый программой gzip файл должен иметь имя с суффиксом gz. Чтобы к имени файла был добавлен суффикс gz, запись в файле ftpconversions должна иметь постфикс gz. Я специально не использую здесь термин «расширение», так как он отсутствует в терминологии UNIX, потому что файлы в ОС Linux не имеют расширения.

    11.1.6. Файл xferlog

    Файл xferlog является журналом сервера FTP, в который записываются все транзакции, которые были произведены в результате работы пользователей. С помощью опций -о и –i сервера FTP можно выбрать тип транзакций, записываемых в журнал (см. табл. 11.1).

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

    Рассмотрим листинг 11.7, в котором представлен фрагмент файла xferlog.

    Листинг 11.7. Фрагмент файла xferlog

    Wed Jan 9 11:49:35 2002 1 localhost.localdomain 1490 /home/den/vmware.html a _ o r den ftp 0 * с

    Wed Jan 9 11:50:08 2002 1 localhost.localdomain 281 /home/den/w.out a _ o r den ftp 0 * с

    Wed Jan 9 11:50:15 2002 1 localhost.localdomain 281 /home/den/w.out a _ i r den ftp 0 * c-

    Wed Jan 9 11:52:08 2002 1 localhost.localdomain 888 /home/den/ftphosts.html b _ i r den ftp 0 * с

    Теперь проанализируем записи. Из первой записи вы можете узнать, что пользователь den был зарегистрирован с удаленного узла localhost.localdomain. Начало передачи файла /home/den/vmware.html произошло в среду, 9 января 2002 года в 11:49. Общее время передачи — одна секунда. Общий объем переданной информации составляет 1490 байт. Для передачи файла использовался режим ASCII (а), не было произведено никаких специальных операций (_). Файл vmware.html пользователь загружал с сервера, на что указывает направление передачи (о). Пользователь den является реальным (зарегистрированным) пользователем системы (r). Название службы, которая производила операцию — ftp.

    Теперь рассмотрим четвертую запись. Тот же пользователь den передал на сервер файл ftphosts.html. Направление передачи — на сервер (i). Режим передачи — двоичный (b). Вторая и третья записи сообщают о загрузке с сервера и на сервер файла w.out в текстовом (а) режиме.

    Тип пользователя обозначается символом возле имени пользователя. Символ r обозначает зарегистрированного в системе пользователя, у которого есть своя запись в файле /etc/passwd. Символ g означает гостевую регистрацию, а символ а — анонимную.

    Направление передачи, как вы уже догадались, обозначается символами о — прием файла пользователем и i — прием файла сервером. Остается только отметить, что файл xferlog используется обоими серверами FTP — wu-ftpd и  ProFTPD.

    11.2.СерверProFTP

    Альтернативой, и, на мой взгляд, достаточно хорошей, сервера wu-ftpd является сервер ProFTPD. Он намного проще в плане конфигурирования, чем сервер wu-ftpd, и обладает достаточно гибкими возможностями. Для его установки достаточно установить пакет proftpd. Подобно серверу wu-ftpd, ProFTPD может запускаться автоматически при запуске системы или вызываться суперсервером при наличии запроса на установку соединения. Первый режим называется standalone.

    Сервер ProFTPD может вызываться с параметрами, указанными в табл. 11.4.

    Параметры сервера ProFTPD Таблица 11.4 

    Параметр Описание
    -h Справочная информация
    -n Запускает сервер в автономном режиме. Для этого в файле конфигурации нужно указать режим запуска standalone (см. ниже)
    -d уровень_отладки Устанавливает уровень отладки сервера (1-5)
    файл_конфигурации Задает использование альтернативного файла конфигурации вместо стандартного /etc/proftpd.conf
    -p 0|1 Запрещает (0) или разрешает (1) использование постоянного пароля. Для получения более подробной информации (смотрите документацию по серверу)
    -I Выводит список всех модулей, откомпилированных для использования сервером ProFTPD
    -v Выводит версию

    11.2.1. Файл /etc/proftpd.conf

    Сервер ProFTPD использует всего один файл конфигурации. — /etc/proftpd.conf, который по своей структуре чем-то похож на файл конфигурации Web-сервера Apache (а именно — директивами конфигурирования).

    В листинге 11.8 представлен простейший файл конфигурации сервера ProFTPD.

    Листинг 11.8. Пример файла конфигурации /etc/proftpd.conf

    # Этот файл устанавливает один сервер и одну

    #  учетную запись

    ServerName "My ProFTPD server"

    ServerType standalone

    DefaultServer on

    #  Используем стандартный порт

    Port 21

    Umask 022

    MaxInstances 30

    # Пользователь и группа, обслуживающие сервер

    User nobody

    Group nobody

    #  Параметры корневого каталога. Блочная директива Directory

    <Directory /*>

    #  Директива, определяющая параметр AllowOverwrite

     AllowOverwrite on

    </Directory>

    Директивы конфигурации делятся на две группы: директивы, определяющие некоторые параметры, и блочные директивы. Блочные директивы конфигурирования похожи на тэги языка HTML. С помощью блочных директив задаются блоки, содержащие директивы, которые определяют параметры (см. листинг 11.8). При этом используются начальные и конечные блочные директивы. Конечная директива имеет то же имя, что и начальная, но с наклонной чертой в начале. Например, начальная директива <Directory /*>, а конечная — </Directory> (см. листинг 11.8). Действия каждой пары директив распространяются только на блок, который они задают (который расположен между ними). Директива <Directory> определяет свойства какого-нибудь каталога. В вышеприведенном листинге (листинг 11.8) определяются свойства корневого каталога.

    В табл. 11.5 представлены все директивы файла конфигурации сервера ProFTPD.

    Директивы файла конфигурации сервера ProFTPD Таблица 11.5 

    Директива Описание
    AccessGrantMsg сообщение Ответное сообщение, которое будет отправлено пользователю в случае его регистрации или получения анонимного доступа. Символы %u будут заменены на имя пользователя, которое он ввел при регистрации
    Allow from all|host|network [,host|network[,…]] Используется внутри блока Limit. Ограничивает доступ к серверу (а именно разрешает доступ). По умолчанию allow from all
    AllowAll Разрешает доступ к блокам Directory, Anonymous, Limit
    AllowForeignAddress on|off Разрешает клиенту указывать при соединении соединения адрес, который не соответствует ему. По умолчанию off. Может использоваться в блоках VirtualHost, Anonymous, <Global>
    AllowGroup список_групп Разрешает доступ определенным группам. Используется в блоке Limit
    AllowUser список_пользователей Разрешает доступ определенным пользователям. Используется в блоке Limit
    AnonRequirePassword on|off Требует пароль при анонимной регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. По умолчанию данная опция выключена
    <Anonymous directory> Создает анонимную учетную запись, directory — корневой каталог анонимного сервера
    AuthGroupFile путь Позволяет указать путь к альтернативному файлу group. По умолчанию используется файл /etc/group
    AuthUserFile путь Указывает альтернативный файл passwd
    Bind IP-адрес Разрешает привязку дополнительного IP-адреса к основному или виртуальному хосту
    DefaultRoot каталог Задает корневой каталог по умолчанию
    Deny from all|host|network Запрещает доступ к серверу. Используется в блоке Limit
    DenyAll Запрещает анонимным пользователям доступ к объектам, указанным в блоке Limit
    DenyUser список пользователей Запрещает доступ определенным пользователям
    <Directory> путь Используется в VirtualHost, Anonymous для того, чтобы определить особенные параметры доступа к каталогу и его подкаталогам
    DisplayFirstChdir файл_сообщения Указанный текстовый файл будет выводиться, когда пользователь впервые за время сеанса войдет в данный каталог. Используется в VirtualHost, Directory, Anonymous
    DisplayLogin файл_сообщения Этот файл будет отображен, когда пользователь зарегистрируется
    <Global> Используется для задания параметров, которые будут использоваться как основным, так и всеми виртуальными серверами
    <Limit command> Ограничение на выполнение данной FTP-команды, например, LOGIN, WRITE, READ, STOR
    MaxClients number|none сообщение Ограничение на количество клиентов. Приведенное сообщение будет отображено, если пользователю будет отказано в доступе. Блоки Anonymous, Global
    MaxLoginAttempts Максимальное количество попыток зарегистрироваться. По умолчанию 3. Блоки VirtualHost, Global
    Order allow,deny|deny,allow Порядок выполнения директив Allow и Deny в блоке Limit
    PersistentPassword on|off При значении on будут использованы системные файлы /etc/passwd и /etc/group, несмотря на то, что командой enroot корневой каталог был изменен
    RequireValidShell on|off Разрешает или запрещает регистрацию при использовании оболочек (shells), которые не указаны в файле /etc/shells
    ServerAdmin email Определяет email администратора сервера
    ServerType Определяет режим работы сервера standalone (по умолчанию) или inetd. В первом случае сервер будет запускаться автоматически из стартовых сценариев системы, во втором — его будет запускать сервер inetd при попытке соединения
    TimeoutIdle секунды Время в секундах, в течение которого пользователь имеет право не проявить активности. По умолчанию 60 (1 минута)
    Umask маска Определяет права доступа для созданного файла. Маска — число в восьмеричной системе, определяющее набор прав доступа (см. главу 4)
    User имя пользователя Имя пользователя, присвоенное демону ProFTP
    UserAlias псевдоним пользователь Создает указанный псевдоним для указанного пользователя
    <VirtualHost address> Создает виртуальный сервер

    11.2.2. Ограничение доступа

    Я считаю необходимым подробно рассмотреть блочную директиву Limit. Эта директива определяет вид и параметры доступа к тому или иному каталогу. Рассмотрим листинг 11.9.

    Листинг 11.9. Пример использования директивы Limit

    <Directory incoming>

     <Limit WRITE>

      AllowAll

     </Limit>

     <Limit READ>

      DenyAll

     </Limit>

    </Directory>

    Директива Directory определяет свойства каталога incoming, а директива Limit задает вид доступа к этому каталогу. Команда WRITE директивы Limit вместе с директивой AllowAll разрешает всем пользователям записывать информацию в этот каталог. Команда READ директивы Limit задает ограничение на чтение этого каталога. В рассматриваемом случае чтение запрещено для всех пользователей. Кроме команд WRITE и READ в директиве Limit можно задавать команды STOR и LOGIN (см. табл. 11.6).

    В блоке Limit можно задавать директивы Allow, AllowAll, AllowGroup, AllowUser, Deny, DenyAll, DenyUser (см. табл. 11.5). Например, в листинге 11.10 запрещается доступ всем пользователям, кроме den. Пользователь den может регистрироваться со всех компьютеров, кроме компьютера с IP-адресом 111.111.111.111. Также запрещена регистрация из сети 192.168.2.0

    Команды директивы Limit, ограничивающие права доступа Таблица 11.6


    Команда Описание
    LOGIN Ограничивает регистрацию
    WRITE Ограничивает запись
    READ Ограничивает чтение
    STOR Ограничивает прием файлов
    Листинг 11.10. Пример блока Limit

    <Limit LOGIN>

     DenyAll

     AllowUser den

     Deny from 111.111.111.111

     Deny from 192.168.2.

    </Limit>

    11.2.3. Файл .ftpaccess

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

    11.3. Организация анонимного FТР-сервера

    Анонимный FTP-сервер можно построить с помощью wu-ftpd, установив пакет anonftp. Этот пакет нельзя использовать вместе с сервером ProFTPD. Пакет anonoftp поставляется в составе большинства дистрибутивов.

    Сейчас рассмотрим, как организовать анонимный FTP-сервер с помощью сервера ProFTPD. Для организации анонимного доступа сервер ProFTPD имеет директиву Anonymous. При этом в блок Anonymous нужно поместить директивы, конфигурирующие анонимную службу. В самой же директиве Anonymous необходимо указать каталог, который будет использоваться в качестве корневого для анонимной службы. Сервер ProFTPD выполнит для этого каталога команду enroot, превращая этот каталог в корневой для удаленного пользователя. Перед тем, как сделать это, сервер ProFTPD прочитает все необходимые ему файлы конфигурации из реального каталога /etc.

    При анонимной регистрации, по умолчанию в качестве имени пользователя указывается anonymous, а вместо пароля — адрес электронной почты пользователя. Вы же можете изменить параметры анонимного доступа, добавив проверку пароля для анонимного пользователя с помощью директивы AnonRequirePassword (см. табл 11.5). В следующем примере представлен типичный блок Anonymous, подходящий для большинства анонимных серверов (см. листинг 11.11.)

    Листинг 11.11. Типичный блок Anonymous

    <Anonymous /var/ftp>

     User ftp

     Group ftp

     UserAlias anonymous ftp

     RequireValidShell off

     <Directory *>

      <Limit WRITE>

        DenyAll

      </Limit>

      <Limit STOR>

       AllowAll

      </Limit>

     </Directory>

    </Anonymous>

    Директивы User и Group задают имя пользователя для анонимного доступа. В обоих случаях применяется имя ftp. Для имени ftp определяется псевдоним anonymous. Вместо пароля нужно указать адрес электронной почты.

    Директива RequireValidShell отключает проверку командного интерпретатора пользователя. По умолчанию сервер ProFTPD ищет список допустимых интерпретаторов в файле /etc/shells. Если используемый пользователем интерпретатор не указан в файле /etc/shells, то соединение будет разорвано. Директива RequireValidShell off отключает такую проверку.

    Директива <Directory *> определяет свойства для всех каталогов. При этом всем пользователям запрещено записывать файлы на сервер, но разрешено сохранять файлы сервера на свой локальный компьютер.

    Желательно также добавить в блок Anonymous директиву MaxClients, которая указывает максимальное число клиентов. Нужно учитывать нагрузку на сервер и пропускной канал для определения максимального числа анонимных клиентов. Настоящих пользователей сервера FTP по возможности не следует ограничивать, в отличие от анонимных. При малоскоростном канале связи, например, 33 Кбит/с, установите маленькое максимальное количество анонимных клиентов, например, 5 или даже 3. Конечно, число клиентов также зависит от объема информации, расположенной на сервере. Если размеры файлов небольшие, например, документация, число клиентов можно установить несколько большим (10…15).

    11.4. Вспомогательные программы

    При работе с серверами wu-ftpd и ProFTPD вы можете использовать программы ftpshut, ftpwho, ftpcount. Инструментальные средства обоих серверов имеют похожие опции, но вспомогательные программы для ProFTPD выводят больше полезной информации.

    Программа ftpshut останавливает сервер. Программа ftpwho выводит информацию о пользователях, подключенных к вашему серверу. Программа ftpcount сообщает о количестве установленных соединений.

    Я рекомендую использовать расширенный вывод программы ftpwho. В этом режиме предоставляется больше информации (см. листинг 11.12).

    Листинг 11.12. Результат работы программы ftpwho

    # ftpwho –v

    Master proftpd process 759:

     1113 2m55s proftpd: ftp - localhost.localdomain: anonymous/den@den.com: IDLE

      (host: localhost.localdomain [127.0.0.1])

      (cwd: /)

     1150 0m20s proftpd: den - localhost.localdomain: IDLE

      (host: localhost.localdomain [127.0.0.1])

      (cwd: /home/den)

    Service class 2 users

    Программа ftpcount только сообщает об общем количестве пользователей (см. листинг 11.13).

    Листинг 11.13. Результат работы программы ftpcount

    Master proftpd process 759:

    Service class 2 users


    11.5. Виртуальный узел FTP

    В этом разделе книги пойдет речь о конфигурировании виртуального FTP-сервера. Создание виртуального FTP-сервера будет происходить с использованием сервера ProFTP.

    Для начала определимся, что такое виртуальный сервер? Как и подразумевает слово «виртуальный», такой сервер не будет существовать физически, но пользователь будет считать, что он работает с реальным сервером. ОС Linux может поддерживать несколько IP-адресов, благодаря чему имеется возможность создать виртуальные узлы. Если вы располагаете дополнительными IP-адресами, то они как раз могут использоваться для создания виртуальных узлов. При конфигурировании виртуальных FTP-узлов каждому из них нужно присвоить отдельный IP-адрес.

    Виртуальные FTP-узлы нужны, если вы, например, хотите организовать несколько узлов FTP, один — для одной рабочей группы, другой — для второй, третий может быть анонимным и так далее. Обслуживать сразу несколько FTP-узлов позволяет все тот же демон proftpd.

    Настройка виртуального FTP-узла очень похожа на настройку виртуального Web-сервера, настройка которого будет рассмотрена в следующей главе. Даже используется одна и та же директива VirtualHost. При этом, для конфигурирования виртуального FTP-сервера, в файл proftpd.conf нужно добавить директиву VirtualHost, содержащую IP-адрес (см. листинг 11.14).

    Листинг 11.14. Директива VirtualHost

    <VirtualHost 192.168.1.5>

     ServerName "Virtual FTP Server"

    </VirtualHost>

    В блоке VirtualHost можно использовать другие директивы, например, директиву Anonymous, которая создаст гостевой узел. Можно также задать каталог или порт (см. листинг 11.15).

    Листинг 11.15. Пример использования директивы VirtualHost

    <VirtualHost ftp.library.com>

     ServerName "Online library"

     MaxClients 15

     MaxLoginAttempts 1

     DeferWelcome on

     <Limit LOGIN>

      Allow from 192.168.1

      Denyfromall

     </Limit>

     <Limit WRITE>

      AllowUser libadmin

      DenyAll

     </Limit>

     <Anonymous /var/ftp/library/books>

      User library

      Group library

      AnonRequirePassword on

     </Anonymous>

     <Anonymous /var/ftp/library>

      User ftp

      Group ftp

      UserAlias anonymous ftp

     </Anonymous>

    </VirtualHost>

    В листинге 11.15 приведена конфигурация виртуального сервера ftp.library.com. В директиве VirtualHost используется доменное имя, которое должно быть прописано в сервере DNS. IP-адрес должен указывать на узел сети, на котором запущен демон ProFTPD. В листинге 11.15 также конфигурируются две анонимных учетных записи — library и ftp. Причем учетная запись library требует ввода пароля при регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. Доступ к виртуальному серверу разрешен только для подсети 192.168.1.0. Записывать данные на сервер может только пользователь libadmin.

    Рис. 11.2. FTP-клиент gFTP


    В качестве FTP-клиента для X Window я рекомендую использовать программу gFTP, которая обладает довольно удобным интерфейсом и богатыми функциями. Использование gFTP настолько простое, что я не буду останавливаться на его рассмотрении (см. рис. 11.2).








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх