Linux: Полное руководство — страница 52 из 98

15.2.1. Установка и запуск ProFTPD

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


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

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

15.2.2. Настройка ProFTPD. Файл /etc/proftpd.conf

Сервер ProFTPD использует всего один файл конфигурации —

/etc/proftpd.conf
.

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

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

# Этот файл устанавливает один сервер и одну учетную запись

ServerName "My ProFTPD server"

ServerType standalone

DefaultServer on

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

Port 21

Umask 022

MaxIstances 30

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

User nobody

Group nobody

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

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

 AllowOverwrite on

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

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

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


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

ДирективаОписание
AccessGrantMsg сообщениеОтветное сообщение, которое будет отправлено пользователю в случав его регистрации или получения анонимного доступа. Символы %u будут заменены на имя пользователя которое он ввел при регистрации
Allow from all | host | network [,host | network[, …]]Используется внутри блока Limit. Ограничивает доступ к серверу (а именно, разрешает доступ). По умолчанию allow from all
AllowAllРазрешает доступ к блокам Directory, Anonymous, Limit
AllowForeignAddress on | offРазрешает клиенту указывать при установке соединения адрес, который не соответствует ему. По умолчанию off. Может использоваться в блоках VirtualHost, Anonymous,
AllowGroup список_группРазрешает доступ определенным группам. Используется в блоке Limit
AltowUser список_пользователейРазрешает доступ определенным пользователям. Используется в блоке Limit
AnonRequirePassword on | offТребует пароль при анонимной регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. По умолчанию данная опция выключена
Создает анонимную учетную запись, directory — корневой каталог анонимного сервера
AuthGroupFile путьПозволяет указать путь к альтернативному файлу group. По умолчанию используется файл /etc/group
AuthUserFile путьУказывает альтернативный файл passwd
Bind ip-адресРазрешает привязку дополнительного IP-адреса к основному или виртуальному хосту
DefaultRoot каталогЗадает корневой каталог по умолчанию
Deny from all | host | networkЗапрещает доступ к серверу. Используется в блоке Limit
DenyAllЗапрещает анонимным пользователям доступ к объектам, указанным в блоке Limit
DenyUser список_пользователейЗапрещает доступ определенным пользователям
путьИспользуется в VirtualHost, Anonymous для того, чтобы определить особенные параметры доступа к каталогу и его подкаталогам
DisplayFirstChdir файл_сообщенияУказанный текстовый файл будет выводиться, когда пользователь впервые за время сеанса войдет в данный каталог. Используется в VirtualHost, Directory, Anonymous
DisplayLogin файл_сообщенияЭтот файл будет отображен, когда пользователь зарегистрируется
Используется для задания параметров, которые будут использоваться как основным, так и всеми виртуальными серверами
Ограничение на выполнение данной 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, несмотря на то, что командой chroot корневой каталог был изменен
RequireValidShell on | offРазрешает или запрещает регистрацию при использовании оболочек (shells), которые не указаны в файле /etc/shells
ServerAdmin emailОпределяет email администратора сервера
ServerTypeОпределяет режим работы сервера standalone (по умолчанию) или inetd. В первом случае сервер будет запускаться автоматически из стартовых сценариев системы, во втором — его будет запускать сервер inetd при попытке соединения
TimeoutIdle секундыВремя в секундах, в течение которого пользователь имеет право не проявить активности. По умолчанию 60 (1 минута)
Umask маскаОпределяет права доступа для созданного файла. Маска — число в восьмеричной системе, определяющее набор прав доступа (см. главу 2)
User имя пользователяИмя пользователя, присвоенное демону ProFTP
UserAlias псевдоним пользовательСоздает указанный псевдоним для указанного пользователя
Создает виртуальный сервер

15.2.3. Разграничение доступа к серверу ProFTP

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

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

  AllowAll

  DenyAll

Директива Directory определяет свойства каталога

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

Кроме команд WRITE и READ, в директиве Limit можно задавать команды STOR и LOGIN (таблица 15.6).


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

КомандаНазначение
LOGINОграничивает регистрацию
WRITEОграничивает запись
HEADОграничивает чтение
STORОграничивает прием файлов

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

Листинг 15.9. Пример блока Limit

 DenyAll

 AllowUser den

 Deny from 111.111.111.111

 Deny from 192.168.2.

Для конфигурирования отдельного каталога может также использоваться файл

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

Организация анонимного FTP-сервера

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

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

/etc
.

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

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

 User ftp

 Group ftp

 UserAlias anonymous ftp

 RequireValidShell off

   DenyAll

   AllowAll

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

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

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

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

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

15.3. Утилиты обслуживания FTP-сервера