Протокол FTP считается одной из старейших служб Internet. Несмотря на то, что он может применяться для решения различных внутренних задач организации, в Internet часто встречаются "анонимные FTP-серверы", с помощью которых пользователи могут загружать файлы, не имея учетной записи на данном узле.
Через FTP-серверы может распространяться программное обеспечение, документация и т.д. Как правило, доступ к ним осуществляется поверх протокола HTTP. Основное преимущество такого подхода заключается в том, что пользователи могут легко просматривать дерево доступных каталогов, видеть размеры файлов и даты их обновления. При добавлении новых файлов нет необходимости создавать какой-либо код HTML — достаточно поместить их в заданной зоне узла.
Для организации анонимного FTP-сервера создайте учетную запись псевдопользователя ftp, задайте соответствующий начальный каталог и сконфигурируйте серверный демон ftpd. Поскольку анонимный FTP-серверобщедоступен, необходимо правильно его настроить, чтобы важные файлы случайно не оказались доступными внешнему миру.
Демон ftpd управляется демоном inetd, следовательно, должен иметь соответствующие записи в файлах /etc/inetd.conf и /etc/services. Если пользователи FTP-сервера регистрируются анонимно, демон ftpd выполняет команду chroot. Тогда файлы, не находящиеся в каталоге ~ftp, становятся невидимыми и недоступными. Это довольно важная мера защиты, поскольку демон ftpd должен выполняться с установленным битом SUID, меняя свой идентификатор пользователя на root, чтобы иметь доступ к привилегированным портам сокетов.
Перечислим действия, которые необходимо выполнить при создании анонимного FTP-сервера:
- добавить запись псевдопользователя ftp в файл паролей;
- создать подкаталоги bin, etc и pub в каталоге ~ftp;
- скопировать программу ls в каталог ~ftp/bin;
- скопировать файлы /etc/passwd и /etc/group в каталог ~ftp/etc;
- отредактировать файлы passwd и group, как показано ниже;
- заменить все пароли в файле ~ftp/etc/passwd звездочками;
- задать надлежащие права доступа к файлам и каталогам в каталоге ~ftp.
Поскольку никто не должен регистрироваться в системе под именем ftp, задайте для данного имени звездочку вместо пароля. Желательно также назначить в качестве регистрационного интерпретатора команд программу /bin/false.
В сеансе доступа к анонимному FTP-серверу корневым каталогом системы становится ~ftp (это делает команда chroot), поэтому подкаталоги bin и etc должны содержать копии всех команд и конфигурационных файлов, необходимых демону ftpd. После выполнения команды chroot каталоги ~ftp/bin и ~ftp/etc выглядят как /bin и /etc. В большинстве случаев демон ftpd пользуется только командой ls и урезанными копиями файлов /etc/passwd и /etc/group из каталога ~ftp/etc.
Усеченный файл passwd должен содержать записи лишь пользователей root, daemon и ftp. Пароли необходимо заменить звездочками, поскольку эта копия файла доступна любому посетителю FTP-сервера. Даже если пароли зашифрованы, остается риск, что другие пользователи смогут их раскрыть.
С целью усиления мер безопасности сделайте файл ~ftp/bin/ls доступным только для выполнения, назначив ему режим доступа 111. В этом случае клиенты не смогут копировать двоичный код, пытаясь найти в нем слабые места.
Поместите в каталог ~ftp/pub те файлы, которые предполагается выставить на всеобщее обозрение.
Если в системе установлены совместно используемые библиотеки функций, а программа ls не была скомпонована статически, может потребоваться скопировать библиотечные файлы в каталог ~ftp либо создать на них жесткие ссылки для формирования корректной среды выполнения. Дело в том, что библиотечные файлы становятся недоступными после выполнения команды chroot.
Очень важно правильно задать права доступа к различным файлам и каталогам. Рекомендуемые нами права перечислены в табл. 22.4.
Таблица 22.4. Рекомендуемые права доступа к содержимому каталога ~ftp
|
Файл/каталог
|
Владелец
|
Режим
|
|
~ftp
|
root
|
555
|
|
~ftp/bin
|
root
|
555
|
|
~ftp/bin/ls
|
root
|
111
|
|
~ftp/etc
|
root
|
555
|
|
~ftp/etc/passwd
|
root
|
444
|
|
~ftp/etc/group
|
root
|
444
|
|
~ftp/pub
|
root
|
755
|
В Solaris требуется, чтобы программа ls размещалась в каталоге ~ftp/usr/bin. Файл в каталоге ~ftp/bin должен представлять собой символическую ссылку на каталог usr/bin (а не на ~ftp/usr/bin, поскольку после выполнения команды chroot это путевое имя становится неопределенным). В Solaris применяются совместно используемые библиотеки функций, поэтому для функционирования команды ls в каталоге ~ftp следует установить множество дополнительных файлов. Более подробную информацию на эту тему можно найти на man-странице демона ftpd. Не забудьте скопировать файл /etc/netconfig в каталог ~ftp/etc.
В HP-UX вместо файла /etc/group используется файл /etc/logingroup, копию которого надлежит поместить в каталог ~ftp/etc.
Как во FreeBSD, так и в Red Hat применяются совместно используемые библиотеки функций, однако все необходимые файлы автоматически копируются в каталог
~ftp в процессе инсталляции операционной системы. Фактически, анонимный FTP-сервер создается по умолчанию. В результате возникает угроза безопасности системы, если администратор ничего не подозревает о подобном положении вещей. Если не требуется поддерживать анонимный FTP-сервер, удалите запись псевдопользователя
ftp из файла
passwd (во FreeBSD после редактирования файла паролей нужно запустить команду
pwd_mkdb, чтобы создать его хэш-версию —
pwd.db).