Желательно также добавить в блок Anonymous директиву MaxClients, которая указывает максимальное число клиентов. Нужно учитывать нагрузку на сервер и пропускной канал для определения максимального числа анонимных клиентов. Настоящих пользователей сервера FTP по возможности не следует ограничивать, в отличие от анонимных. При медленном канале связи, например, 33 Кбит/сек, установите максимальное количество анонимных клиентов небольшим, например, 5 или даже 3. Конечно, число клиентов также зависит от объема информации, расположенной на сервере. Если размеры файлов невелики (например, это текстовые файлы), то число клиентов можно установить несколько большим (10–15).
15.3. Утилиты обслуживания FTP-сервера
При работе с серверами wu-ftpd и ProFTPD вы можете использовать программы ftpshut (останавливает сервер), ftpwho (выводит информацию о пользователях), ftpcount (сообщает о количестве установленных соединений). Инструментальные средства обоих серверов имеют похожие опции, но вспомогательные программы для ProFTPD выводят больше полезной информации.
Я рекомендую использовать расширенный вывод утилиты ftpwho. В этом режиме предоставляется больше информации (листинг 15.11).
Листинг 15.11. Результат работы программы 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
15.4. Виртуальный узел FTP
Виртуальный сервер — это сервер, не существующий физически, но представляющийся пользователю как реальный сервер. ОС Linux может поддерживать несколько IP-адресов, благодаря чему имеется возможность создать виртуальные узлы. Если вы располагаете дополнительными IP-адресами, то они как раз могут использоваться для создания виртуальных узлов. При конфигурировании виртуальных FTP-узлов каждому виртуальному узлу нужно присвоить отдельный IP-адрес.
Виртуальные FTP-узлы нужны, если вы, например, хотите организовать несколько узлов FTP — например, для разных рабочих групп и для анонимных пользователей. Обслуживать сразу несколько FTP-узлов позволяет все тот же демон proftpd.
Настройка виртуального FTP-узла очень похожа на настройку виртуального веб-сервера, которая будет рассмотрена в следующей главе. Даже используется одна и та же директива VirtualHost, содержащая IР-адрес или доменное имя, прописанное в службе DNS. IP-адрес должен указывать на узел сети, на котором запущен ProFTPD (см. листинг 15.12).
Листинг 15.12. Пример использования директивы VirtualHost
ServerName "Online library"
MaxClients 15
MaxLoginAttempts 1
DeferWelcome on
Allow from 192.168.1
Deny from all
AllowUser libadmin
DenyAll
User library
Group library
AnonRequirePassword on
User ftp
Group ftp
UserAlias anonymous ftp
В примере 15.12 также конфигурируются две анонимных учетных записи — library и ftp. Причем учетная запись library требует ввода пароля при регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. Доступ к виртуальному серверу разрешен только для подсети 192.168.1.0. Записывать данные на сервер может только пользователь libadmin.
15.5. Защита FTP
Очень полезной, особенно, при организации виртуальных узлов, является конфигурационная директива DefaultRoot, позволяющая указать каталог, который представлялся бы пользователям как корневой. Например, значение DefaultRoot "~" настраивает сервер так, чтобы корневым каталогом каждого пользователя был его собственный домашний каталог.
А что делать, если нам нужно, чтобы пользователи видели все дерево файловой системы? Например, чтобы каждый мог посмотреть, в каком каталоге находится та или иная программа. В этом случае целесообразно ограничить действия над файлами в корневом каталоге (точнее, во всех каталогах, кроме домашнего каталога пользователя). Делается это так:
DenyAll
Пример файла конфигурации с использованием директивы DefaultRoot приведен ниже (листинг 15.13):
Листинг 15.13. Пример использования директивы Default Root (/etc/proftpd.conf)