Linux: установка анонимного FTP сервера ftpd |
![]() |
Добавил(а) microsin |
Описана установка стандартного сервера ftpd по шагам, на примере Red Hat Linux 4 (для других дистрибутивов процедура очень похожа). Статья основана на книге "Руководство администратора Linux" авторов Эви Немет, Гарт Снайдер, Трент Хейн. 1. Настраиваем открытие управляющего порта 21 для протокола FTP и запуск демона ftpd при подключении клиента к этому порту. В общем случае демона ftpd запускает управляющий стандартными сервисами Интернет демон inetd, либо xinetd (это зависит от дистрибутива). После того, как демон ftpd запущен, он берет на себя всю дальнейшую работу с клиентом, и работает вплоть до завершения соединения (при завершении соединения ftpd прекращает работу). Для каждого клиентского подключения запускается отдельный процесс ftpd. На разных дистрибутивах Linux настройка делается по разному. Узнать, какой Интернет-демон у Вас используется - inetd или xinetd можно, пробуя запускать команду man inetd и man xinetd (по тому демону, который есть в системе, справка откроется). В случае с inetd нужно внести (либо проверить) записи в конфигурационных файлах /etc/inetd.conf и /etc/services. В случае с xinetd (как было у меня на RedHat) нужно создать файл /etc/xinetd.d/ftp (его будет читать демон xinetd) со следующим содержимым: Немного пояснений. Переменная server_args со значением "-l -l -d" задает подробную запись в syslog процессов подключения к серверу ftp и ошибок. Доступ через аккаунт root будет разрешен с полным доступом во все каталоги (чего не рекомендуется делать, если Вы публикуете сервер ftp в небезопасном окружении). Для более подробной справки по опциям см. man ftpd. Для отключения доступа через root можно применить опцию для ftpd -A или -a, но лучше добавить в файл /etc/ftpusers пользователя root - это гарантированно запретит доступ по ftp от имени пользователя root (у меня по умолчанию этот файл отсутствовал, и я его создал). 2. Создаем аккаунт ftp и группу ftp. Мне это не потребовалось, поскольку это они уже были сделаны: Немного пояснений. Пользователь ftp - это псевдопользователь для анонимного доступа. Под этим пользовтелем происходит подключение к ftp-серверу, когда логин при подключении anonymous или ftp, а пароль любой. Обычно вместо пароля предлагается вести имя почтового ящика, но это не всегда обязательное требование - иногда пароль не проверяется, и может даже отсутствовать. 3. Создаем домашний каталог пользователя ftp и стандартную систему папок в этом каталоге. Немного пояснений. "Домашний" каталог у пользователя ftp указан в 6-м параметре строки описания пользователя ftp (файл /etc/passwd), этот же каталог будет корневым для любого пользователя, анонимно подключившегося к серверу с логином anonymous или ftp. В нашем примере это каталог /var/ftp, далее по тексту он будет фигурировать как каталог ~ftp. Создаем дерево подкаталогов, в которых будут размещаться некоторые необходимые в работе файлы ftp. Немного пояснений. FTP-сервер ftpd устроен так, что для навигации клиента ftp по каталогам необходим запуск программы ls. Эта программа, а также используемые ею библиотеки хранятся в критически важных для безопасности сервера местах. Однако запуск программы ls для анонимного пользователя чреват потенциальным взломом, поскольку процесс ftpd выполняется с привелегиями суперпользователя (для доступа к сетевым сокетам). Поэтому идут на специальные ухищрения - создают для анонимного пользователя ftp "песочницу" - отдельную систему каталогов, которая содержит копию программу ls и нужных для работы файлов (каталоги ~ftp/bin, ~ftp/etc, ~ftp/lib и ~ftp/pub). На эту систему каталогов настраиваются ограниченные права (об этом поговорим далее). Создадим "песочницу": Поскольку сеанс работы с анонимным FTP-сервером выполняется в изолированной среде выполнения (chrooted environment), то каталог ~ftp становится корневым каталогом, а каталоги ~ftp/bin, ~ftp/etc, ~ftp/lib и ~ftp/pub маскируются соответственно под /bin, /etc, /lib и /pub. Таким образом, ваш сервис оказывается отрезанным от системных библиотек и прочих “опасных” программ, которые, тем не менее, ему нужны в работе и их требуется предоставить, не нарушая при этом безопасности системы. Какие именно программы и библиотеки необходимы – зависит от того, какой FTP-сервер вы будете использовать, так как у большинства из них свои специфические особенности. Некоторым, например, требуется наличие ~ftp/etc/passwd для получения имен владельцев и групп файлов. 4. Теперь скопируем команду ls в папку /var/ftp/bin (местонахождение команды ls делаем поиском find / -name ls, у меня она была по адресу /bin/ls): Делаем жесткие ссылки на библиотеки, используемые программой ls. Тут всё не очень просто. Для этого сначала узнаем их список: Немного пояснений. Здесь в выводе одна строка соответствует библиотеке. Однако здесь только третья строка показывает на реальный файл, остальные указывают на мягкие (символические) ссылки на библиотеки: Нам нужно создать в песочнице жесткие ссылки на оригинальные библиотеки (командой ln без опций) с такими же именами, как прописаны в зависимостях. Имеется целых 3 файла, и каждый является двоичным... Какой выбрать? Проводим дальнейшие исследования. Последние 2 файла имеют одинаковый размер, но это ни о чем не говорит. Поэтому лучше, наверное, взять тот файл, что лежит там же, где и ссылка на него, то есть /lib/tls/librt-2.3.4.so. Итак, делаем жесткую ссылку на файл /lib/tls/librt-2.3.4.so и размещаем её в каталоге ~ftp/lib/tls: Эту операцию надо проделать для всех зависимостей программы ls (/lib/tls/librt.so.1, /lib/libacl.so.1, /lib/libselinux.so.1, /lib/tls/libc.so.6, /lib/tls/libpthread.so.0, /lib/ld-linux.so.2, /lib/libattr.so.1). Все операции по поиску целей для ссылок я тут пропустил: Уффф... Готово. После этой мудреной процедуры у нас заработает наконец-то просмотр каталогов ftp-сервера при анонимном подключении (если перегрузить демон xinetd, но пока этого делать не будем). 5. Скопируем файлы /etc/passwd и /etc/group в каталог ~ftp/etc, и подправим эти копии. Немного пояснений. Это нужно для подстраховки, чтобы не допустить чтение оригинальных файлов паролей и групп. Отредактируйте эти копии таким образом, чтобы остались записи только для root, daemon и ftp, а зашифрованные пароли (если они есть) замените звездочками. В результате должно получиться примерно так: 6. Займемся теперь правами на файлы и каталоги папки ~ftp (напоминаю, что у нас эта папка соответствует папке /var/ftp). Владельцем каталога ~ftp будет являться пользователь root - именно он, а не ftp. Это нужно для безопасности FTP-сервера и системы в целом. Само собой, пароль пользователя root должен храниться в секрете, и доступ на ftp под пользователем root должен быть запрещен (как я уже говорил, с помощью файла /etc/ftpusers). Для возможности записи файлов на сервер FTP создадим еще папку ~ftp/pub/incoming. Авторы рекомендуют на все перечисленные выше каталоги разграничить права доступа согласно таблице: Выполним для изменения прав следующие команды: Немного пояснений. При такой системе назначения прав все файлы и каталоги, находящиеся в каталоге ~ftp/pub, будут доступны только для чтения. Есть возможность выкачать с клиента на сервер файл в папку ~ftp/pub/incoming (и скачать его оттуда, если знать имя), но список папки ~ftp/pub/incoming будет недоступен для просмотра. Папки ~ftp/bin и ~ftp/lib будут видны, но ни список, ни содержимое недоступны для просмотра. Папка ~ftp/etc с файлами passwd и group нужны для перестраховки - чтобы маскировать настоящие файлы /etc/passwd и /etc/group. Группу, которой принадлежит ~ftp/pub, лучше сменить с root на специальную, в которую включены пользователи, имеющие право изменения содержимого этого каталога – этим не стоит заниматься от имени root. Совет: для предотвращения атаки на ваш сервер через ftp путём переполнения диска информацией с целью заблокировать работу всей системы создавайте каталог ~ftp/pub/incoming на отдельном разделе. 7. Перезапускаем демона xinetd (это надо сделать всегда, если внесли какие-то изменения в конфигурационные файлы этого демона, которые находятся в папке /etc/xinetd.d):
|