□ ftpservers — описываются виртуальные FTP-серверы;
□ ftpusers — указываются пользователи, которым явно запрещен доступ к FTP-серверу;
□ ftphosts — определяются права доступа к серверу с определенных хостов. Можно как запрещать, так и разрешать доступ;
□ ftpgroups — описываются группы FTP;
□ ftpconversion — дает нам возможность настройки преобразования файлов на лету.
10.3. Основные настройки wu-ftp-сервера
Основным конфигурационным файлом wu-ftp-сервера является ftpaccess. Его содержимое можно увидеть в листинге 10.2.
Листинг 10.2. Пример конфигурационного файла ftpaccess
# This file was generated by the KDE wu-ftpd configurator.
# (c) 2000 by Bernhard Rosenkränzer ([email protected])
class all anonymous, guest, real *
noretrieve
loginfails 5
private no
banner /welcome.msg
email [email protected]
message/welcome.msg LOGIN
message.message CWD=*
readme README* LOGIN
readme README* CWD=*
chmod no anonymous, guest
delete no anonymous
overwrite no anonymous
rename no anonymous
passwd-check rfc822 warn
log transfers anonymous,guest,real inbound
log transfers anonymous,guest,real outbound
anonymous-root /home/flenov
При настройке FTP-сервера существует множество директив, для которых администраторы сохраняют исходные значения, потому что их работа не влияет на производительность или безопасность. Хотя некоторые из них помогают предотвратить неправильное или неэффективное использование сервера (например, время ожидания timeout XXXX способствует освобождению ресурсов), но значений по умолчанию достаточно, кроме того, изменение некоторых из них может, наоборот, сделать работу менее комфортной.
Давайте рассмотрим основные директивы этого файла. Чтобы впоследствии с ними легче было работать, я разбил все команды по категориям.
О дополнительных возможностях, которые мы не рассмотрим, вы можете получить подробную информацию из страниц руководства, выполнив команду man ftpaccess.
10.3.1. Доступ
Такие директивы определяют основные права доступа к FTP-серверу. Давайте рассмотрим основные из них:
□ class имя type адреса — позволяет организовать классы пользователей по их типу и адресу. В нашем конфигурационном файле указана следующая строка:
class all anonymous,guest,real *
В качестве имени класса здесь указано all. После этого идет перечисление через запятую типов пользователей, которые будут отнесены к этому классу. В данном случае присутствуют все категории: anonymous, guest и real (анонимные, гости и авторизованные пользователи). Последний параметр — это шаблон адреса, на месте которого стоит звездочка, т.е. любой адрес. Получается, что к классу all относятся любые пользователи с произвольными адресами.
Классы — очень удобная вещь. Это как группы. Вы объединяете определенных пользователей и можете назначать им права. Например, можно создать класс пользователей, у которых IP-адрес относится к зоне вашей компании, офиса или страны. Затем только этому классу открываете полноценный доступ к FTP, а всем остальным — запрещаете или ограничиваете использование. Назначить права сразу целому классу намного удобнее, чем расписывать разрешение каждому пользователю в отдельности;
□ noretrieve тип класс файл — запрещает чтение указанного файла. Параметр тип указывает на абсолютную (absolute) или относительную (relative) адресацию (путь) к файлу. Далее идет определение класса в формате class=имя класса, к которому относится данный запрет. Можно явно указать описанный выше класс all или вообще его опустить, тогда запрет будет относиться ко всем пользователям. Если в качестве файла указан конкретный путь, то доступа не будет только к этому файлу. Если в параметре указано лишь его имя (например, passwd), то будет закрыт доступ ко всем файлам с таким названием в любой директории.
Рассмотрим пример, запрещающий доступ к любым файлам с именем passwd:
noretrieve relative passwd
Попробуйте добавить эту строку в свой конфигурационный файл. Теперь подключитесь к серверу с помощью FTP-клиента. Для тестирования из X Window я в графическом режиме Linux использовал программу gftp. Подключившись к серверу, я создал файл passwd в директории /home и попытался его скачать в каталог /home/flenov. В ответ на это FTP-клиент только создал пустой файл, но скачать ничего не смог, из-за установленного запрета программа завершилась аварийно. Такое окончание — это, конечно же, особенность gftp, а другой FTP-клиент должен правильно обработать ошибку и сохранить работоспособное состояние.
Если FTP-сервер находится на одном физическом сервере с Web-сервером, то вполне логичным будет запретить чтение файла .htaccess, в котором прописываются права доступа на директории для Web-сервера. Пользователи FTP не должны иметь права даже смотреть их. Лучше прописать разрешение только конкретным клиентам, чтобы каждый из них мог работать только со своими файлами .htaccess, или предоставить другой способ редактирования прав.
Работу с системными каталогами можно вообще отменить. Например, следующая строка запретит получение любого файла из директории /etc:
noretrieve /etc
После этого нельзя будет скачать ни один файл не только из директории /etc, но и из ее поддиректорий;
□ loginfails число — количество неудачных попыток входа на сервер, после которого в журнале будет создана соответствующая запись. В нашем примере стоит число 5. Если пользователь не смог войти на сервер 5 раз, то это уже говорит о попытке взломщиком подобрать пароль случайным образом или по словарю (атака brute force);
□ private параметр — возможность использовать команды wu-ftp-сервера SITE GROUP и SITE GPASS (в других FTP-серверах этих команд может и не быть) для смены группы (значение параметра yes). Если пользователь укажет верную группу и пароль, то он получит права группы из файла ftpgroups;
□ deny адрес файл — запрет доступа клиентов с указанного адреса. В случае попытки подключения выводится сообщение из текстового файла, указанного в качестве последнего параметра. Адрес может указываться в виде шаблона;
□ defumask mask — маска прав доступа, используемая при создании новых файлов. О команде umask для ОС Linux (задает текущее значение маски) мы говорили в разд. 4.1;
□ limit-time тип минуты — ограничение времени сессии. Например, вы хотите, чтобы определенные пользователи не засиживались на вашем FTP-сервере. Используя эту директиву, в качестве типа можно указать звездочку (*) для всех пользователей, real, anonymous или guest. Последний параметр — это количество минут сессии. По прошествии указанного времени соединение будет разорвано;
□ file-limit направление число класс — ограничение на число передаваемых файлов. В качестве направления можно указать in (входящие), out (исходящие) и total (всего). Чтобы запретить работу более чем с 10 файлами, воспользуйтесь командой file-limit total 10;
□ byte-limit направление число класс — ограничение на число передаваемых байт. Работа директивы схожа с file-limit;
□ anonymous-root каталог — задание в явном виде корневой директории для анонимных пользователей, т.к. у них не может быть собственного каталога в отличие от реального пользователя, для которого при подключении к системе корнем является его домашняя директория;
□ guest-root каталог — аналогична предыдущей команде. Директива необходима, если вы хотите, чтобы все гости могли работать с одной и той же директорией. Если у каждого гостя должен быть свой каталог, то лучше для каждого из них явно создавать учетную запись (см. разд. 10.6).
□ passwd-check тип сообщение — определяет проверку правильности пароля для анонимных пользователей. В данном случае имеется в виду контроль E-mail-адреса, который они используют. В качестве типа может указываться одно из трех значений: none (нет проверки), trivial (простая проверка на содержания в адресе символа "@)" или rfc882 (полная проверка, на соответствие стандарту rfc 822). Параметру сообщение можно присваивать значение warn (выводить предупреждение, но продолжать работу) или enforce (отказать в доступе);
□ deny-email адрес — отказ в доступе, если в качестве пароля используется указанный адрес. В большинстве FTP-клиентов в настройках прописан для анонимного доступа какой-либо почтовый ящик, например, [email protected]. Мало кто меняет этот адрес. Так как он соответствует всем правилам, то сервер не определит, что это обманка. Но можно прописать его в этом параметре, и тогда пользователю придется поменять в настройках FTP-клиента адрес на другой, иначе он не сможет подключиться. Но даже это не будет гарантировать, что анонимный пользователь указал именно свой E-mail в качестве пароля;