Если произошло что-то неординарное, то, используя журналы, вы должны получить максимальную информацию о происшедшем и сделать все необходимое, чтобы это не повторилось (к вопросу журналирования мы еще вернемся в гл. 12).
По умолчанию wu-ftp для хранения журнала, который содержит последние записи FTP-сервера, использует файл /var/log/xferlog. История за предыдущие дни может быть просмотрена в файлах /var/log/xferlog.X, где X — это число от 0 до 5.
Давайте посмотрим, что можно регистрировать в журналах wu-ftp-сервера:
□ log commands список — сохранять все команды клиента. В качестве списка можно указать одно из следующих значений: anonymous, guest или real;
□ log transfers список направление — писать файлы, которые получает или отправляет пользователь. Последний параметр может содержать одно из двух значений inboard (входящий) и outboard (исходящий);
□ log security список — регистрировать все нарушения безопасности, попытки выполнить запрещенные команды и др.;
□ log syslog — использовать системный журнал syslog;
□ log syslog+xferlog — использовать журналы syslog и xferlog одновременно.
10.4. Создание виртуальных серверов
Поддержка виртуальных серверов для FTP — очень мощная вещь. Когда на компьютере крутится 20 виртуальных Web-серверов и ими управляют разные люди, то вполне логичным будет для каждого из них поставить в соответствие свой FTP-сервер. В этом случае любому сайту могут быть назначены свои правила.
Мы не будем сильно заострять внимание на виртуальных серверах, потому что это выходит за рамки нашей книги. Если вы хотите узнать о их параметрах, то можете обратиться к документации (man ftpaccess), или для создания воспользоваться графической утилитой управления FTP-сервером.
Если честно, то мне не очень нравятся возможности wu-ftp по работе с виртуальными серверами. Если вам действительно нужно несколько серверов на одном компьютере, то советую обратить внимание на сервер ProFTP, который, на мой взгляд, больше приспособлен для решения данной задачи. Неудобство настройки wu-ftp заключается в разбросе конфигурационных файлов.
Определение всех виртуальных FTP-серверов происходит в конфигурационном файле ftpservers. Описание выполнено в виде строк, каждая из них содержит IP-адрес виртуального сервера и каталог, в котором находятся его файлы настройки (дублирующие все указанные ранее файлы wu-ftp-сервера). Если один из них отсутствует, то будет использоваться соответствующий конфигурационный файл из каталога /etc.
10.5. Дополнительные настройки
Пока что мы рассматривали только файл ftpaccess. Но мы уже знаем, что для конфигурации wu-ftp-сервера используется намного больше файлов. Давайте посмотрим, что еще нам доступно для настроек.
10.5.1. Запрет доступа реальным пользователям
Так как сервер wu-ftp работает с учетными записями ОС, которые расположены в файле /etc/passwd, то любой пользователь автоматически сможет работать с FTP-сервером, используя свой аккаунт и права доступа. Но далеко не всем это необходимо.
Чтобы запретить доступ уже существующему пользователю, его имя нужно добавить в файл /etc/ftpusers. Содержимое этого файла по умолчанию можно увидеть в листинге 10.3. В зависимости от дистрибутива текст может изменяться.
Листинг 10.3. Содержимое файла /etc/ftpusers
# The ftpusers file is deprecated.
# Use deny-uid/deny-gid in ftpaccess.
root
bin
daemon adm lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
Обратите внимание, что пользователю root тоже запрещен доступ. Это связано с тем, что у администратора слишком много прав, и если злоумышленник получит возможность пользоваться этой учетной записью, то сможет удаленно уничтожить систему (например, стереть файлы). Никогда не допускайте к FTP пользователей с повышенными привилегиями (администратора root и пользователей группы root).
Если вам нужно работать с файлами или директориями, которые доступны только администратору с нулевым идентификатором, то не используйте для этого FTP. Лучше производить изменения, сидя непосредственно за компьютером или через промежуточную папку (закачать файлы в свой каталог, а потом локально или через удаленный, но безопасный терминал, корректировать).
Лучше всего доступ по FTP запретить всем системным учетным записям, ID которых менее 500. Для этого достаточно в файле ftpaccess добавить следующую строку:
deny-uid %-500
В этом случае можно быть уверенным, что никого не забыли. Тем более что с одним идентификатором (например, с ID, равным нулю) может быть несколько пользователей.
10.5.2. Компьютерам вход запрещен
Как говорит великая администраторская мудрость — на сетевой экран надейся, а сам не плошай. Firewall позволяет запретить доступ к серверу на определенные порты с конкретных компьютеров. Конфигурационный файл /etc/ftphosts выполняет схожие задачи — разрешает или запрещает доступ с указанных IP-адресов или целой сети.
По умолчанию файл пустой, потому что разработчики дистрибутива не могут знать, как вы планируете организовать доступ. Вы можете прописать в нем следующие директивы:
allow имя шаблон
deny имя шаблон
Например, если вы хотите запретить доступ анонимным пользователям с адреса 192.168.1.1, то добавьте строку:
deny anonymous 192.168.1.1
Если исходить из нашего принципа "Что не разрешено, то запрещено", то может показаться, что строка с директивой deny не нужна. Это неверно, потому что необходимо закрепить разрешение на доступ с указанного адреса для определенного типа пользователей, чтобы остальным закрыть возможность входа на FTP.
10.5.3. Группировка
В файле ftpgroups находятся описания групп (равносильны правам доступа), при создании которых можно использовать команды SITE GROUP и SITE GPASS. Это нестандартные директивы FTP, и мало кем из производителей поддерживаются, поэтому для пользователей работа с этими командами может оказаться слишком неудобной.
Файл ftpgroups содержит строки примерно следующего вида:
test:ENCRYPTED PASSWORD HERE:archive
Строка-описание состоит из трех параметров, разделенных двоеточием: имя группы, пароль и реальное (системное) имя группы.
10.6. Гостевые учетные записи
Если сейчас попытаться войти в систему под любым аккаунтом, то вы сможете путешествовать по всей файловой системе. Но в большинстве случаев пользователям нужно работать только с собственными документами, поэтому для всех своих FTP-пользователей я завожу гостевые учетные записи. Давайте рассмотрим на примере, как это происходит.
Для начала нужно создать новую учетную запись для пользователя, например robert_ftp. Для этого выполняем команду:
add robert_ftp
Теперь посмотрим на созданную для него строку в файле /etc/passwd. Она должна выглядеть примерно следующим образом:
robert_ftp:x:507:507::/home/robert_ftp:/bin/bash
Классическая запись для нового пользователя. Но через нее можно входить в систему локально, а мы должны ограничиться только FTP-доступом. Изменим командную оболочку (shell) для этого пользователя на /bin/ftponly. Такой оболочки пока нет, и мы ее еще создадим чуть позже. Помимо этого, необходимо директорию /home/robert_ftp сделать корневой. Для этого нужно добавить в конце пути папку с именем в виде точки.
Отредактируйте соответствующим образом строку, и вы получите такой результат:
robert_ftp:x:507:507::/home/robert_ftp/.:/bin/ftponly
Обратите внимание, что в качестве командной оболочки указан файл /bin/ftponly, который не существует. Давайте его создадим. Это делается только один раз и потом используется всеми гостевыми учетными записями. Для создания файла можно воспользоваться командой cat:
cat >> /bin/ftponly
В ответ на это все команды, которые теперь будут вводиться в консоли, попадут в файл /bin/ftponly. Наберите следующий текст:
#! /bin/sh
echo 'You are not allowed to log in interactively'
exit 0
Для завершения ввода в файл нужно нажать сочетание клавиш <Ctrl>+<X>, и вы вернетесь в нормальный режим работы.
В файле /bin/ftponly у нас хранится всего две команды: первая выводит на экран эхо-сообщение о том, что нельзя входить в систему интерактивно, вторая — завершает сеанс.
Теперь необходимо сделать наш скрипт /bin/ftponly исполняемым. Для этого выполните команду:
chmod 755 /bin/ftponly
Итак, у нас создан файл командной оболочки и пользователь, который использует ее. Если сейчас попытаться войти в систему как пользователь robert_ftp, то на секунду появится сообщение "You are not allowed to log in interactively" и произойдет выход из системы. Таким образом, работать под учетной записью robert_ftp нельзя.