Red Hat Linux 6 Server 5-85582-122-6

Книга Red Hat Linux 6 Server Red Hat Linux 6 ServerКниги Linux Автор: Мохаммед Дж. Кабир Год издания: 2001 Формат: djvu

395 76 5MB

Russian Pages 560 Year 2001

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

Red Hat Linux 6 Server
 5-85582-122-6

  • Commentary
  • 1128494242*
  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Red Hat Linux 6 Server

Управление пользователями, процессами и сетями Запуск служб Интранет и Интернет Настройка ядра Linux на максимальную производительность

Мохаммед Дж. Кабир

Red Hat® Linux® 6 Server Мохаммед Дж. Кабир

Издательство «ЛОРИ»

www.books-shop.com

Red Hat® Linux* 6 Server Mohammed J. Kabir Published by M&T Books An imprint of IDG Books Worldwide, Inc. 919 E. Hillsdale Blvd., Suite 400 Foster City, CA 94404 www.idgbooks.com (IDG Books Worldwide Web Site) Copyright © 1999 IDG Books Worldwide, Inc. All rights reserved. ISBN 0-7645-3337-1 Red Hat* Linux* 6 Server Мохаммед Дж. Кабир Переводчик О. Д. Труфанов Научный редактор М. А. Кузьмин Корректор Н. Литвинова Верстка Е. Самбу © Издательство «Лори», 2001 Изд. № : OAI (03) ЛР № : 070612 30.09.97 г. ISBN 5-85582-122-6

Подписано в печать 20.05.01 Формат 84 х 110/16 Бумага офсет № 1 Гарнитура Ныо Баскервиль Печать офсетная Печ. л. 35 Тираж 3200 Заказ № 436 Цена договорная Издательство «Лори», Москва, Б. Тишинский пер., д. 40, корп. 2 Телефон для оптовых покупателей: (095) 256-02-83 Размещение рекламы: (095) 259-01-62 WWW.LORY-PRESS.RU Отпечатано в типографии ИПО Профиздат. 109044, Москва, ул. Крутицкий вал, д. 18

www.books-shop.com

Моим преподавателям из Калифорнийского университета Сакраменто

www.books-shop.com

VI О

Предисловие

Благодаря усилиям компании Red Hat операционная система Linux признана во всем мире. Теперь развитие Linux находится под пристальным вниманием практически всех специалистов по информационным технологиям. Влияние Linux почувствовали даже гигантские корпорации, производящие коммерческие операционные системы. Начав свое развитие в качестве операционной системы для любителей, в течение нескольких лет Linux стала серьезной серверной платформой в любой области мира информационных технологий. Те, кто внимательно следит за событиями в этой области, знают, что Linux является одним из лидеров. С помощью разработчиков Linux компания Red Hat помогла своему детищу со свободно доступным исходным кодом завоевать центральное место на серверной арене. Все основные поставщики оборудования и программного обеспечения начали проявлять пристальный интерес к Linux, причем некоторые влиятельные компании отрасли компьютерных технологий даже инвестировали средства и стали партнерами Red Hat Linux. Подходит ли эта книга вам? Многие книги, посвященные Linux и Red Hat Linux рассматривают Linux как персональную операционную систему и обсуждают возможность использования Linux на настольном компьютере. Для некоторых Linux одновременно платформа рабочей станции и серверная платформа, но при этом забываются важные подробности. Эта книга написана в помощь тем, кто заинтересован в создании сервера на основе Linux. В книге проверенная практикой информация о том, как управлять пользователями, дисковыми квотами, процессами, сетью, как настроить сервер DNS, сервер электронной почты SMTP/POP3, сервер Web, сервер FTP, сервер NFS, файловый сервер и сервер печати на базе Samba, сервер IRC, сервер SQL и многое другое. В книге рассказывается, как улучшить'серверную и сетевую защиту с помощью различных программных инструментов и технологий, а также о компилировании модифицированного ядра Linux, позволяющего провести точную настройку сервера для повышения его производительности. Хотя существует много дистрибутивов Linux, я выбрал Red Hat Linux. Компания Red Hat придала операционной системе Linux профессиональный вид и помогла ей завоевать признание специалистов во всем мире. Эта книга не о том, как использовать Linux в качестве настольной операционной системы. Она посвящена серьезной работе по поддержанию в рабочем состоянии сервера организации с помощью одного из технологических чудес тысячелетия. Книга не предполагает никакого предварительного знания Linux, любой другой версии UNIX или похожей на Unix операционной системы. Если вам необходима стабильная серверная операционная система, которая может месяцами работать без перезагрузки и вы уже заинтересовались — тогда добро пожаловать.

www.books-shop.com

Предисловие

vii

Сообщите нам свое мнение Издательство IDG Books Worldwide и автор книги очень заинтересованы в том, чтобы узнать ваше мнение о ней. Зарегистрируйте, пожалуйста, эту книгу на Web-сайте IDG Books Worldwide (http://www.idgbooks.com) и сообщите нам ваше мнение. Если вы заинтересованы в прямом контакте с автором, пошлите сообщение электронной почты по адресу [email protected]. Я постараюсь ответить побыстрее. Благодарности Прежде всего я хочу поблагодарить Лору Левин за предложение написать эту книгу. Она была всегда очень любезна и внимательна ко мне. Эрик Ньюман, мой редактор, показал себя добрым другом во время разработки этой книги. Я не знаю, как бы я смог закончить ее без его терпения, серьезной поддержки и понимания. Спасибо, Эрик. Специальная благодарность Рэндольфу Кэмпбеллу, который убедил меня, что книга получилась удачной. Проницательные комментарии Рэндольфа, предложения и советы сделали значительно больше, чем простое исправление моих технических оплошностей. Спасибо, Рэндольф. Огромная благодарность литературным редакторам Роберту Кэмпбеллу и Тиму Бореку. Они регулярно переводили мои формулировки с «машинного языка» на ясный и понятный английский язык. Терри Эвинг помог написать две главы этой книги. Он работает системным администратором широко известного Интернет-провайдера в районе Сакраменто, поэтому помог мне глубже понять многие вопросы, которые обсуждаются в книге. Я очень признателен ему за помощь. Спасибо, Терри. Мой хороший друг Берт Каридад оказал незаменимую помощь в создании справочника команд этой книги. С ним я познакомился, когда пошел путем Linux. Последние несколько лет мы оба с огромным удовольствием работали над созданием условно-бесплатного программного обеспечения для Web в масштабах предприятия. Берт сейчас работает в хорошо известной технологической компании в Сакраменто. Спасибо, Берт. Шейла Кабир, моя жена, терпит мои попытки одновременно работать в подающей надежды начинающей Интернет-компании и одновременно писать о технологиях с открытым исходным кодом. Ее терпение и великолепная улыбка каждый день заставляют меня продолжать работу. Спасибо, Шейла. Наконец я благодарю всех сотрудников IDG Books Worldwide, которые способствовали выходу этой книги. Эти люди превратили несколько компьютерных файлов в прекрасное издание. Об авторе Мохаммед Дж. Кабир -- один из основателей компании Integrated Logic. Inc., которая специализируется в области разработки программного обеспе4 чения на основе Web. Он также возглавляет технологическое подразделение компании. Эксперт по многосерверным сетям Web, операционным системам UNIX и микропроцессорам, Мохаммед Дж. Кабир является автором книг «Библия сервера Apache» и «Справочник администратора сервера Apache».

www.books-shop.com

www.books-shop.com

Содержание

Часть 1

Первое знакомство

Глава 1 Почему Red Hat Linux? История Linux Основные дистрибутивы Linux Caldera OpenLinux Slackware Linux Debian GNU/Linux S.U.S.E. Другие дистрибутивы Linux Почему Red Hat является лучшим дистрибутивом Red Hat Linux в качестве серверной ОС Как приобрести Red Hat Linux I

Г

л а в а 2 Установка и базовая конфигурация 1 1 Требования к оборудованию Подготовка к установке Red Hat Linux Создание загрузочного диска в MS Windows 9х/2000 Создание загрузочного диска Linux Установка Red Hat Linux Как работает программа установки Выбор языка, раскладки клавиатуры и метода установки Новая установка или обновление Выбор класса установки Деление дисков на разделы Активизация раздела свопинга Форматирование разделов Выбор устанавливаемого программного обеспечения Выбор мыши Конфигурирование сети TCP/IP Конфигурирование часового пояса Конфигурирование действующих служб или демонов Конфигурирование принтеров Задание пароля root Создание загрузочного диска Выбор варианта установки LILO Первый запуск Red Hat Linux

Часть 2

Работа суперпользователя

Процессы начальной загрузки и выключения системы Конфигурирование init

1 3 3 4 5 5 6 6 6 7 S 10 11 13 14 14 15 15 16 16 16 18 23 24 24 26 26 29 29 30 31 32 33 35 39

Глава 3

41 43

www.books-shop.com

X

Сценарий /etc/re.d/rc.sysinit Каталог /etc/re.d/init.d Сценарий /etc/re.d/rc Каталоги /etc/re.d/rc[0-6].d Сценарий /etc/re.d/rc.local Сценарий /etc/rc.d/rc.serial Загрузка системы Выключение системы Отмена выключения системы Перезагрузка сервера Перезагрузка с помощью Ctrl+Alt+Delete Автоматическое выключение при отказе питания Управление файлами ink Использование chkconfig для управления уровнями выполнения Использование ntsysv для управления уровнями выполнения Использование linuxconf для управления уровнями выполнения Создание новой службы для уровня выполнения

46 46 46 48 49 49 49 50 50 50 51 51 52 52 53 53 54

Глава 4 Файлы и устройства UNIX Общие представления о полномочиях файлов/каталогов Изменение владельца файлов/каталогов с помощью chown Изменение группы файлов/каталогов с помощью chgrp Представление полномочий доступа с помощью восьмеричных чисел Представление полномочий доступа с помощью строк доступа Изменение полномочий доступа файлов/каталогов с помощью chmod Специальные замечания о полномочиях каталогов Управление полномочиями для связей Изменение полномочий или владельца жесткой связи Изменение полномочий или владельца мягкой ссылки Создание политики полномочий для многопользовательского сервера Задание полномочий конфигурационных файлов пользователей Задание для пользователей используемых по умолчанию файлов полномочий Задание полномочий выполняемых файлов Задание используемых по умолчанию полномочий файлов для FTP Работа с файлами и каталогами . Просмотр файлов и каталогов Навигация и перемещение в каталогах Определение типа файла Просмотр статистики доступа к файлу или каталогу Копирование файлов и каталогов Перемещение файлов и каталогов Удаление файлов и каталогов Поиск файлов Переопределение используемой по умолчанию маски полномочий Использование специальных полномочий файловой системы ext2

57 57 58 59

Глава 5 Повседневные команды Общее представление о командной строке UNIX Основы использования метасимволов Основы использования регулярных выражений Использование оперативного справочного руководства Команды для работы с файлами и каталогами Команды сжатия файлов и архивации Специальные команды файловых систем

71 71 72 73 74 75 89 92

59 61 61 62 62 62 63 63 64 64 64 65 66 66 66 66 67 67 67 67 68 68 68

www.books-shop.com

Содержание

xi

Команды, совместимые с DOS Специальные команды системного статуса Команды управления пользователями Пользовательские команды доступа к сетевым службам Команды администратора сети Команды управления процессами Команды автоматизации задач Команды повышения эффективности работы Команды оболочки Специальные команды печати Часть 3

95 96 97 99 102 107 108 108 109 110

Управление пользователями, процессами и сетями

113

Глава 6 Использование Linuxconf Что такое Linuxconf Установка Linuxconf Конфигурирование Linuxconf Настройка удаленного доступа к Linuxconf на основе Web Конфигурирование модулей Linuxconf Определение привилегий пользователей Использование множества профилей конфигурации системы Использование Linuxconf при запуске системы Использование Linuxconf

115 116 117 117 120 122 123 125 128 129

Глава 7 Управление пользователями Как стать суперпользователем Присвоение привилегий обыкновенным пользователям Управление пользователями с помощью утилит командной строки Создание учетной записи нового пользователя Создание новой группы Модификация существующей учетной записи пользователя Модификация существующей группы Удаление или отключение учетной записи пользователя Создание используемых по умолчанию параметров пользователя Управление пользователями с помощью linuxconf Добавление новой учетной записи пользователя Модификация существующей учетной записи пользователя Удаление или отключение существующей учетной записи пользователя Добавление, модификация и удаление группы Дисковые квоты пользователей Установка программного обеспечения дисковых квот Конфигурирование поддержки дисковых квот Присвоение пользователям дисковых квот Мониторинг использования диска

131 131 133

Глава 8 Управление процессами Запуск процессов Управление и мониторинг процессов Использование ps для получения статуса процесса Передача сигналов выполняющемуся процессу Управление приоритетом процесса Мониторинг процессов и системной нагрузки Использование top Использование vmstat

151 151 152 152 154 158 160 160 161

136 136 137 138 140 140 141 143 143 145 145 145 146 146 147 147 149

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

xii О Использование uptime Ведение журналов процессов Мониторинг журналов с помощью tail Планирование процессов Использование at Использование сron Глава 9 Управление сетями Основы создания сетей TCP/IP Классификация IP-сетей Сети класса А Сети класса В Сети класса С Конфигурирование сетевого интерфейса Использование традиционных методов конфигурирования сетевых адаптеров Использование netcfg для конфигурирования сетевого адаптера Зачем нужен используемый по умолчанию шлюз Деление сети на подсети Конфигурирование компьютера-шлюза Конфигурирование хост-компьютера Часть 4

161 161 162 163 163 164 167 167 169 169 170 170 171 172 176 179 180 183 184

Организация работы служб Интранет/Интернет

Глава 10 Служба DNS Как работает DNS Конфигурирование клиента DNS (Resolver) Настройка сервера DNS Основы конфигурирования DNS Master/первичный сервер DNS Slave/вторичный сервер DNS Сервер DNS обратного разрешения Вторичный сервер DNS режима «только кэширование» Управление сервером DNS Тестирование сервера DNS Управление виртуальными доменами DNS Выравнивание нагрузки с помощью сервера DNS

187 189 189 191 193 193 199 200 200 201 202 203 203 209

Глава 11 Служба электронной почты 211 Работа почты SMTP 212 Настройка почтовой службы DNS 214 Настройка почтовой службы SMTP 215 Установка sendmail 215 Запуск и остановка sendmail 215 Описание и конфигурация /etc/sendmail.cf 217 Конфигурирование файлов /etc/mail/* 223 Тестирование конфигурации sendmail 229 Тестирование правил перезаписи адресов sendmail 229 Тестирование файлов базы данных /etc/mail/* 231 Использование sendmail для просмотра транзакции SMTP в режиме расширенного вывода 231 Использование флага отладки sendmail 232 Использование тестового конфигурационного файла 232 Безопасность sendmail 233 Защита конфигурационных файлов 233 Обеспечение более строгого режима деятельности и секретности 234

www.books-shop.com

xiii

Содержание

Борьба со спамом Как справиться с уязвимостью пересылки почты третьей стороной Пересылка спаммеров в черную дыру Настройка службы почты POP Работа подобной системы Установка сервера РОРЗ Конфигурирование службы РОРЗ Конфигурирование почтовых клиентов SMTP/POP Коммерческие утилиты Sendmail Pro qmail

Глава 12 Web-служба

Системные требования к Apache Компилятор ANSI С Дисковое пространство Оперативная память Другие требования Получение Apache из сети Создание пользовательского сервера Apache Конфигурирование исходного кода Apache с помощью APACI Конфигурационные параметры для makefile Параметры конфигурации строк Rule Параметры конфигурации модулей Компиляция и установка Apache Компиляция и установка инструментов технической поддержки Apache Модификация Apache с помощью дополнительных модулей Запуск и выполнение сервера Apache Конфигурирование httpd.cohf Конфигурирование srm.conf Конфигурирование access.conf Управление сервером Apache Тестирование сервера Apache Управление сервером Apache Конфигурирование Apache для сценариев CGI Конфигурирование Apache для серверных дополнительных модулей Хостинг виртуальных Web-сайтов Использование Apache в качестве прокси-сервера Аутентификация Web-пользователей Мониторинг статуса сервера Ведение журналов посещений и ошибок Усиление безопасности Web-сервера Использование SSL для проведения безопасных транзакций

Глава 13 Служба FTP

Wu-ftpd: используемый по умолчанию сервер FTP Установка сервера wu-ftpd Конфигурирование службы FTP Создание анонимного FTP-сайта Создание гостевой учетной записи FTP Создание виртуальных FTP-сайтов Использование коммерческого сервера FTP Использование сервера с TFTP

234 235 236 238 238 239 239 239 240 240 240

241 242 242 242 242 243 243 244 244 246 247 247 248

248 250 252 253 259 265 266 268 269 269 272 279 281 288 293 294 299 306

313 313 314 315 326 328 331 334 334

www.books-shop.com

xiv

Глава 14 Другие популярные службы Настройка службы IRC Установка сервера IRC Конфигурирование сервера IRC Выполнение сервера IRC Установка и использование клиента IRC Настройка службы новостей Usenet Конфигурирование сервера INN Получение доступа к серверу INN Часть 5



Настройка офисных служб

Глава 15 Совместное использование файлов и принтеров с помощью Samba Установка Samba Конфигурирование Samba Конфигурация [global] Конфигурация [homes] Конфигурация [printers] Использование графических утилит конфигурирования Тестирование конфигурации /etc/smb.conf Запуск, остановка и повторный запуск службы Samba Практическое использование Samba . Использование файлового сервера Linux в Windows Использование файлового сервера Windows в системе Linux Совместное использование принтеров системами Linux и Windows Использование интерактивного клиента Samba Безопасность сервера Samba

337 337 338 338 348 348 350 351 352 353

355 356 356 362 365 365 366 366 366 367 367 367 369 372 373

Глава 16 Использование файловых серверов NFS Установка сервера NFS Конфигурирование сервера NFS Предоставление доступа к экспортируемому каталогу только для чтения Предоставление доступа к экспортируемому каталогу для чтения и записи Запрещение доступа к определенному каталогу Отображение пользователей между сервером NFS и клиентами Установка клиента NFS Конфигурирование клиента NFS Безопасность сервера NFS Распространение файлов с помощью rdist

377 378 378

Глава 17 Служба базы данных SQL Понятие SQL Установка и конфигурирование сервера SQL: MySQL Где найти MySQL Установка пакетов RPM MySQL Доступ к серверу SQL Первоначальный запуск клиента MySQL Создание базы данных Взаимодействие с сервером SQL с помощью сценариев Взаимодействие с SQL из командной строки UNIX Использование сценариев CGI для доступа к базе данных SQL с помощью Web-браузера

387 387 389 389 389 390 390 390 391 392

379 379 379 379 381 381 382 383

398

www.books-shop.com

Содержание

XV

Часть 6

Безопасность и мониторинг

Глава 18 Безопасность Безопасный доступ пользователей Ограничение физического доступа Ограничение доступа обычных пользователей Ограничение доступа суперпользователей Ограничение любого доступа во время чрезвычайного происшествия или атаки Безопасность процесса аутентификации пользователей Использование теневых паролей Использование РАМ Безопасность служб Удаление ненужных служб во время установки операционной системы Безопасность служб, выполняемых inetd Защита файлов и файловой системы Монтирование файловой системы только для чтения Использование преимуществ файловой системы ext2 Использование Tripwire для обеспечения целостности файлов Проверка защиты системы (роль адвоката дьявола) Вскрытие собственного пароля COPS повсюду Делайте резервные копии и обратную трассировку Следите за последними новостями в области безопасности CERT [email protected] Глава 19 Сетевая безопасность Понимание проблемы безопасности Анализатор Ethernet Подделка IP-адреса Проектирование защищенной сети Использование немаршрутизируемых IP-адресов Подмена IP-адресов Понятие брандмауэра Фильтры пакетов Использование простого брандмауэра фильтрации пакетов: ipchains Использование брандмауэра уровня приложения Использование прокси-сервера Squid Получение и установка Squid Первоначальное выполнение Squid Точная настройка Squid " Получение помощи от SATAN Установка SATAN ' Работа с SATAN Часть 7

Настройка

производительности

Глава 20 Конфигурирование ядра Необходимость модернизации ядра Установка ядра Linux Подготовка к модернизации ядра Установка нового ядра Создание начального ramdisk Конфигурирование LILO

403 405 405 406 407 408 409 409 410 413 417 417 418 426 426 427 428 432 432 434 436 436 436 436 437 437 438 438 439 439 439 441 441 442 443 444 444 445 445 447 448 448 453 455 455 456 456 458 458 458

www.books-shop.com

xvi Загрузка с новым ядром Модификация ядра Установка исходного кода ядра Linux Конфигурирование ядра по-старому Конфигурирование ядра с помощью make menuconfig Конфигурирование ядра с помощью make xconfig Компиляция, установка и начальная загрузка нового ядра Внесение изменений в ядро Использование kernelcfg Глава 21 Создание многосерверной Web-сети Требования к Web-сети Проектирование Web-сети Циклическая конфигурация DNS Аппаратное решение выравнивания нагрузки Выбор правильного решения для выравнивания нагрузки Выделение IP-адресов Конфигурирование сети Настройка сети для компьютера сервера имен Настройка сетевых интерфейсов каждого Web-сервера Настройка сетевых интерфейсов директора WSD Pro Тестирование сетевой конфигурации Настройка сервера DNS Настройка сервера NFS Настройка почтового сервера (SMTP/POPS) Настройка сервера FTP Настройка rdist на сервере имен Настройка каждого Web-сервера Настройка конфигурации клиента NFS Настройка sendmail для пересылки на интеллектуальный хост Настройка rdist для распространения файлов из ns.aminews-lanc.com Настройка WSD Pro Создание фермы Web-служб . Создание фермы связанных сетевых служб Управление сетью Изъятие сервера из службы Задание приоритетов выбора серверов Мониторинг серверной нагрузки и вывод статистики Добавление нового Web-сервера в ферму Web-серверов Добавление клиентских Web-сайтов Часть 8

Использование X Window

Глава 22 Конфигурирование X Window Выбор сервера X Window XFree86 Metro-X Accelerated-X для Linux Подготовка к установке XFree86 Требования к оперативной памяти Требования к видеоадаптеру Требования к монитору Требования к дисковому пространству Установка XFree86 Конфигурирование XFree86 Использование Xconfigurator для создания файла XF86Config Общее представление о файле XF86Config

459 459 459 460 472 473 474 474 475 477 478 478 479 480 481 485 486 486 487 488 490 491 493 494 494 494 496 496 496 497 497 497 500 500 500 501 501 501 502 503 505 506 506 506 506 506 506 507 507 507 507 507 508 511

www.books-shop.com

Содержание

xvii

Использование X Window Конфигурирование .xinitrc Модификация внешнего вида менеджеров окон Модификация вида клиентских приложений Использование xdm или менеджера дисплея X Использование ХFгее86 в Windows 9х/2000 Micro X-Win32 Глава 23 Использование системы X Window Использование AnotherLevel Использование среды рабочего стола GNOME Использование X Window для администрирования Использование glint Использование панели управления

518 519 520 520 521 522 522 525 525 529 531 531 533

ПРИЛОЖЕНИЕ А Ресурсы Linux 537 Группы новостей Usenet 537 Иерархия COMP.OS.LINUX 537 Различные группы новостей Linux 538 Списки почтовой рассылки . 539 Общие списки 539 Списки почтовой рассылки, посвященные вопросам безопасности 540 Специальные списки рассылки 540 Web-сайты 540 Общие ресурсы 540 Публикации 540 Хранилища программного обеспечения 540 Ресурсы, посвященные безопасности 541 Группы пользователей 541

www.books-shop.com

www.books-shop.com

Часть 1 Первое знакомство

www.books-shop.com

www.books-shop.com

Глава 1 Почему Red Hat Linux?

В этой главе: • Краткая история Linux " Дистрибутивы Linux • Почему Red Hat Linux лучше остальных дистрибутивов • Преимущества Red Hat Linux в качестве серверной операционной системы • Как получить Red Hat Linux

с

уществует два мира серверных операционных систем (ОС): UNIX и Windows 2000, пришедшая на смену Windows NT. Другие операционные системы серверного класса нельзя считать доминирующими на рынке. Любой разговор о серверах приводит к сравнению UNIX и Windows 2000/NT. Под определение «UNIX» попадает множество операционных систем, в том числе и Linux, хотя, строго говоря, Linux не является версией UNIX. Выбор UNIX или Windows NT частчЗ зависит от различных факторов: возможностей покупателя, квалификации специалистов подразделения информационных технологий (ИТ) организации, а также политики и структуры этого подразделения. Надеюсь, читатели этой книги решили выбрать путь UNIX. В этой главе представлены доказательства того, что Red Hat Linux — правильный выбор для серверной системы. Но сначала рассмотрим историю развития Linux.

История Linux

5 октября 1991 г. Линус Бенедикт Торвальдс, аспирант Хельсинкского университета (Финляндия), опубликовал в группе новостей Usenet (comp.os.minix) сообщение о созданной им маленькой UNIX-подобной

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

4

Trinux Trinux загружается с нескольких (2-3) гибких дисков (или из раздела MS-DOS/Windows 9x) и целиком выполняется в оперативной памяти. Он поставляется с самыми последними версиями многих сетевых инструментальных средств защиты, таких как NETWATCH, tcpdump и netmon, которые являются очень полезными утилитами сканирования портов TCP/IP и мониторинга сетей. Дистрибутив Linux превращает старый персональный компьютер (ПК) класса лвб в мощную рабочую станцию управления сетевой безопасностью. Дополнительную информацию о Trinux можно найти по адресу h t t p : / / w w w . t r i n u x . o r g . Linux на „гибких дисках (LOAF) LOAF умещается на одном гибком диске (1.44 МБ) и действует как простая система сетевого клиента. Дополнительную информацию об этом дистрибутиве можно найти по URL: http://www.ecks.org/loaf/. Linux Router Project Linux Router Project является еще одним дистрибутивом Linux, умещающимся на одном гибком диске (1.44 МБ). Эта система превращает обычную старую систему лйб в маршрутизатор, используя демон (фоновый процесс) шлюза. Дистрибутив находится на узле FTP: f t p : //sunsite. u n c . edu/pub/Linux/ distributions/linux-router/. Существуют дистрибутивы Linux для других процессорных архитектур. Фактически Red Hat Linux поддерживает Alpha и SPARC, a Debian GNU/Linux имеет стабильные версии для архитектур Alpha и Motorola 68K. Версии Linux для машин PowerPC, таких как PowerMac, доступны от MkLinux и LinuxPPC., Системы Linux для компьютеров UltraSPARC поставляет UltraPenguin. Информацию обо всех доступных дистрибутивах Linux можно получить по URL-адресам: ч • http://www.linuxhq.com/dist-index.html

• http://www.linux.org/dist/index.html Почему Red Hat является лучшим дистрибутивом На вопрос: «Почему Red Hat является лучшим?» есть простой ответ — потому что ее использует сам Линус Торвальдс! Действительно, Линус пользуется Red Hat Linux, но можно привести и другие доказательства. Практически один и тот же код ядра Linux используется в различных дистрибутивах. Поэтому основные дистрибутивы отличаются простотой установки, конфигурирования и объемом приложений пользовательского уровня. Преимущества системы Red Hat Linux в этих областях делают ее наиболее популярным дистрибутивом Linux. Компания Red Hat поставила перед собой цель сделать Linux доступной самым широким слоям пользователей компьютеров. Для этого система Linux должна иметь определенную степень дружественности пользователю. Red Hat серьезно и последовательно работает над тем, чтобы сделать Linux привычной пользователям операционной системой. Пока все указывает на то, что компания преуспела в достижении этих целей. Иногда серьезные пользователи Linux отвергают Red Hat Linux, предпочитая другой дистрибутив (например Slackware), только потому, что Red Hat пытается упростить операции установки и конфигурирования. Система не ограничивает компиляцию ядра или ручное конфигурирование сети. Поэтому необоснованно утверждение о том, что Red Hat скрывает от пользователя конфигурацию. Система упрощает установку настолько, что ее сможет провести любой пользователь, но после установки можно применить разнообразные графические утилиты конфигурирования или изменить параметры вручную. Схема пакетирования Red Hat Package Management (RPM), созданная самой компанией, сейчас одна из наиболее интересных современных схем

www.books-shop.com

8

О

''

Глава 1



формирования пакетов распространения программного обеспечения. Эта схема используется в других дистрибутивах Linux. Red Hat предоставляет простой и элегантный метод установки для всех слоев потенциальных пользователей Linux, в то время как другие дистрибутивы ориентируются на определенные классы. Например, дистрибутив Caldera OpenLinux предназначен прежде всего для различных компаний, от небольших до крупных, a Slackware Linux ориентирован на ветеранов, экспертов по UNIX и специалистов по операционным системам, подобным UNIX. Однако дистрибутив Red Hat Linux предназначен как для индивидуальных пользователей, так и для организаций. Red Hat преуспела в совершенствовании самой системы Linux. Учитывая простоту установки, конфигурирования и коммерческую техническую поддержку, многие люди используют или планируют переход именно на этот дистрибутив Linux. Даже противники Red Hat хвалят компанию за эти достижения. Предпринимаются усилия по укреплению положения Red Hat Linux на всех фронтах. Недавно Red Hat преобразовала свой официальный Web-узел (http: //www. redhat. com) в портал Linux, чтобы централизовать в одном месте Интернета всю информацию о событиях мира Linux. Преобразование проведено совместно с другими популярными Web-узлами, посвященными Linux, поэтому новый портал должен стать единым источником информации о Linux и программном обеспечении этой ОС для миллионов пользователей Linux во всем мире. Деятельность Red Hat усилена вовлечением различных крупных компаний программного и аппаратного обеспечения, таких как IBM, HP, Informix Corporation, Oracle, Corel Corporation, SAP AG, Computer Associates International, Inc. и Intel. По сути дела, Compaq, IBM, Nowell и Oracle приобрели акции Red Hat, чтобы помочь донести Red Hat до своих заказчиков. Все это хорошо демонстрирует цели компании Red Hat. Рассмотрим состав дистрибутива Red Hat Linux. Прежде всего, пользователь получает самую стабильную версию ядра Linux вместе с множеством приложений GNU. Сама компания Red Hat предоставляет различные инструментальные средства конфигурирования как для системы X Window, так и для текстовых оболочек. Официальный CD-ROM компании Red Hat содержит различные коммерческие приложения, которые являются бесплатными для личного использования либо поставляются в виде демонстрационных версий для коммерческого использования. Кроме прочего, на диске находятся приложения ApplixWare 4.4.1,-WordPerfect 7, Sybase ASE и Ardi Executor (эмулятор Macintosh). В программном обеспечении коммерческим организациям необходима качественная техническая поддержка. Зная об этом, Red Hat предоставляет Response Link — расположенную в центральном офисе компании службу технической поддержки в режиме 24 часа в сутки семь дней в неделю (24x7). Услуги сопровождения операционной системы включают бесплатные телефонные консультации из любого места США и приоритетную техническую поддержку. Итак, компания Red Hat всерьез и надолго взялась за Linux. Она предлагает, очевидно, самый надежный, ценный и доступный дистрибутив из имеющихся сегодня на рынке.

Red Hat Linux в качестве серверной ОС

В идеале лучшая операционная система должна завоевать весь рынок. К сожалению, мы живем реальном мире, где маркетинг важнее настоящего товара. Многие из нас покупают то, о чем узнали из средств массовой информации или каким-то другим способом. Большинство людей колеблются, когда предстоит испытать или поддержать новые идеи, особенно если работу нужно выполнить в сжатые сроки. Это позволяет нескольким гигантским компаниям-разработчикам операционных систем (все знают, о ком идет речь) полностью контролировать рынок серверов. Большинство менеджеров ИТ не желают рисковать, даже когда риск минимален. Это главное препятствие,

www.books-shop.com

Почему Red Hat Linux? —:

9 ^>

которое необходимо преодолеть системе Linux, чтобы завоевать рынок серверных операционных систем. Однако благодаря компании Red Hat положение быстро меняется. Многие компьютерные гиганты продемонстрировали большой интерес к Red Hat Linux, поэтому профессионалам ИТ стало легче включать Linux в свои проекты и даже реализовывать их на практике. Те, кто испытал Linux в качестве сервера, знают, что это идеальная серверная платформа. Мы в течение рядз лет использовали Linux на серверах с очень высокой степенью нагрузки. Многие используют серверы Linux, которые ни разу не перезагружались в течение года! Низкая стоимость, высокая надежность и поддержка режима 24x7 делают Red Hat Linux идеальной серверной платформой. Red Hat Linux превосходит отличные от UNIX серверные платформы, такие как Windows 2000 (ранее известную как Windows NT), еще и потому, что эта система получает все преимущества проверенного и подтвержденного временем программного обеспечения платформы UNIX. Например, Red Hat Linux выполняет самый популярный Web-сервер Apache, хотя Apache первоначально был создан не для Linux. Сильные связи Linux с операционной системой UNIX облегчают перенос лучших приложений UNIX на Red Hat Linux по сравнению с переносом в Windows 2000 (Windows NT). Дедушка почтового сервера SMTP, служба sendmail, была очень давно перенесена в Red Hat Linux. Запустив в Linux старый добрый сервер BIND DNS, мы знаем, что на это проверенное временем программное обеспечение с длинным послужным списком вполне можно положиться. Так как Red Hat Linux выполняет практически все лучшие серверные приложения UNIX, эта система автоматически наследует множество достоинств программного обеспечения, что вряд ли можно сказать о Windows 2000. Кроме того, Linux выполняет свойственные платформе Windows файловые службы (8MB) лучше, чем сама платформа Windows! Другими словами, мы получим на Red Hat Linux надежный файловый сервер с лучшим временем отклика, чем на альтернативной платформе Windows. Существуют экономические предпосылки выбора серверной платформы. Обратимся в Web или Usenet и найдем рекомендации специалистов (но не разработчиков) о требованиях к оборудованию для иных операционных систем, чем Linux. Советы об оборудовании для Windows 2000 могут вызвать панику. Оперативная память исчисляется трехзначным числом Мегабайт (МБ), а частота центрального процессора — сотнями МегаГерц (МГц). Стоимость оборудования еще не стала такой низкой, чтобы эти числа не напугали многие компании. Хорошо еще если нужен один сервер, но что делать, если требуется несколько серверов для создания инфраструктуры ИТ? Причем с каждой новой версией ОС требования увеличиваются вместе с затратами на оборудование. Не забудем, что многие коммерческие серверные операционные системы имеют жесткие ограничения на количество пользователей (и даже сетевые соединения), определяемые приобретенной лицензией, а также о стоимости сопровождения и обязательных дорогостоящих услугах технической поддержки. Если сложить все вместе, то Red Hat Linux выглядит более выгодно. Кроме снижения требований к оборудованию, мы получим большую отдачу от вложений в аппаратную часть системы. Поскольку система Linux разрабатывается специалистами всего мира, которые не всегда имеют самое последнее и самое лучшее оборудование, она очень хорошо выполняется даже на слабых системах. Значит, аппаратура не устареет так быстро, как этого хотят его производители. На каждый вложенный доллар мы получим больший доход. Вряд ли то же самое можно сказать о коммерческих серверных операционных системах. Надеемся, уже достаточно доказательств того, что Red Hat Linux — прекрасная серверная платформа, поэтому возникает естественное желание попробовать ее на практике. Важнейшей обязанностью будущего системного администратора Red Hat Linux является отслеживание всех событий в мире Linux. Адреса наиболее интересных ресурсов Linux в Интернете приведены в приложении А.

www.books-shop.com

10

Глава 1

О

:

Как приобрести Red Hat Linux Можно загрузить Red Hat Linux с официального FTP-сервера Red Hat Linux или любого зеркального узла (сайта) FTP. РЕКОМЕНДАЦИЯ

I ТРУДНО получить доступ к FTP-серверу Red Hat (ftp://ftp. redhat.com), ' поскольку он постоянно перегружен. Рекомендую найти на узле http://www. redhat. com/mirrors, html список ближайших зеркальных FTP-узлов. Имея быстрое соединение с Интернетом (т.е. не модемное соединение), можно загрузить самую последнюю версию Red Hat Linux с Web-сайта этой компании. Когда нет быстрого соединения с Интернетом, закажите официальный CD-ROM диск Red Hat в Web, по телефону или факсу. Правила и порядок заказа описаны на Web-сайте компании Red Hat. Получив копию дистрибутива Red Hat Linux, можно начинать установку операционной системы.

www.books-shop.com

Глава 2 Установка и базовая конфигурация

В этой главе: " Аппаратные требования системы Red Hat Linux • Как подготовиться к установке • Как установить Red Hat Linux

X

отя Red Hat Linux работает на многих аппаратных платформах, например на клонах ПК х86, Alpha и Spare, мы обсудим установку на компьютерах х86 — доминирующей платформе Linux. Операции установки на другие платформы немного отличаются, поэтому обратитесь на Web-сайт компании Red Hat.

Требования к оборудованию

С самого начала и до сего времени Linux не выдвигала повышенных требований к оборудованию. Red Hat Linux требует для исполнения не слишком многого, однако требования клиентской версии Linux отличаются от требований к выполнению операций серверного класса. Определить, поддерживается ли оборудование системой Red Hat Linux, поможет Web-сайт: http://www.redhat.com/support/docs/rhl. Чем лучше оборудование, тем выше будет производительность системы Red Hat Linux. Однако надо быть осторожным, поскольку поддерживаться может не все новое оборудование! Например, если видеокарта с необыкновенными свойствами появилась вчера, не следует ожидать, что она завтра будет поддерживаться Red Hat Linux. Иногда производители оборудования

www.books-shop.com

12

2

затрудняют разработчикам Linux доступ к определенной информации, необходимой для создания модулей драйверов, следовательно, разработчикам необходимо время для реализации поддержки новых устройств. Linux разрабатывается тесно связанными группами людей по всему миру, и не каждый из них имеет время и финансовые возможности для проверки самых последних аппаратных игрушек. Компания Red Hat делает все возможное для поддержки самых новых изделий, но для этого нужно время. Необходимо знать, какое оборудование используется с Linux и насколько хорошо оно работает. Чтобы выяснить, насколько хорошо работает определенное оборудование с Red Hat Linux, посетите страницы совместимости оборудования, находящиеся на указанном выше URL, либо пошлите запрос соответствующей группе новостей Linux в Usenet. Сообщите предполагаемый состав основного оборудования и посмотрите, расскажет ли кто-нибудь о нем ужасные истории. Наша книга посвящена созданию системы Red Hat Linux серверного класса, поэтому приведем некоторые общие рекомендации. , • Центральный процессор Чем быстрее, тем лучше. Однако не всегда оправдана покупка самого быстрого из доступных процессоров. Например, если нужно создать Web-сервер, выполняющий Apache на Red Hat Linux, достаточно среднего по производительности процессора Pentium Pro или Pentium II небольшой мощности. Нет необходимости приобретать Pentium III с частотой 400+ МГц. Конечно, если планируется запускать на Web-сервере сценарии CGI или другие приложения, требующие большой вычислительной мощности, лучше использовать очень быстрый процессор. Для большинства систем подойдет средний по производительности процессор. • Оперативная память Чем больше, тем быстрее. Это та часть оборудования, которой должно быть как можно больше. Оперативная память является одной из наиболее важных составляющих производительности. Предположим, нужно оценить объем оперативной памяти Web-сервера. Сначала решаем, сколько запросов требуется обслужить в секунду. Иногда трудно оценить это значение, но есть предположения о количестве запросов за день. Предположим, что Web-сервер должен обслужить 3 456 000 запросов/день. Преобразуем его в запросы/с: 3 456 000 запросов/ день х 1 день/24 часа х 1 час/3600 с. Получаем 40 запросов/с. Теперь известно, что потребуется 40 демонов Apache, одновременно обслуживающих 40 запросов. В таком случае требования к памяти только для одного сервера Apache будут в 40 раз превышать память, необходимую для одного процесса Apache. Приблизительно потребуется 40 МБ или больше, в зависимости от того, как сконфигурирован сервер Apache. Например, если он содержит интерпретатор Perl (mod_perl) или добавлена поддержка FastCGI (mod_fastcgi), либо присутствуют другие дополнительные модули, то каждому процессу Apache может потребоваться больше памяти. Чем больше сведений о требованиях к памяти отдельных модулей, тем лучше будут обоснованы требования к общему объему оперативной памяти. Для большинства задач типичного развертывания Web-сервера рекомендуем 256 МБ быстрых 100 МГц (10 наносекунд) модулей DRAM. • Жесткий диск Объем дискового пространства сервера диктуется задачами, которые должен выполнять этот сервер. Если нужно, чтобы он содержал большое число файлов для Web или локальной вычислительной сети (ЛВС), определите требования к объему данных и купите жесткий диск соответствующего размера. Размер в действительности не является серьезной проблемой, поскольку стоимость больших жестких дисков регулярно снижается. Однако важен тип жесткого диска сервера. Существуют два варианта: IDE/EIDE или SCSI. Если сервер критически важен для ЛВС или операций Интернета, таких как Web,

www.books-shop.com

Установка и базовая конфигурация

О

FTP или почтовых служб, используйте несколько дисков SCSI. Диски SCSI обеспечивают лучшую пропускную способность, чем их аналоги IDE/EIDE. Я рекомендую использовать жесткие диски Wide SCSI, которые предоставят производительность порядка 20МБ/С. Используя несколько дисков Wide SCSI, можно минимизировать время ожидания дисковой подсистемы. Другими словами, несколько дисков SCSI снижают влияние дисковых ограничений, связанных с вводом/выводом, что очень полезно для серверов. Осторожно: соблазнившись Ultra-Wide SCSI дисками и контроллерами, можно оказаться без соответствующих драйверов, еще не созданных для приобретенного высокоскоростного оборудования SCSI. Другим важным моментом является быстрый нагрев высокопроизводительных жестких дисков. Не забудьте включить соответствующее охлаждающее оборудование, например дополнительные вентиляторы в неиспользуемом дисковом отсеке. • Адаптер сетевого интерфейса Хороший сервер нуждается в хорошем сетевом адаптере (NIC — Network Interface Card). Убедитесь, что покупаете высокопроизводительный NIC хорошо известного поставщика, такого как 3COM или Intel. В идеале нужен адаптер, позволяющий переключателем блокировать режим Plug and Play (PNP), так как PNP все еще не вполне корректно работает в Red Hat Linux. • Другое оборудование Оно включает достаточно быстрое устройство чтения CD-ROM дисков и устройство чтения гибких дисков (дискет). Большинство современных материнских плат поставляются со встроенными контроллерами IDE и позволяет присоединить четыре устройства IDE. Так как CD-ROM редко используется на сервере, не нужно очень быстрое устройство — достаточно 10-20-кратной скорости. Последнее, но не менее важное, это корпус. Убедитесь, что для системы приобретен корпус и источник питания серверного класса. Существуют корпуса с дополнительным источником питания и высокой мощностью (300 Ватт или выше); Подготовка к установке Red Hat Linux Во-первых, выберите версию Red Hat Linux. С книгой поставляется версия 6.x Red Hat Linux — можно использовать ее или получить самую последнюю версию в компании Red Hat (в сентябре 2000 г. опубликована версия 7 — Прим. ред.). Для этого следует обратиться на Web-сайт компании. Можно установить Red Hat Linux через службы FTP, NFS или 8MB (Samba), если CD-ROM диск Red Hat расположен на удаленном компьютере. Этот метод не всегда работает успешно. Я настоятельно рекомендую использовать локальное устройство чтения CD-ROM и проводить установку без обращения к сети. Если необходимо установить систему через службы FTP, NFS или 8MB, убедитесь, что локальный компьютер настроен на исполнение требуемой службы, смонтирован CD-ROM диск Red Hat и выполнен его экспорт на компьютер, выбранный сервером Red Hat. Рекомендуем сделать копию всего CD-ROM диска Red Hat на жесткий диск, чтобы ускорить установку. Можно установить Red Hat из раздела DOS локального жесткого диска. Это рекомендуется в том случае, если локальная система не имеет устройства чтения CD-ROM даже на время проведения установки. Предполагая, что существует доступ к удаленному компьютеру ЛВС через NFS, SMB, FTP или с помощью других средств, сделайте следующее: 1. Создайте каталог RedHat в дисковом разделе, который не будет использоваться для установки Red Hat Linux. Другими словами, если есть раздел MS-DOS, который нужно сохранить без изменений, используйте именно этот раздел. 2. Создайте подкаталог base каталога RedHat и скопируйте содержимое каталога RedHat/base с CD-ROM диска Red'Hat удаленного компьютера.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

13

14

О

:

Глава 2 -

3. Создайте другой подкаталог RPMS каталога RedHat и скопируйте в него содержимое каталога RedHat/RPMS с CD-ROM диска Red Hat удаленного компьютера! Можно избежать множества проблем, выполнив установку с локального устройства чтения CD-ROM, поэтому в оставшейся части главы будем предполагать именно такой способ установки. Следующий шаг в подготовке к установке Red Hat Linux состоит в определении, нужен ли загрузочный диск. Вместе с официальным CD-ROM диском Red Hat поставляются загрузочный диск и дополнительный диск Red Hat. Если материнская плата имеет BIOS, поддерживающий загрузку системы с устройства чтения CD-ROM, то загрузочный диск не нужен. В этом случае следует настроить BIOS на загрузку системы с CD-ROM. После завершения установки придется изменить этот режим (т.е. загрузку с CD-ROM), восстановив режим запуска с жесткого диска. Большинство новых версий BIOS позволяют указать последовательность устройств, с которых компьютер попытается загрузить систему. Например, в BIOS можно указать последовательность CD-ROM, С, А, означающую, что компьютер попытается загрузить систему сначала с устройства чтения CD-ROM, затем с жесткого диска, и наконец с гибкого диска в накопителе А:. Такая последовательность позволит не менять параметры BIOS, но для загрузки с жесткого диска придется удалить любой диск из устройства чтения CD-ROM. С другой стороны, если в качестве дистрибутива использовать CD-ROM, нужно сделать загрузочный диск с самого начала. Создание загрузочного диска в MS Windows 9x/2000 Создание загрузочного диска в операционной системе Windows 9x/2000: 1. Предполагая, что устройству чтения CD-ROM присвоена буква D: и смонтирован CD-ROM диск Red Hat, выполните в окне оболочки MS-DOS: d:/dosutils/rewrite 2. Утилита rawrite выведет приглашение: Enter disk image source file name: (Введите имя файла образа диска:) Please insert a formatted diskette into drive A: and press the enter key (Вставьте, пожалуйста, форматированную дискету в устройство А: и нажмите клавишу enter) 3. Введите \images\boot.img в качестве файла источника образа. Теперь rawrite выведет следующее приглашение Enter target diskette drive: (Вставьте в устройство целевую дискету:) 4. Введите букву устройства гибких дисков. Например, если дискета находится в устройстве А:, введите а: в качестве целевого устройства. 5. Вставьте пустую форматированную дискету в устройство гибких дисков и нажмите клавишу Enter. 6. Утилита rawrite запишет образ boot.img на дискету, которая станет загрузочной. Если для установки Red Hat Linux нужно использовать устройство CD-ROM на шине PCMCIA, придется создать дополнительную дискету, выполнив описанные выше операции, но на шаге 3 в качестве имени файла образа img ввести \image\supp.img

Создание загрузочного диска Linux

Не имея системы MS Windows, для создания загрузочного диска можно использовать другую систему Linux:

www.books-shop.com

Установка и базовая конфигурация

15

1. Смонтируйте обычным порядком CD-ROM диск Red Hat. Будем предполагать монтирование в каталоге /mnt/cdrom. Перейдите из текущего каталога в каталог /mnt/cdrom/images (там хранится образ загрузочного диска). 2. Пусть устройством гибких дисков является /dev/fdO {используемое по умолчанию устройство) и применяются дискеты 1.44 МБ (3.5 дюйма, HD). Тогда выполните команду: dd if=boot.img of=/dev/fdO bs=1440K Эта команда должна создать необходимый загрузочный диск. Сформировать образ дополнительного диска позволит замена в предыдущей команде аргумента if=boot.img на if=supp.img. Дополнительная дискета необходима только для устройств на шине PCMCIA, которые обычно используются в переносных компьютерах. После создания загрузочного диска (дискеты) можно начинать установку Red Hat Linux с CD-ROM диска. Установка Red Hat Linux Чтобы загрузить систему с устройства CD-ROM, вставьте в это устройство компакт-диск Red Hat CD и перезагрузите или включите компьютер, который должен стать сервером. Если используется загрузочная дискета, вставьте ее в устройство и перезагрузите или включите компьютер. После загрузки система выведет начальный экран Red Hat с приглашением: boot: Существуют три варианта дальнейших действий. Если нажать клавишу Enter, то запустится обычная установка или обновление. Если же в приглашении boot: ввести expert, то стартует установка или обновление в режиме опытного пользователя. Тогда программа установки Red Hat не будет автоматически определять оборудование, предполагая его выбор вручную. Установку в режиме expert рекомендуем специалистам Linux или в том случае, когда возникают проблемы с автоматическим определением компонентов оборудования. Третий вариант предполагает ввод rescue в приглашении boot:. Он предназначен для восстановления после неисправности. В таком случае дополнительно к стандартной загрузочной дискете понадобится аварийный (rescue) диск. Аварийный диск создается так же, как загрузочный и дополнительный диски. Замените имя файла образа на rescue.img и проведите обычный процесс создания загрузочного образа (см. выше). I Если планируется несопровождаемая установка (не требует ' взаимодействия с пользователем), введите в приглашении boot: команду linux ks. Это укажет программе установки на режим Kickstart, когда на загрузочном диске находится специальный конфигурационный файл ks либо на сервере bootp присутствует файл с именем -kickstart. Во время первой установки Red Hat лучше нажать клавишу Enter, чтобы запустить процесс обычной установки. После запуска программа установки выводит следующий начальный экран. Нажмите Enter, чтобы продолжить установку.

Как работает программа установки

Программа установки использует для перемещения по экрану несколько клавиш — «стрелка вверх», «стрелка вниз», Tab (табуляция), пробел и Enter. Четыре виртуальные консоли можно выбирать клавишами от Alt+Fl до Alt+F4. Используемая по умолчанию консоль (Alt+Fl) показывает диалоговые окна процесса установки, вторая консоль (A11+F2) — приглашение оболочки, где при необходимости можно вводить команды, третья консоль (Alt+F3) 2 Зак. 436

www.books-shop.com

16



о

'

2



••

выводит сообщения журнала установки, а четвертая консоль (AU+F4) показывает сообщения ядра. Выбор языка, раскладки клавиатуры и метода установки После знакомства с начальной страницей приветствия нужно выбрать используемый язык (по умолчанию применяется английский - English). Укажите нужный язык и нажмите Enter. Следующий экран предлагает выбрать тип клавиатуры. По умолчанию используется English. Можно нажать Enter или выбрать иной тип клавиатуры. Затем следует выбрать метод установки: Local CDROM, NFS Image, hard drive, FTP и 8MB image. Поскольку мы проводим установку с устройства CD-ROM, нажмите клавишу Enter, чтобы начать процесс установки. Новая установка или обновление Экран (см. рис. 2.1) предлагает выбрать новую установку или обновление.

Рис. 2.1. Выбор новой установки или обновления системы

Если проводится первоначальная установка Red Hat Linux, выберите вариант Install, а если обновление существующей системы Red Hat, — Upgrade. Отличие обновления от установки состоит в том, что будут модернизированы только существующее ядро и пакеты программного обеспечения, но не будут добавлены новые пакеты. Предположим, проводится первоначальная установка ОС, поэтому выберем вариант Install. Выбор класса установки Программа установки (см. рис. 2.2) предлагает три варианта (класса) системы: Workstation (рабочая станция), Server (сервер) и Custom (пользовательский, иногда называется гибкой установкой). Для системы Red Hat Linux на персональной рабочей станции выберите класс Workstation. Этот вариант позволит программе установки для создания предварительной конфигурации системы удалить все существующие разделы Linux и использовать все дисковое пространство без деления на разделы. Система класса Workstation будет иметь небольшой раздел свопинга (32 МБ) и раздел в 16 МБ, называемый /boot, для ядра и родственных файлов. Оставшаяся часть дискового пространства будет использоваться для создания одного раздела /(root, корневого). Обычно для установки рабочей станции нужно не менее 600 МБ дискового пространства. Второй вариант — это класс Server, предназначенный для создания серверных систем. Будут выделены 64 МБ на раздел свопинга (подкачки), 16 МБ

www.books-shop.com

Установка и базовая конфигурация

17

V/

Выбор класса установки

разделу /boot для ядра и родственных файлов, 256 МБ разделу /(root), 512 МБ (или более) раздел /usr для хранения пользовательских приложений и утилит, 512 МБ (или более) разделу /home для домашних каталогов пользователей и 256 МБ разделу /var для системных журналов и очередей. Всего для системы этого класса потребуется приблизительно 1.6 ГБ дискового пространства. Третий вариант, класс Custom, позволяет выбрать произвольное разбиение на разделы с помощью специальной утилиты, поэтому является наиболее гибким. Воспользуемся именно этим вариантом. После указания класса Custom программа установки автоматически проверит наличие в системе адаптера SCSI. Если он будет обнаружен, появится сообщение, содержащее имя производителя адаптера. Например, на рис. 2.3 показано сообщение о контроллере NCR 53С8хх PCI SCSI. Автоматическое определение адаптера(ов) SCSI

Если не удастся автоматически определить адаптеры SCSI, то программа установки выведет экран, показанный на рис. 2.4.

www.books-shop.com

18

Глава 2

О Выбор адаптера SCSI вручную

Либо в системе нет адаптера SCSI, либо адаптер невозможно опознать в режиме автоматического определения. В последнем случае щелкните Yes (Да), чтобы вручную выбрать адаптер SCSI в списке. Если же в системе нет адаптера SCSI, укажите No (Нет), чтобы перейти к следующему этапу установки.

Деление дисков на разделы

Разбиение (деление на разделы) дисков является очень важным шагом, поскольку нельзя изменить разделы диска без потери данных. Поэтому будьте очень внимательны в этой операции. Программа установки выведет следующий экран (см. рис. 2.5).

Выбор утилиты разбиения дисков

Здесь нужно выбрать утилиту разбиения диска: Disk Druid или программу fdisk. Утилита разбиения Disk Druid проще для пользователя, чем программа fdisk, поэтому рекомендуем ее начинающим. После выбора в меню этой утилиты, на экран выводятся сведения о текущих разделах дисков. На рис. 2.6 показан пример структуры разделов дисков моей системы.

www.books-shop.com

Установка и базовая конфигурация __ _



.

19

^j>

Просмотр существующих разделов дисков

Если на диске есть разделы старой операционной системы, например MS Windows 9x/NT, можно удалить их либо использовать свободные разделы, чтобы создать систему Red Hat с двухпутевой загрузкой. Наша книга посвящена серверной ОС, поэтому будем считать, что на диске присутствуют только разделы Linux. На рис. 2.6 видно, что в моей системе существуют два диска — hda и sda. Red Hat Linux использует hdx (где х — буква из диапазона a-z) для дисков IDE и sdx (где х — буква из диапазона a-z) для дисков SCSI. Так как наша система имеет жесткий диск IDE, он назван hda, а диск SCSI назван sda. Если в системе два диска IDE, они получат имена hda и hdb. Red Hat Linux позволяет создать разделы на каждом диске, причем каждое разбиение именуется с помощью схемы hd[a-z][N] для дисков IDE и схемы sd[a-z][N] для дисков SCSI, где N— номер раздела. Например, hdal является разделом 1 на первом диске IDE (hda), a sdal является первым разделом на первом диске SCSI. Нужно заранее выбрать схему разбиения на разделы. Приведем несколько рекомендаций. Нужен раздел / (корневой) для хранения ядра и связанных с ним файлов. Он не должен быть слишком большим (достаточно 256 МБ, согласно рассмотренной ранее спецификации класса сервера Red Hat). Проверьте, что для корневого раздела выбран тип Linux native. Указав размер раздела /, следует определить размер раздела /usr. Именно здесь будут располагаться все пользовательские приложения, поэтому убедитесь, что раздел достаточно большой. Раздел /usr должен занимать как минимум 512 МБ. Проверьте, что для него указан тип Linux native. Затем необходимо создать раздел /home для домашних каталогов пользователей. Если в системе много пользователей, нужно решить, сколько пространства придется предоставить каждому пользователю. Умножаем его на общее число ожидаемых пользователей и создаем подходящий раздел. Разрешено ограничить дисковое пространство каждого пользователя за счет установки дисковых квот (см. главу 7). Кроме того, в отличие от / или /usr для домашнего раздела пользователей можно выбрать произвольное название. Например, если формируется Web-сервер, где необходим раздел с названием /www для всех пользовательских Web-узлов, в этот же раздел можно поместить домашние каталоги пользователей. Другими словами, разрешено произвольное именование раздела /home. Если указано иное имя домашнего раздела пользователей (не /home), убедитесь, что изменены необходимые конфигурационные файлы для useradd, userdel, usermod и связанных с этими утилитами программ (см. главу 7). Для раздела домашних каталогов должен быть указан тип Linux native.

www.books-shop.com

20

Глава 2

Теперь следует создать раздел свопинга (тип — Linux swap) так, чтобы размер раздела не превышал удвоенного размера вашей физической оперативной памяти или 128 МБ (нужно выбрать наименьшее из этих двух значений). Например, если в системе 32 МБ оперативной памяти, подойдет раздел свопинга размером 64 МБ. В оставшихся свободными дисках или разделах можно добавить дополнительные разделы по собственному усмотрению. На рис. 2.7 показаны разделы моей двухдисковой системы. Пример таблицы разделов

Создав разделы и назначив точки монтирования, щелкните ОК, чтобы перейти к следующему этапу установки. Я не рекомендую программу fdisk для начинающих, но если пользоваться этой утилитой, экран сведений о доступных жестких дисках системы будет иной (см. рис. 2.8). Выбор жесткого диска для дальнейшего разбиения на разделы

На экране можно выбрать жесткий диск, который будет разбит на разделы программой fdisk. Указав жесткий диск и щелкнув кнопку Edit, мы увидим командное приглашение утилиты fdisk (см. рис. 2.9).

www.books-shop.com

21

Установка и базовая конфигурация

Рис. 2.9. Разбиение дисков утилитой (disk

Программа fdisk в каждый момент времени работает только с одним диском. Имея несовершенный интерфейс, fdisk все же обладает большей гибкостью, чем Disk Druid. Мы не рекомендуем fdisk начинающим пользователям, но следует познакомится с возможностями этой утилиты.. Поскольку нашей основной целью является установка ОС, пока можно пропустить оставшуюся часть раздела, посвященную работе с fdisk. На рис. 2.9 видно, что fdisk имеет простой интерфейс командной строки. Эта утилита позволяет разбивать диски и после установки Red Hat Linux. Запуск fdisk из командной строки: fdisk Например: fdisk /dev/sda

Мы указали в утилите fdisk, что собираемся работать с разделами первого диска SCSI. Утилита fdisk выведет свое приглашение ввода команд «Command (m for help):», йричем команда т позволяет получить справочный экран утилиты: Command action a toggle a bootable flag (переключить флаг загрузки) b edit bsd disklabel (редактировать метку bsd) с toggle the dos compatibility flag (переключить флаг совместимости с DOS) d delete a partition (удалить раздел) 1 list known partition types (вывести известные типы разделов) m print this menu (вывести это меню) n add a new partition (добавить новый раздел) о create a new empty DOS partition table (создать новую пустую таблицу разделов DOS) р print the partition table (вывести таблицу разделов) q quit without saving changes (завершить работу без сохранения изменений) t change a partition's system id (изменить системный идентификатор раздела) u change display/entry units (изменить единицы изображения/ввода) v verify the .partition table (проверить таблицу разделов) w write table to disk and exit (записать таблицу на диск и выйти)

www.books-shop.com

22

Глава 2

х extra functionality (experts only) (дополнительные возможности - только для профессионалов) Для ознакомления с существующими разделами выбранного диска введите команду р, которая покажет результат в табличном формате: Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders Units = cylinders of 2079 * 512 bytes

Device Boot /dev/sda1 /dev/sda2 /dev/sda5

/dev/sda6

Start 1 506 506 887

End 505 1014 886 1011

Blocks 524916 529105+ 396018 129906

Id 83 5 83 82

System Linux native

Extended Linux native

Linux swap

На диске /dev/sda создано четыре раздела, причем первый раздел /dev/sdal начинается с блока 1 и заканчивается блоком 505. Каждый блок имеет размер 1 024 байта (1 КБ). Поэтому первый раздел состоит из 524 916 блоков (524 916 КБ) или примерно 512 МБ. Для последовательного удаления всех существующих разделов используйте команду d и вводите номера удаляемых разделов. После устранения одного или нескольких разделов создадим новые разделы. Сначала введите команду п, чтобы добавить новый раздел: Command (m for help): n Command action e extended p primary partition. (1-4) Существуют два варианта дальнейших действий: создать дополнительный раздел (extended) или первичный раздел (primary). Дополнительные разделы нужны только тогда, когда на диске должно быть более четырех разделов. Для запуска Linux нам нужны только разделы /, /usr, /home и раздел свопинга, поэтому дополнительные не потребуются. Создайте первичный раздел, указав в приглашении команду р. Следующее приглашение запрашивает ввод номера раздела: Partition number (1-4): 1 Введите 1 для первого раздела, 2 — для второго и т.д. Следующее приглашение предлагает указать номер начального блока. Показанный в скобках диапазон определяет допустимые значения в блоках. Создавая первый раздел, выберите 1 в качестве начального блока: First cylinder (1-1014): 1

"'

Чтобы создать раздел объемом 512 МБ, можете указать его размер в байтах, килобайтах или мегабайтах. Проще вводить размер в мегабайтах, поэтому для последнего цилиндра (last cylinder) введем +512М: Last cylinder or +size or +sizeM or +sizeK ([1] - 1014): +512M i

Для проверки создания раздела используйте команду р, которая покажет сведения о разделе: Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders Units = cylinders of 2079 * 512 bytes Device Boot /dev/sda1

Start 1

End 505

Blocks 524916

Id 83

System Linux native

Видно, что появился первый раздел с указанными нами параметрами. По умолчанию используется тип раздела Linux native. Изменить тип раздела позволит команда t, переключающая флаг системного идентификатора раздела. Например, установить флаг системного идентификатора раздела в значение Linux swap позволит команда:

www.books-shop.com

23

Установка и базовая конфигурация

Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 82 Changed system type of partition 1 to 82 (Linux swap) Command (m for help): p Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders Units = cylinders of 2079 * 512 bytes Device Boot /dev/sda1

Start 1

End 505

Blocks 524916

Id 82

System Linux swap

Сначала введена команда t, чтобы переключить системный идентификатор раздела, затем указан номер раздела и введен код 82, специфицирующий тип раздела свопинга. Список всех кодов доступных типов разделов выводится командой L. Обратите внимание, что создание разделов утилитой fdisk предполагает установку загружаемого раздела Linux native. Например, чтобы превратить в загружаемый раздел /dev/sdal, потребуется переключить флаг загрузки. В командном приглашении введем: Command (m for help): a Partition number (1-6): 1 Теперь выведенная командой p таблица существующих разделов примет вид: Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders Units = cylinders of 2079 * 512 bytes Device Boot /dev/sdal * /dev/sda2 /dev/sda5 /dev/sda6

Start 1 506 506 887

End 505 1014 886 1011

Blocks 524916 529105+ 396018 129906

Id 83 5 83 82

System Linux native Extended Linux native Linux swap

Раздел /dev/sdal имеет «*» в столбце Boot, т.е. является загрузочным.

Активизация раздела свопинга

На предыдущем этапе с помощью Disk Druid или fdisk создан раздел свопинга, который необходимо активировать до продолжения операций по установке ОС. Программа установки выведет экран (см. рис. 2.10).

Выбор и активизация раздела свопинга

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

Глава 2

24

На нем предлагается выбрать раздел свопинга, что может показаться неуместным, если в системе только один раздел свопинга. Однако раздел свопинга должен быть форматирован, причем старые данные будут потеряны. Ни одна инсталляционная программа не начнет форматирования без подтверждения пользователем. Если захочется выявить плохие (сбойные) блоки, выберите соответствующую командную строку, воспользовавшись клавишей «пробел». Выбранный ранее раздел свопинга будет отформатирован и активирован, поскольку это необходимо для продолжения установки. Форматирование разделов На следующем этапе программа установки запросит подтверждение форматирования всех доступных разделов, кроме раздела свопинга. На рис. 2.11 для форматирования доступен только один раздел.

Рис. 2.11. Выбор форматируемых разделов

Помните, что каждый форматируемый раздел теряет все существующие данные. Если необходима проверка жесткого диска на плохие (сбойные) секторы, установите флажок в строке «Check for bad blocks during format», а затем щелкните кнопку ОК. Время на форматирование зависит от размера жесткого диска. Пока форматируется большой (8-10 ГБ) диск, можно выпить чашечку кофе. Выбор устанавливаемого программного обеспечения Завершив форматирование разделов диска, программа установки предложит выбрать пакеты (см. рис. 2.12). Устанавливая сервер, следует выбрать только необходимые пакеты — чем больше программ установлено на сервере, тем больше появляется лазеек в системе защиты. Мы рекомендуем установить только те компоненты, которые действительно необходимы. Позднее всегда можно добавить или удалить компоненты командой rpm или утилитой glint среды X Window (см. главу 23). I Серверу не нужна система X Window, поэтому компоненты программного обеспечения X Window устанавливаются только из любопытства, чтобы посмотреть на внешний вид и работу этой графической системы. Пока мы не будем устанавливать X Window, но эту систему можно добавить позже (см. главу 22). Установкой флажка Select individual packages осуществляется выбор отдельных пакетов в пределах определенной категории компонентов. Если затем щелкнуть кнопку ОК, появится экран (см. рис. 2.13).

www.books-shop.com

Установка и базовая конфигурация

2S

Рис. 2.12. Выбор устанавливаемых компонентов

Рис. 2.13. Выбор устанавливаемых пакетов

Чтобы выбрать пакеты отдельной категории компонентов, например Networking/Daemons (Работа в сети/Демоны), укажите эту категорию и щелкните кнопку Edit — появится диалоговое окно Select Packages (Выбор пакетов), показанное на рис. 2.13. Выберите в нем нужные компоненты. Указав все устанавливаемые пакеты и запретив установку ненужных пакетов, щелкните кнопку ОК. Программа установки выведет экран о журнале регистрации (см. рис. 2.14). Полный журнал установки будет создан в файле /tmp/install.log. Щелкните кнопку ОК, чтобы продолжить установку. Программа установки покажет экран состояния (см. рис. 2.15). Если недостаточно сведений на этом экране, воспользуйтесь клавиатурными комбинациями Alt+Fl — Alt+F4, чтобы увидеть действия программы установки, переключаясь между виртуальными консолями. Завершив установку пакетов, программа попробует найти в системе мышь.

www.books-shop.com

Глава 2

26

Рис. 2.14. Запуск процесса установки

Рис. 2.15. Выполнение установки

Выбор мыши Если программа установки автоматически определит мышь, появится диалоговое окно с информацией о порте мыши. Если программа не сможет этого сделать, будет выведено иное окно (см. рис. 2.16), предлагающее выбрать мышь вручную. Установка пакетов X Window предполагает конфигурирование системы X, по мы пока не будем обсуждать эти операции и сразу перейдем к конфигурированию сети. Конфигурирование сети TCP/IP Конфигурация сети по сути дела определяет основные параметры стека TCP/IP. Экран конфигурирования сети показан на рис. 2.17. Мы проводим установку сервера, поэтому щелкните Yes (Да). Придется выбрать способ, которым конфигурируются IP-адреса сервера (см. рис. 2.18). Варианты конфигурирования ВООТР и DHCP подходят для установки рабочей станции, которая получает IP-адрес от сервера ВООТР или DHCP

www.books-shop.com

Установка и базовая конфигурация

27 О

Рис. 2.16. Выбор мыши

Рис. 2.17. Конфигурирование сети

локальной сети. Для сервера пригоден только вариант Static IP address (Статический IP-адрес). Выберите этот вариант и перейдите на следующий экран (см. рис. 2.19). Нужно ввести IP-адрес сервера и маску подсети, используемый по умолчанию шлюз и первичный сервер имен. Если сервер предназначен для собственной локальной сети, то значения этих параметров должны быть известны. Если же создается локальный сервер сети Интернет-провайдера, то все сведения об IP-адресах нужно получить у провайдера. Рекомендации по выбору параметров собственной локальной сети приведены в главе 9, посвященной созданию сетей IP. Используемый по умолчанию шлюз обычно является маршрутизатором, связывающим локальную сеть с Интернетом. IP-адрес используемого по умолчанию1 шлюза должен принадлежать этой локальной сети. Другими словами, если сервер имеет IP-адрес 206.171.50.50, то шлюз по умолчанию должен иметь адрес 206.171.50.х, где х может быть любым подходящим числом. Первичный сервер имен может быть где угодно, но лучше если он не слишком

www.books-shop.com

Глава 2

28

Рис. 2.18. Выбор варианта конфигурирования IP-адреса

Рис. 2.19. Конфигурирование параметров TCP/IP

удален в сети от устанавливаемого нами сервера. Для реализации собственной службы DNS можно задействовать любой сервер имен Интернета, но это не очень вежливо и, вероятно, незаконно. Поэтому убедитесь, что пользуетесь сервером DNS, на который есть полномочия. Если планируется установить в системе собственный сервер DNS, можно использовать тот же самый IP-адрес. После экрана ввода IP-адресов появится следующий экран (см. рис. 2.20), где предстоит указать имя домена, имя хоста, IP-адрес вторичного сервера имен (необязательно) и IP-адрес третичного сервера имен (необязательно). В качестве имени домена используется имя домена Интернета нашей сети. Если сервер принадлежит частной локальной сети, которая не соединена с Интернетом, разрешено использовать произвольное имя домена. Обычно им становится название организации. Например, если организация называется Form Track, то хорошим именем домена станет formtrack.com. Однако для использования системы в Интернете следует выбрать имя реального домена. Имя хоста может быть произвольным, если только оно не

www.books-shop.com

29

Установка и базовая конфигурация

Настройка параметров DNS и хоста

совпадает с именем другого хоста в этой же сети. IP-адреса для вторичного и третичного серверов имен не требуются, но их наличие улучшает поддержку DNS устанавливаемого сервера. Конфигурирование часового пояса Приступим к конфигурированию часового пояса (см. рис. 2.21). Конфигурирование часового пояса

Если аппаратные часы CMOS настроены на GMT (Greenwich Mean Time Среднее время по Гринвичу), укажите пункт «Hardware clock set to GMT». Затем выберите подходящий часовой пояс, в котором будет располагаться сервер. Следующий шаг состоит в конфигурировании сетевых служб и демонов, которые будет выполнять сервер. Конфигурирование действующих служб или демонов Экран выбора автоматически запускаемых служб и демонов показан на рис. 2.22.

www.books-shop.com

30

Глава 2

Рис. 2.22.

Выбор запускаемых служб или демонов

Укажите только действительно необходимые службы и демоны. Всегда можно добавить новые службы, используя /etc/re.d/. Следующий этап установки состоит в конфигурировании принтеров. Конфигурирование принтеров Диалоговое окно (см. рис. 2.23) предлагает сконфигурировать принтер. Если в системе нет такого устройства, выберите просто No (Нет) и пропустите этот раздел книги. Однако если компьютер станет сервером печати или вам нужен удаленный принтер, придется заняться конфигурированием. Рис. 2.23.

Конфигурирование принтера

В начале конфигурирования принтера предстоит выбрать локальное или удаленное устройство. Соответствующее диалоговое окно (см. рис. 2.24) спрашивает о том, как подключен к системе принтер. Выберите нужный тип соединения. Предположим, это будет локальный принтер. Следует ввести информацию об очереди печати и каталоге спулинга. Для локального принтера прекрасно подойдут значения, используемые по умолчанию (см. рис. 2.25).

www.books-shop.com

34

Установка и базовая конфигурация

Рис 2.24. Выбор типа соединения принтера

Рис. 2.25. Выбор информации об очереди печати и спулинге

Нужно выбрать тип принтера из списка поддерживаемых устройств. Укажите наиболее подходящие параметры команды make и модель из списка (см. рис. 2.26), а затем перейдите в следующее диалоговое окно. Если указан принтер PostScript, потребуется дополнительная информация: размер бумаги, разрешение и т.д. (см. рис. 2.27). На экране выводится итоговая информация об указанных ранее параметрах принтера (см. рис. 2 28). Обнаружив ошибку, воспользуйтесь кнопкой Back, чтобы вернуться назад и исправить проблему. Убедившись, что указана правильная информация о принтере, можно перейти к установке пароля root.

Задание пароля root

Учетная запись root используется по умолчанию суперпользователем системы Red Hat Linux. Она необходима для регистрации в новой системе. Диалоговое окно ввода пароля root показано на рис. 2.29.

www.books-shop.com

Глава 2

32

Рис. 2.26. Выбор параметров и модели принтера

Рис. 2.27. Выбор конфигурации принтера

Выберите пароль учетной записи суперпользователя. Этот пароль вводится дважды, он не будет виден на экране, что связано с защитой системы. Поэтому убедитесь, что твердо запомнили выбранный пароль! Нужно выбрать «хороший» пароль, который трудно угадать или взломать. Никогда не пользуйтесь словами из словаря — в пароле должен быть один или несколько символов пунктуации и цифр. Лучше длинный пароль (будет достаточно от пяти до восьми символов). На следующем этапе установки формируется пользовательский загрузочный диск. Создание загрузочного диска Экран (см. рис. 2.30) предлагает создать специальный загрузочный диск. Это обязательная процедура. Загрузочный диск позволит запустить систему даже при неисправности дискового загрузчика (например, LILO). Тут нечего думать — выберите Yes (Да) и вставьте гибкий диск в устройство /dev/fdO (см. рис. 2.31).

www.books-shop.com

Установка и базовая конфигурация

Рис. 2.28. I Проверка параметров принтера

Рис. 2.29. Ввод пароля пользователя root

На чистую дискету записывается образ загрузочного диска. Созданная дискета используется совместно с ранее записанным аварийным диском (файл образа rescue.img). Если под рукой нет чистой дискеты, можно отказаться от создания загрузочного диска, но впоследствии сделать это при первой возможности с помощью программы mkbootdisk. Затем следует выбрать место для установки LILO (Linux Install boot Loader — Начальный загрузчик установки Linux). Выбор варианта установки LILO Экран выбора (см. рис. 2.32) позволяет установить начальный загрузчик Red Hat Linux либо в загрузочную мастер-запись (MBR — master boor record), либо в первый сектор загрузочного раздела. Если на компьютере не установлены другие операционные системы, выберите MBR. Если уже есть другая операционная система и вы хотите продолжить ее использование, укажите первый сектор загрузочного раздела.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

33

Глава 2

34

Рис. 2.30. Предложение о создании пользовательского загрузочного диска

Рис. 2.31. Создание специального загрузочного диска

Размещение LILO в MBR полностью передает LILO управление процессом начальной загрузки компьютера. Если нужна многопутевая загрузка совместно с другой операционной системой, то скорее всего эта ОС уже установила собственный загрузчик в MBR. Поэтому будьте внимательны во время выбора места для LILO. Дальше можно предоставить ядру дополнительную информацию о начальной загрузке (см. рис. 2.33). В большинстве случаев не требуется никакой дополнительной информации, поэтому достаточно указать загрузочные разделы, которыми будет управлять LILO. Диалоговое окно (см. рис. 2.34) покажет все разделы системы (за исключением раздела свопинга), пригодные для загрузки операционных систем (включая Linux). Используемый по умолчанию загрузочный раздел Red Hat Linux отмечен символом «*». Этому разделу присвоена используемая по умолчанию метка загрузки «linux». Другими словами, стартовавший во время начальной загрузки LILO позволит ввести linux в приглашении boot:, чтобы загрузить Red Hat

www.books-shop.com

Установка и базовая конфигурация

35

Рис. 2.32. Выбор места размещения LJLO

Рис. 2.33. Добавление конфигурационных параметров ядра

Linux. Если на компьютере есть другая операционная система, можно будет указать иной раздел и создать для него метку загрузки. Выберите раздел и щелкните кнопку Edit, чтобы перейти в следующее диалоговое окно (см. рис. 2.35). Введите подходящее имя метки загрузки, позволяющее легко идентифицировать операционную систему. Закончив редактирование меток загрузки, щелкните ОК. Программа установки завершит свою работу выводом последнего диалогового окна (см. рис. 2.36). Мы готовы к первому запуску системы. Удалите из устройств компьютера диск CD-ROM и дискеты, а затем щелкните ОК, чтобы перезагрузить систему. Первый запуск Red Hat Linux Произойдет перезагрузка системы, а на экране появится приглашение boot:. Можно ввести linux либо нажать клавишу Enter, чтобы первый раз запустить Red Hat Linux. Если ничего не предпринимать, то LILO немного

www.books-shop.com

Глава 2

36

Рис. 2.34. Конфигурирование загрузочных разделов

Рис. 2.35. Конфигурирование меток загрузки ULO

подождет и запустит операционную систему по умолчанию — старую добрую Linux! Во время загрузки ядра Linux на экран выводится разнообразная информация. Не отчаивайтесь, что она быстро исчезает с экрана. Скоро мы опять получим к ней доступ. Будьте терпеливы и позвольте системе вывести консольное приглашение регистрации. Зарегистрируйтесь в качестве пользователя «root», используя пароль, указанный во время установки ОС. Регистрация в системе должна пройти успешно. Поздравляю! Вы только что стали суперпользователем своего собственного сервера Red Hat Linux. Система Linux ожидает ваших команд. Чтобы увидеть пролетевшую мимо информацию о загрузке системы, выполните команду dmesg, которая покажет все сообщения процесса загрузки. Если экран прокручивается слишком быстро, введите dmesg | more, чтобы перейти в режим постраничного просмотра.

www.books-shop.com

37

Установка и базовая конфигурация

Рис. 2.36. Сообщение о завершении установки

Linux позволяет (и этого нет в системах Windows) прокручивать назад историю (журнал) консоли. Shift+PageUp еще раз покажет то, что промелькнуло на экране. Однако содержимое журнала теряется при переходе на другую виртуальную консоль. Плохо, что окно регистрации «очищает экран», удаляя последние строки сообщений о загрузке. Рекомендуем изменить /etc/inittab, чтобы воздержаться от выполнения getty на первой виртуальной консоли (см. главу 3). Сейчас наиболее подходящее время, чтобы убедиться в правильности выявления оборудования ядром ОС (ознакомьтесь с результатом команды dmesg). Теперь мы полностью готовы к преобразованию нового сервера Red Hat Linux в полнофункциональный сервер Интернета.

www.books-shop.com

www.books-shop.com

Часть 2 Работа суперпользователя

www.books-shop.com

www.books-shop.com

Глава 3 Процессы начальной загрузки и выключения системы

В этой главе: Как загружается Linux Как конфигурировать ink Как остановить Linux

п

режде всего мне понравился в Linux процесс начальной загрузки. Я устал от ожидания, пока мои компьютеры под управлением Windows пройдут через все разноцветные фирменные экраны, не говоря мне при этом ничего о том, что происходит. Когда компьютер Windows отказывается загружаться, вы должны надевать шляпу Шерлока Холмса и исследовать случай с самого начала. Однако когда отказывается загружаться компьютер Linux, вы обычно знаете, где он застрял, так как операционная система изображает на консоли практически все задачи, которые она выполняет при загрузке. То же самое справедливо для процесса выключения. В главе 2 вы узнали о том, как ядро Linux загружается с дискеты или с жесткого диска. Здесь вы узнаете о том, как настроить процессы начальной загрузки и выключения. Ядро Red Hat Linux (т.е. базовая часть операционной системы) обычно хранится в сжатом файле. Когда ядро запускается программой начальной загрузки, такой как LILO, оно распаковывает себя, инициализирует устройство отображения и запускает проверку другого оборудования, присоединенного к компьютеру. Когда оно находит жесткие диски, дискеты, сетевые адаптеры и т.д., оно загружает соответствующие модули драйверов устройств. Во время этого процесса оно выводит текстовые сообщения

www.books-shop.com

Глава 3

42

на экране консоли. Листинг 3.1 — сокращенная версия того, что система Red Hat 5.3 показывает во время начальной загрузки. Листинг 3.1. Консольные сообщения во время процесса начальной загрузки Memory: sized by int13 Oe801h Console: 16 point font, 400 scans Console: colour VGA+ 80x25, 1 virtual console (max 63) Probing PCI hardware. Calibrating delay loop., ok - 53.04 BogoMIPS Memory: 127584k/131072k available (748 kernel code, 384k reserved, 2164k data)

Swansea University Computer Society NETS.035 for Linux 2.0 NETS: Unix domain sockets 0.13 for Linux NETS.035. Swansea University Computer Society TCP/IP for NETS.034. IP Protocols: IGMP, ICMP, UDP, TCP Linux IP multicast router 0.07. VFS: Diskquotas version dquot_5.6.0 initialized'M Checking 386/387 coupling... Ok, fpu using exception 16 error reporting. Checking 'hit' instruction ... Ok. Intel Pentium with FO OF bug - workaround enabled. alias mapping IDT readonly done Linux version 2.0.36 (rootfporky.redhat.com) (gcc version 2.7.2.3) #1 Tue Oct 13 22:17:11 EOT 1998 Starting kswapd v 1.4.2.2 Serial driver version 4.13 with no serial options enabled ttyOO at Ox03f8 (irq = 4) is a 16550A Real Time Clock Driver v1.09 Ramdisk driver initialized: 16 ramdisks of 4096K size ide: i82371 PIIX (Triton) on PCI bus 0 function 57 ideO: BM-DMA at OxfOOO-Oxf007 idel: BM-DMA at OxfOOS-OxfOOf hda: IBM-DTTA-351010, 9671MB w/466kB Cache, CHS=1232/255/63, DMA hdc: CD-920E, ATAPI CDROM drive ideO at Ox1fO-Ox1f7, Ox3f6 on irq 14 idel at 0x170-0x177,0x376 on irq 15 Floppy drive(s): fdO is 1.44M FDC 0 is a post-1991 82077 md driver 0.36.3 MAX_MD_DEV=4, MAX_REAL=8 scsi: 0 hosts, scsi: detected total. Partition check: hda: hdal hda2 < hda5 hda6 hda7 > RAMDISK: Compressed image found at block 0 VFS: Mounted root (ext2 filesystem). ncr53c8xx: at PCI bus 0, device 9, function 0 ncr53c8xx: 53c825 detected scsiO : ncr53c8xx - revision 2.5f.1 Detected scsi disk sda ad scsiO, channel 0, id 0, lun 0 ncr53c825-0-: FAST-5 SCSI 5.0 MB/s (200 ns, offset 8) SCSI device sda: hdwr sector= 512 bytes. Sectors= 2109840 [1030 MB] [1.0 GB] sda: sdal sda2 < sda5 sda6 > VFS: Mounted root (ext2 filesystem) readonly. Trying to unmount old root ... okay Adding Swap: 129900k swap-space (priority - 1)

www.books-shop.com

Процессы начальной загрузки и выключения системы

I Если вы находитесь у консоли при загрузке системы, можете ' нажать Shift+PageUp для прокрутки изображения назад и просмотреть сообщения загрузки. Можно также просмотреть их в любое время с помощью выполнения программы dmesg. Файлы /var/log/messages также будут иметь множество сообщений загрузки. В этом месте ядро монтирует корневую файловую систему (/) только для чтения и выполняет проверку файловой системы. Если оно найдет, что все в порядке, то корневая файловая система будет обычно смонтирована в режиме чтения/записи. 1 Если возникает проблема и ядро не может смонтировать корневой ' раздел или найдет в нем серьезные проблемы, ядро перейдет в режим паники (panic) и система будет остановлена. Если диск повреждается по каким-то причинам, ядро может предоставить возможность выполнить программу проверки файловой системы, такую как fsck.ext2 из оболочки с ограниченными возможностями. Когда корневая файловая система смонтирована, ядро запускает программу с именем init. Эта программа запускает все остальные программы. Когда ink завершает выполнение всех необходимых программ, система включена и работает, процесс загрузки завершен. Программы, которые выполняет init во время загрузки, в большой степени настраиваемы.

Конфигурирование init

Как ранее упоминалось, init является самой первой программой, которую выполняет ядро в конце последовательности загрузки. Программа init доступна в двух вариантах — init из системы UNIX System V и init из BSD. Дистрибутив Red Hat поставляется с init из системы UNIX System V. Различие между двумя вариантами в том, что init из System V использует уровни выполнения (run levels, обсуждаемые ниже), a init из BSD не использует. Следовательно, рассмотрение init будет ограничено версией init из системы UNIX System V. Так как init является первой программой, выполняемой ядром, ее идентификатор процесса (PID) равен 1. Когда она запускается, init считывает конфигурационный файл, называемый /etc/inittab. Файл /etc/inittab в типичной системе Red Hat Linux показан на листинге 3.2.

Листинг 3.2. Типичный файл /etc/inittab

п tt inittab - Этот файл описывает, как процесс INIT должен # настраивать систему для определенного уровня выполнения. # В Автор: Miguel van Smoorenburg, #

ft tf Модифицирована для RHS Linux Марком Ивингом и Денни Барнсом # Используемые по умолчанию уровни выполнения. RRS использует # следующие уровни выполнения: Я 0 - остановка (НЕ задавайте это значение для init по умолчанию) # 1 - Режим одного пользователя и 2 - Многопользовательский, без NFS (To же самое, что и 3, п если у вас нет сети) # 3 - Полный многопользовательский режим # 4 - не используется

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

43

44

Глава 3

и

5 - Х11

п 6 - перезагрузка (НЕ задавайте это значение для init по умолчанию) # id:3:initdefault: п Инициализация системы, si: :sysinit:/etc/rc.d/rc.sysinit 10:0:wait:/etc/rc.d/rc 0 11:1:wait:/etc/rc.d/rc 1 12:2:wait:/etc/rc.d/rc 2 13:3:wait:/etc/rc.d/rc 3 14:4:wait:/etc/re.d/rc 4 15:5:wait:/etc/rc.d/rc 5 16:6:wait:/etc/rc.d/rc 6 # Те вещи, которые выполняются на каждом уровне выполнения, ud::once:/sbin/update » Перехват CTRL-ALT-DELETE

са::ctrlaltdel:/sbin/shutdown -t3 -r now П Когда источник бесперебойного питания сообщает нам, что произошел отказ # питания, будем считать, что мы имеем еще несколько минут работы П с питанием.Спланируйте выключение системы в течение 2 мин с денного и момента. я п Предполагается, что у вас установлен powerd и ваш п источник бесперебойного питания присоединен и работает правильно. # pf: :powerfail:/sbin/shutdown -f -h +2 "Power Failure; \ System Shutting Down" # Если питание восстановлено, прежде чем начнется выключение, отмените его. pr:12345:powerokwait:/sbin/shutdown -с ."Power Restored; \ Shutdown Cancelled" ft Выполнить getty на стандартных уровнях выполнения 1:12345:respawn:/sbin/mingetty ttyl 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 п Выполните xdm на уровне 5 x:5:respawn:/usr/bin/X11/xdm -nodaemon Этот файл определяет, как init ведет себя во время событий запуска и выключения сервера. Давайте внимательно рассмотрим этот файл. Программа init игнорирует все пустые и закомментированные строки (т.е. строки, которые начинаются со знака «#») в файле /etc/mittab. Строки с полями, разделенными двоеточиями, являются конфигурационными строками init. Синтаксис для такой строки: идентификатор:уровень_выполнения:действие:процесс [аргументы] Первое поле является полем уникальной метки для идентификации записи в файле. Это поле (id) может иметь длину 2-4 символа. Второе поле ( r u n l e vels) определяет, к каким уровням выполнения применима эта строка. Третье поле определяет, какое действие необходимо сделать. Последнее поле (process) определяет, какой процесс необходимо выполнять. Вы можете также дополнительно (при желании) определить аргументы командной строки для процесса в четвертом поле.

www.books-shop.com

45

Процессы начальной загрузки и выключения системы

Как ранее упоминалось, уровень выполнения определяет состояние системы. Девять уровней выполнения показаны в таблице 3.1. Таблица 3.1. Уровни выполнения init

Уровень выполнения О 1

2 3 4 5 6 S или s а, Ь, с

Описание Остановка - завершение работы системы Один пользователь - используется для настройки системы в минимальной конфигурации, подходящей для одного пользователя Не используется Многопользовательский режим - применяется для настройки системы в конфигурации, которая поддерживает несколько пользователей Не используется Используется для запуска системы X Window и программы xdm Перезагрузка - используется для перезагрузки системы Используется для внутренних операций сценариями, которые выполняются на уровне 1 Уровни выполнения по требованию; обычно не используются

Можно определить множество уровней выполнения в одной конфигурационной строке init. Например, если желательно, чтобы init выполняла процесс как в однопользовательском, так и в многопользовательских режимах, можно определить строку следующим образом: идентификатор:13:действие:процесс Таблица 3.2. Возможные действия для определенного уровня выполнения

I

Действие respawn wait once boot bootwait

off

ondemand

initdefault sysinit powerwait

powerfail powerokwait

ctrlaltdel kbrequest

[аргументы]

Описание Процесс перезапускается всякий раз, когда заканчивается Процесс выполняется один раз, init будет ожидать, пока он закончится Процесс выполняется один раз Процесс выполняется во время загрузки системы, init будет игнорировать поле уровня выполнения Процесс выполняется во время загрузки системы, init будет ждать окончания процесса Не выполняется никакого действия. Может использоваться для отключения конфигурационной строки без ее удаления. Можно вместо этого просто закомментировать строку с помощью первого символа «#» Применимо, только когда уровень выполнения равен a, b или с. Процесс выполняется всякий раз, когда init вызывается с любым из трех уровней выполнения по требованию. Обычно не используется Задает для системы используемый по умолчанию уровень выполнения Процесс выполняется один раз во время системной загрузки. Действие sysinit имеет приоритет по отношению к действиям boot или bootwait Процесс выполняется, когда init получает сигнал SIGPWR. Обычно программное обеспечение мониторинга UPS (источник бесперебойного питания) обнаруживает проблему с питанием и посылает такой сигнал для init. В таком случае init будет ожидать, пока процесс не прекратится То же самое, что и powerwait, но init не ожидает завершения процесса Процесс выполняется, когда init получает сигнал SIGPWD, а текстовый файл /etc/powerstatus содержит строку «ОК». Обычно программа мониторинга UPS создает этот файл и посылает сигнал SIGPWR для init, чтобы указать, что проблема с питанием исправлена Процесс выполняется, когда init получает сигнал SIGINT Процесс выполняется, когда init получает KeyboardSignal от драйвера клавиатуры

www.books-shop.com

46

Глава 3

Init в стиле System V, каким является ink Red Hat Linux, использует следующую структуру каталога: /etc +-rc.d +-init.d (каталог) +-rc0.d (каталог) +-rc1.d (каталог) +-rc2.d (каталог) +-rc3.d (каталог) +-rc4.d (каталог) +-rc5.d (каталог) +-rc6.d (каталог) +-rc.sysinit (сценарий)

+-rc. local (необязательный сценарий, поставляемый с Red Hat Linux) +-гс. serial (необязательный сценарий) +-гс (сценарий) Сценарий /etc/re. d/rc.sysinit Когда система Red Hat Linux загружается, ядро выполняет программу init, которая в свою очередь выполняет сценарий /etc/re. d/rc.sysinit прежде чем обрабатывать любые другие сценарии для желаемого уровня выполнения. Система выполняет этот сценарий прежде всего в связи со следующей строкой в файле /etc/inittab. si: :sysinit:/etc/rc. d/rc.sysinit Обратите внимание, что поле уровня выполнения является пустым, так как init распознает sysinit как действие по инициализации системы. Сценарий rc.sysinit делает много вещей, включая задание имени хоста, разрешение раздела свопинга, проверку файловых систем, загрузку модулей ядра и другие. Обычно вам не нужно модифицировать этот сценарий. Каталог /etc/rc.d/init.d Подкаталог init.d используется для хранения сценариев, необходимых для всех уровней выполнения. Хранение всех сценариев в одном месте облегчает управление ими. Каждый сценарий используется для запуска/остановки определенной службы — службы имен доменов (DNS), службы Web и т.д. Все эти сценарии следуют специальному синтаксису аргументов командной строки. Например, чтобы запустить службу NFS (сетевая файловая система), вы можете выполнить такой сценарий: /etc/re. d/init.d/nfs start Чтобы остановить ту же самую службу, вы можете выполнить тот же сценарий следующим образом: /etc/гс. d/init.d/nfs

stop

Сценарий nfs получает start и stop в качестве аргументов. Это справедливо для всех сценариев в каталоге, который имеет символьную ссылку на каталог гс [0-6] .d. Сценарий /etc/rc.d/rc Когда init приказывают изменить уровень выполнения на один из возможных уровней выполнения, этот демон выполняет сценарий, определенный в одной из следующих строк в файле /etc/inittab: 10:0:wait:/etc/rc.d/rc 11 :1 :wait: /etc/rc.d/rc 12:2: wait : /etc/rc.d/rc 13:3:wait:/etc/rc.d/rc 14:4:wait:/etc/rc.d/rc

О 1 2 3 4

www.books-shop.com

Процессы начальной загрузки и выключения системы

47

15:5:wait:/etc/re.d/rc 5 16:6:wait:/etc/rc.d/rc 6 Для каждого уровня выполнения (0-6) сценарий /etc/re.d/rc выполняется с уровнем выполнения в качестве аргумента для сценария. Этот сценарий отвечает за запуск и остановку всех служб для желательного уровня выполнения. Например, пусть init приказано изменить уровень выполнение на 3. Он будет выполнять сценарий /etc/rc.d/rc с аргументом 3 в командной строке аналогично строке: /etc/rc.d/rc 3 Сценарий /etc/rc.d/rc показан на листинге 3.3. Листинг 3.3. Сценарий /etc/rc.d/rc #!/bin/bash » » re Этот файл отвечает за запуск/остановку » служб, когда изменяется уровень выполнения. Он также # отвечает за самую первую настройку базовых параметров, таких # как имя хоста. Я # Первоначальный автор: Мигель ван Смууренберг (Miguel van Smoorenburg), ff .

» # Библиотека исходного кода функций. . /etc/re.d/init.d/functions # Теперь найдем, каким является текущий и каким был предыдущий # уровень выполнения. argv1="$1" set '/sbin/runlevel' runlevel=$2 previous=$"l export runlevel previous # Получить первый аргумент. Задать новый уровень выполнения Я равным этому аргументу. [ "$1" != "" ] && runlevel ="$argv1" и Сообщите linuxconf, на каком уровне выполнения мы находимся [ -d /var/run ] && echo "/etc/rc.d/rc$runlevel.d" > /var/run/runlevel.dir # Существует ли каталог гс для этого нового уровня выполнения? if [ -d /etc/re.d/rc$runleve!1.d ]; then 9 Сначала выполните сценарий KILL. for i in /etc/rc.d/rc&runlevel.d/K*; do ff Проверьте, существует ли сценарий. [ ! -f $i ] && continue # He выполняйте сценарий [KS]??foo.{rpmsave,rpmorig} [ "${1%.rpmsave}" != "${1}" ] && continue [ "${1%.rpmorig}" != "${1}" ] && continue и Проверьте, включена ли уже подсистема. subsys=$U»/etc/rc.d/rc$runlevel.d/K??} [ ! -f /var/lock/subsys/$subsys ] && \ [ ! -f /yar/lock/subsys/${subsys>.init ] && continue # Выключите подсистему. $i stop

www.books-shop.com

Глава 3

48

done tt Теперь выполните сценарии START. for i in /etc/re.d/rc$runlevel.d/S*; do № Проверьте, существуют ли сценарии. [ ! -f $i ] && continue tt He выполняйте сценарии [KS]??foo. {rpmsave, rpmorig} [ "${1%.rpmsave}" != "${1}" ] && continue [ "${1%.rpmorig}" != "${1}" ] && continue # Проверьте, включена ли уже подсистема. subsys=${i(f/etc/rc.d/rc$runlevel.d/S??} [ ! -f /var/lock/subsys/$subsys ] | | \ [ ! -f /var/lock/subsys/${subsys}.init ] && continue tt Включите подсистему. $i start done fi Этот сценарий прежде всего делает следующее: 1. Проверяет, существует ли каталог для уровня выполнения, специфицированного аргументом. Другими словами, если сценарий выполняется с аргументом равным, 3, он будет проверять, существует или нет каталог /etc/rc.d/rc3.d/. Если он существует, сценарий перейдет к следующему шагу. 2. На этом шаге сценарий определит, работает или нет какая-либо из программ (часто называемых службами), которые предполагается выполнять на новом уровне выполнения. Если служба уже выполняется, сценарий прекратит работу службы (kill), чтобы он мог перезапустить ее на следующем шаге. Чтобы прекратить выполнение службы, сценарий выполнит необходимый сценарий «К» с аргументом «stop». 3. На этом конечном шаге сценарий гс будет выполнять все сценарии «S» с аргументом «start».

Каталоги /etc/rc.d/rc(0-6).d

Подкаталоги от rcO.d до rc6.d используются для уровней выполнения от О до 6. Эти каталоги содержат символические связи со сценариями в каталоге /etc/re.d/init.d. Каталог rcS.d в моей системе Red Hat Linux 5.2 содержит символьные ссылки, показанные в листинге 3.4.

Листинг 3.4. Список каталога /etc/re.d/rc3.d моей системы Red Hat Linux Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root 1 rwx rwx rwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root Irwxrwxrwx root

root root root root root root root root root root root root root root root root

K05innd -> . . /init.d/innd KlOxntpd -> .../init.d/xntpd K15gpm -> ..//init.d/gpm K15httpd -> ..,/init.d/httpd 20 K15postgresql -> ../init.d/postgresql 20 K20bootpar-amd -> . ./init.d/bootparamd 17 K20rusersd -> .,/init.d/rusersd 16 K20rwalld -> .,/init.d/rwalld 15 K20rwhod -> .../init.d/rwhod 15 K25squid -> .../init.d/squid 19 K34yppasswdd -> .,/init.d/yppasswdd 15 K35dhcpd -> . ./init.d/dhcpd 16 K35ypserv -> ,./init.d/ypserv 18 K45arpwatch -:> ../init.d/arpwatch 15 K5Osnmpd -> .../init.d/snmpd 16 K55routed -> ./init.d/routed 14 15 13 15

www.books-shop.com

49

Процессы начальной загрузки и выключения системы

Irwxrwxrwx root root 15 K75gated -> .,/init.d/gated Irwxrwxrwx root root 16 K87ypbind -> ../init.d/ypbind Irwxrwxrwx root root 16 K96pcmcia -> . ./init.d/pcmcia Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx Irwxrwxrwx

root root root root root root root root root root root root root root root root root

root root root root root root root root root root root root root root root root root

17 17 17 15

16 16

13 15 14 15 13 13 18 18 13 19

11

SOlkerneld -> . ./Ш-t.d/kerneld SlOnetwork -> ../init.d/network S11portmap -> ../init.d/portmap S15nfsfs -> ../init.d/nfsfs S20random -> ../init.d/random SSOsyslog -> ../init.d/syslog S40atd -> ../init.d/atd S40crond -> ../init.d/crond SSOinet -> ../init.d/inet S55named -> ../init.d/named S601pd. -> .../init.d/lpd S60nfs -> ../init.d/nfs S75keytable -> .,/init.d/keytable SSOsendmail -> ../init.d/sendmail S91smb -> ../init.d/smb S991inuxconf -> .,/init.d/linuxconf S991ocal -> ../init.d/local

Сценарии из каталога /etc/rc.d/init.d связаны двумя Например:

способами.

1. К{двузначное_число}{имя сценария} 2. 3{двузначное_число}{имя сценария} Все сценарии, которые имеют в качестве префикса букву «К», выполняются с аргументом «stop», а другой вид выполняется с аргументом «start». Двузначное число используется для задания порядка выполнения. Так сценарий с именем SOlfoo будет выполняться перед SlObar. Эти сценарии «S» и «К» выполняются сценарием /etc/re.d/rc. Когда сценарий гс закончится, обработка, выполняемая ink, также заканчивается, система становится доступной на новом уровне выполнения. Сценарий /etc/rc.d/rc.local Сценарий rc.local обычно выполняется один раз в конце уровней выполнения 2, 3, и 5. Вы можете добавить сюда то, что необходимо выполнить один раз во время загрузки в этот файл.

(

Сценарий /etc/rc.d/rc.serial Подобно сценарию re.local, rc.serial обычно выполняется один раз в конце уровня выполнения 1 или 3, чтобы инициализировать последовательные порты.

Загрузка системы Во время процесса начальной загрузки ink будет сначала выполнять сценарий rc.sysink, а затем выполнять сценарий для используемого по умолчанию уровня выполнения. Он задается в /etc/inittab с помощью такой строки: идентификатор: 3: 1л1т._по_умолчанию: Здесь используемый по умолчанию уровень выполнения задан как 3. Это означает, что ink будет выполнять сценарий, необходимый для перевода системы в многопользовательский режим. Следующая строка определяет, что необходимо выполнять для уровня выполнения 3. 13:3:wait:/etc/rc.d/rc 3 Сценарий гс выполняется с аргументом 3. Этот сценарий будет выполнять все сценарии, чьи имена начинаются с «S» в каталоге /etc/rc.d/rc3.d. Он

www.books-shop.com

50

Глава 3

будет также подставлять «start» в качестве аргумента для каждого из сценариев с префиксом «S». Когда все сценарии типа «S» выполнены, сценарий гс закончится и система станет доступна в используемом по умолчанию режиме выполнения. I Можно переопределить используемый по умолчанию уровень выполнения в приглашении LILO. Например, при желании загрузить систему в однопользовательском режиме, можно определить linux single. Если для загрузки Linux используется метка, отличная от «linux», нужно будет ввести выбранная _метка single, где выбранная _метка является именем соответствующей метки.

Выключение системы

Можно выполнить ink вручную и приказать системе изменить уровень выполнения, указав его в командной строке. Например: init 1

прикажет init изменить текущий уровень выполнения на 1. Другими словами, это остановит систему. Если вы работаете в многопользовательском режиме (уровень выполнения 3), предыдущая команда не очень удачна, так как она не сообщает пользователям системы о предстоящем выключении. Обычно для выключения системы используется команда shutdown. Она посылает широковещательное предупреждающее сообщение всем зарегистрированным пользователям о том, что система изменяет уровень выполнения. Она также предоставляет возможность спланировать операции выключения системы. Команда shutdown работает, приказывая init изменить текущий уровень выполнения системы либо на остановку (halt — 0), либо на перезагрузку (reboot — 6). Например: shutdown -h now

Эта команда будет сигнализировать init о немедленном изменении уровня выполнения на 0 (остановка). v

Отмена выключения системы

!

Команда shutdown позволяет вам запланировать выключение системы на более поздний срок. Например: shutdown +10

задает выключение системы ровно через 10 мин после ввода команды в приглашение оболочки. Теперь может возникнуть необходимость отменить событие выключения системы; в этом случае можно выполнить другую команду shutdown с параметром -с. Например: shutdown



отменит любое запланированное выключение системы.

Перезагрузка сервера

Можно также выполнить init вручную, чтобы перезагрузить ваш сервер. Например: init 6 При работе в многопользовательском режиме (уровень выполнения 3), эта команда не является лучшим подходом, так как она не информирует пользователей системы, что система собирается перезагружаться. Вместо этого вы можете использовать команду shutdown для перезагрузки сервера. Например: shutdown

-г +10

www.books-shop.com

51

Процессы начальной загрузки и выключения системы

Эта команда перезагрузит сервер через 10 мин. Все пользователи получат сообщение о том, что система собирается вскоре перезагрузиться. Это позволит им закончить и сохранить свою работу. Когда используется команда shutdown с задержкой, как только что было описано, пользователи, которые зарегистрированы в системе, увидят предупреждающее сообщение, но shutdown не препятствует кому-либо регистрироваться в системе во время периода обратного отсчета выключения системы. Чтобы запретить новые регистрации в системе, вы можете создать текстовый файл, называемый /etc/nologin с сообщением о том, что уже было спланировано выключение системы, и пользователи должны попробовать зарегистрироваться позже. Не забудьте переименовать или удалить файл после того как вы перезагрузитесь. Если вы перезагружаете сервер удаленно, будьте абсолютно уверены, что вы стерли или переименовали этот файл до реального выключения. Ни одной учетной записи обычного пользователя не разрешается регистрироваться, когда присутствует этот файл. Можно добавить rm -f /etc/nologin в конце сценария /etc/re.local и убедиться, что он выполняется init в конце уровня выполнения 3. Чтобы перезагрузить систему немедленно, можно выполнить: shutdown -г now

Перезагрузка с помощью Ctrl+Alt+Delete

Если вы находитесь у системной консоли, можете использовать для перезагрузки сервера традиционную комбинацию клавиш Ctrl+Alt+Del. Это возможно в связи с наличием следующей строки в /etc/inittab: са::ctrlaltdel:/sbin/shutdown -t3 -r now Эта строка позволяет init поймать комбинацию клавиш Ctrl+Alt+Del и вызвать сценарий shutdown для немедленной перезагрузки. Любой, кто имеет физический доступ к вашей системной консоли, может выключить систему нажимая клавиши Ctrl+Alt+Del. Чтобы защитить себя от такого выключения, можно создать файл с именем /etc/shutdown.allow, содержащий список пользователей (одно имя пользователя в строке), которым разрешено выключать систему. Учетную запись root не нужно вносить в этот файл. Автоматическое выключение при отказе питания ЕСЛИ вы используете источник бесперебойного питания (UPS) для обеспечения резервного источника питания системы, можно использовать init, чтобы аккуратно выключить систему, когда энергия UPS почти иссякла. Используемый по умолчанию /etc/inittab содержит следующую строку: pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; \ System Shutting Down" Эта строка приказывает init выполнить shutdown в случае отказа питания. Действие powerfail активируется, когда программа UPS или powerd (демон мониторинга питания) посылает init сигнал SIGPWR. Используемая по умолчанию конфигурация позволяет системе работать на питании от UPS в течение двух минут, прежде чем она остановится. Если UPS способен поддерживать питание больше или меньше времени, надо изменить это значение. Поскольку вполне возможно, что питание восстановится, прежде чем энергия UPS иссякнет, init может быть вызван для отмены ранее спланированного выключения системы. Это делается с помощью строки в /etc/inittab: рг:12345:powerokwait:/sbin/shutdown -с "Power Restored; \

www.books-shop.com

Глава 3

52

Shutdown Cancelled" Когда init получает сигнал SIGPWR и файл с именем /etc/powerstatus содержит в себе строку «ОК», активируется действие powerokwait.

Управление файлами init

Программа init из System V использует множество файлов, символьных ссылок и каталогов. Чтобы упростить управление файлами init, существует несколько инструментальных средств. Рассмотрим два таких часто используемых средства.

Использование chkconfig для управления уровнями выполнения

Утилита chkconfig позволяет поддерживать различные символьные ссылки, необходимые для служб запуска/остановки на уровне выполнения. Она может управлять конфигурацией уровня выполнения для всех сценариев в каталоге /etc/re.d/init.d.

Перечисление управляемых служб

Чтобы увидеть, какие службы будут запускаться или останавливаться на разных уровнях выполнения, выполните: chkconfig --list Она перечислит все управляемые chkconfig службы и сообщит вам, какие службы собираются запускаться (on) или останавливаться (off) для каждого уровня выполнения. Можно также проверить конфигурацию уровня выполнения для определенной службы, указывая имя службы (т.е. имя сценария в /etc/re.d/init.d) в командной строке, Например: chkconfig --list httpd Предыдущая команда выводит результат на моем сервере Red Hat Linux: httpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off Служба httpd включена для уровней выполнения 2, 3, 4 и 5 и выключена для О, 1 и 6.

Добавление новой службы

ЕСЛИ вы только что добавили новый сценарий в каталог /etc/re.d/init.d и хотите сделать службу, которую он предлагает, доступной для определенного уровня выполнения, можно выполнить команду chkconfig следующим образом: chkconfig --add имя_службы [— level уровень выполнения] Например: chkconfig --add named Эта команда добавит службу, называемую named, к текущему уровню выполнения. Другими словами, она создаст символьную ссылку с префиксом $>{двузначное_число} в каталоге текущего уровня выполнения, что указывает на сценарий /etc/rc.d/init.d/named. При желании добавить службу к уровню выполнения, отличному от текущего, вы можете определить уровень выполнения с помощью параметра —level. Например: chkconfig --level 4 --add named Эта команда добавит службу named к уровню выполнения 4.

Удаление существующей службы

Чтобы удалить существующую службу из уровня выполнения, используйте следующую команду: chkconfig --del имя_службы [--level уровень выполнения]

www.books-shop.com

Процессы начальной загрузки и выключения системы

Например: chkconfig

--del

named

Эта команда удалит службу named из текущего уровня выполнения. Чтобы удалить службу из уровня выполнения, отличного от текущего, используйте параметр —level. Например: chkconfig --del named --level 5 Эта команда удалит службу named из уровня выполнения 5.

Использование ntsysv для управления уровнями выполнения

Утилита ntsysv позволяет включить/выключить различные службы в любом уровне выполнения, используя простой интерфейс с меню. Когда вы выполняете эту команду без аргументов, она покажет экран (см. рис. 3.1).

|Рис. 3.1. Экран ntsysv

Прокручиваемый экран показывает состояние всех служб в текущем уровне выполнения. Чтобы включить службу, необходимо ее выбрать; чтобы выключить службу, надо просто отменить ее выделение. Сделав все изменения, можете их сохранить при помощи кнопки ОК, а отменить изменения можно, щелкнув кнопку Cancel. Если вы хотите работать с конфигурацией другого уровня выполнения, просто укажите уровень выполнения с помощью параметра —level. Например: ntsysv -level 1 Эта команда позволит вам работать с конфигурацией уровня выполнения 1.

Использование linuxconf для управления уровнями выполнения

Вы можете также использовать инструментальное средство linuxconf для конфигурирования уровней выполнения. Следуйте инструкциям: '. 1. Выполните Control —> Control Panel —> Control Service activity 2. Включите или выключите одну или несколько служб 3. Сохраните изменения

4. Активируйте изменения, прежде чем выйдете из linuxconf

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

53

54

Глава 3

Создание новой службы для уровня выполнения

ЕСЛИ вы устанавливаете пакеты серверного программного обеспечения известных поставщиков, скорее всего они предоставят прекрасный пакет RPM, который также содержит необходимый сценарий службы переноса в /etc/rc.d/init.d. Иногда полезное программное обеспечение поставляется не со всеми принадлежностями, и вам придется модифицировать его, чтобы оно работало на вашей системе. В таком случае может понадобиться сценарий службы для вашего нового программного обеспечения. Здесь я покажу, как легко создать новый сценарий службы, который помещается в каталог /etc/rc.d/init.d. Прежде всего посмотрим на существующий сценарий службы из каталога /etc/rc.d/init.d. Листинг 3.5 показывает один такой сценарий с именем httpd. Этот сценарий используется для запуска/останова Web-сервера Apache. Листинг 3.5. /etc/re.d/init.d/httpd #!/bin/sh #

# Сценарий запуска для Wed-сервера Apache # # chkconfig:

345 85 15

# описание: Apache является сервером Web. \ # # # # # #

Он используется для обслуживания processname: httpd pidfile: /var/run/httpd.pid config: /etc/httpd/conf/access.conf config: /etc/httpd/conf/httpd.conf config: /etc/httpd/conf/srm.conf

файлов

HTML

и

CGI.

# Библиотека исходных функций. . /etc/re.d/init.d/functions

# Посмотрим, каково наше название, case "$1" in start) echo -n "Starting httpd: " daemon httpd

echo touch /var/lock/subsys/httpd stop) echo -n "Shutting down http: " [ -f /var/run/httpd.pid ] && { kill 'cat /var/run/httpd.pid' echo -n httpd } echo rm -f /var/lock/subsys/httpd rm -f /var/run/httpd.pid status) status httpd restart) $0 stop $0 start reload)

www.books-shop.com

Процессы начальной загрузки и выключения системы

55

echo -n "Reloading httpd: " [ -f /var/run/httpd.pid ] && { kill -HUP 'cat /var/run/httpd.pid' echo -n httpd > echo

*) echo "Usage: $0 {start | stop | restart | reload | status}" exit 1 esac exit 0 Этот сценарий для sh является простым оператором case (переход по условию). А вот как вы можете создать новый сценарий службы из существующего сценария службы. Предположим, что ваша новая служба называется webmonitor и выполняемый файл хранится в /usr/sbin/webmonitor. Согласно договоренности используют одно и то же имя для сценария и выполняемой программы. Здесь представлена последовательность действий для создания сценария /etc/rc.d/init.d/webmonitor: 1. Скопируйте существующий сценарий из /etc/rc.d/init.d, изменив имя на /etc/rc.d/init.d/webmonitor. Для простоты и облегчения понимания предположим, что вы скопировали сценарий /etc/rc.d/init.d/httpd, показанный на листинге 3.5. 2. Используя текстовый редактор (такой как vi), найдите и замените все экземпляры "httpd" строкой "webmonitor". 3. Если вы держите исполняемый файл в каталогах, отличных от /sbin, /usr/sbin, /bin или /usr/bin, нужно будет изменить строку daemon webmonitor, чтобы отразить путь исполняемого файла webmonitor. Например, если вы храните выполняемый файл в каталоге /usr/local/ . web/bin, измените строку daemon webmonitor на daemon /usr/local/ web/bin/webmonitor. 4. Если /usr/sbin/webmonitor не создает файл PID (/var/run/webmonitor.pid), замените строку kill 'cat /var/run/webmonitor.pid' на killproc webmonitor и удалите строку rm -f /var/run/webmonitor.pid. 5. Выполните chmod 750 /etc/rc.d/init.d/webmonitor для изменения полномочий файла, чтобы пользователь root мог читать, писать и выполнять сценарий. Это все вам нужно сделать для создания новой службы webmonitor. Теперь, используя chkconf, ntsysv или утилиту linuxconf, можно добавить эту новую службу в желаемый уровень выполнения.

www.books-shop.com

www.books-shop.com

Глава 4 Файлы и устройства UNIX

В этой главе: • Полномочия и владельцы файлов, каталогов и связей • Политика полномочий в многопользовательской системе

дна из основных причин неприятия UNIX и похожих на нее операционных систем состоит в том, что пользователи не могут разобраться с управлением файлами и каталогами. Работая системным администратором, я обнаружил, что почти девяносто процентов проблем пользователей связаны с полномочиями файлов и каталогов и вопросами владения. Многие пользователи просто не понимают концепцию владения файлами и полномочий доступа. Однако они не виноваты, поскольку большинство из них перешли на операционную систему, такую как Linux из Microsoft Windows З.хили 9.x (или подобной системы), где концепция владения файлом и полномочий доступа неизвестна (исключением является Windows NT/2000). Поэтому вполне вероятно, что системному администратору Интернет-сервера придется решать много пользовательских проблем, связанных с файлами.

Общие представления о полномочиях файлов/каталогов

Подобно всем операционным системам UNIX, Linux ассоциирует файл или каталог с пользователем и группой. Рассмотрим пример: -rw-rw-r- 1 sheila intranet 512 Feb 6 21:11 milkyweb.txt

Эта строка получена с помощью команды Is -I milkyweb.txt на системе Red Hat Linux. Программа Is показывает список файлов и каталогов. Параметр -1 задает вывод полного описания файла milkyweb.txt. Рассмотрим теперь эту же информацию в виде таблицы 4.1.

www.books-shop.com

Глава4

58

Пример исполнения команды Is -I

Тип информации

Результат вывода

Полномочия доступа к файлу

-rw-rw-r-

Число связей

1

Пользователь (владелец файла)

sheila

Группа

intranet

Размер файла (в байтах)

512

Дата последнего изменения

Feb6

Время последнего изменения

21:11

Имя файла

milkyweb.txt

Файл milkyweb.txt принадлежит пользователю с именем sheila. Она является единственным обычным пользователем, который может изменить полномочия доступа этого файла. Другой пользователь, который может изменить эти полномочия, — это суперпользователь. Группой файла является intranet. Любой пользователь, принадлежащий к группе intranet, может получить доступ (для чтения, записи или выполнения) к файлу на основе того, какие заданы (владельцем) текущие полномочия группы. Чтобы стать владельцем файла, нужно его создать. В системе Red Hat Linux, когда пользователь создает файл или каталог, его группа задается как используемая по умолчанию группа пользователя, она может быть частной группой с тем же именем, что и пользователь. Предположим, я зарегистрировался в системе Red Hat Linux как kabir и, используя текстовый редактор типа vi, создал файл todo.txt. Если выполнить команду Is -I todo.txt, то на экране появится: -rw-rw-r- 1 kabir kabir 4848 Feb 6 21:37 todo.txt Здесь имя владельца файла и имя группы совпадают. Это связано с тем, что в Red Hat Linux используемая по умолчанию (частная) группа пользователя kabir также называется kabir. Это может немного запутать, но позволяет избежать некоторых проблем, к тому же название легко изменить. Однако важно, что при создании нового файла его владельцем является создатель, а группой является используемая по умолчанию группа владельца. Посмотрим, как можно изменить владельца файла. Обычный пользователь не может изменить владельца файла или каталога. Например, я не могу создать файл как пользователь kabir и сделать его владельцем пользователя с именем sheila. Почему это так? Причина в безопасности. Если обычному пользователю разрешить переопределение владельца файлов, кто-то мог бы создать вредоносную программу, которая удаляет файлы, изменяет своего владельца на суперпользователя и стирает всю файловую систему. Только суперпользователь может переопределить владельца файла или каталога. Изменение владельца файлов/каталогов с помощью chown Суперпользователь может изменить владельца файла/каталога, используя команду chown. Для этого следует выполнить команду: chown или Например: chown sheila kabirs_plans.txt Эта команда делает пользователя sheila новым владельцем файла kabirs_ plans.txt. Если суперпользователь захочет изменить группу для файла или каталога, он может использовать команду chown таким образом: chown или

www.books-shop.com

59

Файлы и устройства UNIX

Например: chown

sheila.admin

kabirs_plans.txt

Предыдущая команда не только делает sheila новым владельцем, но также изменяет группу файла на admin. Если суперпользователь захочет изменить владельца файла и/или группу всех файлов либо каталогов в данном каталоге, он может использовать параметр -R команды chown в рекурсивном режиме. Например: chown

-R sheila.admin /home/kabir/plans/

Эта команда изменяет владельца и группу всех файлов и подкаталогов из каталога /home/kabir/plans. Хотя необходимо быть суперпользователем, чтобы изменить владельца файла, обычный пользователь может изменить группу файла или каталога с помощью команды chgrp.

Изменение группы файлов/каталогов с помощью chgrp

Команда chgrp позволяет обычному пользователю изменить принадлежность файла или каталога к группе, если этот пользователь также является членом новой группы. Другими словами, пользователь может изменять группы, только если принадлежит как к старой, так и к новой группам. Например: chgrp httpd «.html

Чтобы выполнить предыдущую команду об изменении группы для всех файлов HTML в каталоге, необходимо быть членом группы httpd. Можно узнать, к каким группам принадлежит пользователь, используя команду groups без аргументов, chgrp, как и команда chown, тоже использует -R, чтобы рекурсивно изменять имена групп одного или нескольких файлов или каталогов. Посмотрим теперь, как к файлам и каталогам применяются полномочия доступа. Существует два способа представления полномочий файлов/каталогов.

Представление полномочий доступа с помощью восьмеричных чисел

Использование восьмеричных чисел для объяснения полномочий доступа файлов/каталогов предполагает анализ каждого бита. Если такой подход по каким-либо причинам не устраивает, можно пропустить этот раздел и перейти к следующему, который объясняет применение тех же самых полномочий с помощью более простой строки доступа. Поскольку для объяснения полномочий доступа будет использоваться не так часто используемая восьмеричная система счисления, вспомним о восьмеричных числах. Восьмеричная система счисления использует восемь цифр вместо обычно используемых десяти. Восьмеричными цифрами являются 0—7 и каждая цифра может быть представлена тремя битами (в двоичной системе). Таблица 4.2 показывает двоичные эквиваленты для каждой восьмеричной цифры. Преобразование восьмеричных чисел в двоичные

Восьмеричное число

Двоичное число

О

000

1

001

2

010

3

011

4

100

5

101

6 _7

110

111

www.books-shop.com

60

Глава 4

Эта таблица будет полезна для анализа полномочий файла/каталога. Рис. 4.1 показывает, как представить полномочия в виде четырех восьмеричных цифр. Здесь первая восьмеричная цифра является самой левой или самой значимой.

• Рис. 4.1. Диаграмма полномочий, использующая четыре восьмеричных цифры Восьмеричное

Первая восьмеричная цифра

Вторая восьмеричная цифра

Третья восьмеричная цифра

Четвертая восьмеричная цифра

4

set-UID

r

r

r

2

s

1

sticky-bit

e

t *

Специальные Пользователь

-

G

х

х

Группа

Другие

I

Как видно на рисунке, первая восьмеричная цифра используется для настройки специальных полномочий, вторая — для задания полномочий владельца файла, третья — для задания полномочий для группы, четвертая цифра используется для задания полномочий для всех остальных пользователей. Когда любая из этих цифр опущена, она считается нулем. Таблица 4.3 показывает несколько примеров указания полномочий. Таблица 4.3. I Значение Примеры значений полномочий полномочий 0400 0440 0444 0644 0755

4755

2755

1755

Объяснение Полномочие только для чтения (г) для владельца файла. Это эквивалентно 400, где пропущенная восьмеричная цифра интерпретируется нулем Полномочия на чтение (г) как для владельца файла, так и для пользователей в группе. Это эквивалентно 440 Полномочия на чтение (г) для всех. Это эквивалентно 444 Полномочия на чтение (г) и запись (w) для владельца файла. Все остальные имеют доступ к файлу только для чтения. Это эквивалентно 644; число 6 получается при сложении 4 (г) и 2 (w) Полномочия на чтение (г), запись (w) и выполнение (х) для владельца файла и полномочия на чтение (г) и выполнение (х) файла для всэх остальных. Это эквивалентно 755; число 7 получается при сложении 4 (г) + 2 (w) + 1 (х), число 5 получается при сложении 4 (г) + 1 (х) То же самое, что и 755 в предыдущем примере, за исключением того, что для этого файла задан бит set-UID. Когда выполняется файл с полномочием set-UID, процесс выполняется с полномочиями владельца этого файла. Другими словами, если для файла задан бит set-UID и его владельцем является пользователь gunchy, то когда файл выполняется, исполняющаяся программа будет иметь полномочия пользователя gunchy. Поэтому, если файл принадлежит root и задан с битом set-UID, то любой, кто сможет выполнить этот файл, получит привилегии суперпользователя. Одной из основных проблем безопасности является ситуация, когда файл пользователя root с заданным битом set-UID может быть изменен кем-то отличным от root. Поэтому будьте очень осторожны при задании бита set-UID Подобно 755, но также задает бит set-GID. Когда такой файл выполняется, он имеет все полномочия группы файла Подобно 755, но также задает бит sticky-bit. Sticky-bit официально известен как режим сохранения текста. Это редко используемое свойство приказывает ОС сохранить образ исполняемой программы в памяти даже после того, как она завершится. Оно направлено извне на сокращение времени запуска большой программы. Вместо задания sticky-bit, лучше попробовать перекодировать приложение, чтобы улучшить общую производительность (если это возможно) ^_^

www.books-shop.com

61

Файлы и устройства UNIX

Принимая решение о подходящем задании полномочий, необходимо определить, какой тип доступа должны иметь пользователь, группа и все остальные, а также рассмотреть вопрос о том, необходимо ли задавать биты set-UID, set-GID или sticky-bit. Когда потребности определены, можно выявить каждую восьмеричную цифру, используя 4 (читать), 2 (писать) и 1 (выполнять), либо иные значения, полученные сложением любых из этих трех чисел. Хотя исчисление полномочий восьмеричными числами может показаться немного трудным, частое использование на практике сделает этот способ вполне привычным. Представление полномочий доступа с помощью строк доступа Теперь рассмотрим метод строк доступа, который проще (предположительно) рассмотренного ранее числового метода. На рис. 4.2 - второй вариант предыдущей диаграммы, но уже для строк доступа.

Рис, 4.2. Диаграмма полномочий, использующая строки доступа

set-UID(s)

read (г)

read(r)

read(r)

set-GID(s)

write (w)

write (w)

write (w)

sticky-bit (t)

execute (x)

execute (x)

execute (x)

Группа (9)

Другие (о)

Специальные Пользователь (u)

Все (а) Каждый тип полномочий представлен с помощью одной буквы (в скобках). Чтобы создать строку полномочий, необходимо указать следующее: • На кого воздействует? Варианты: и (пользователь), g (группа), о (другие) или а (все). • Какой тип полномочий необходимо задать? Варианты: г (чтение), w (запись), х (исполнение), s (set-UID либо set-GID) или t (sticky bit). • Какой тип действия? Другими словами, устанавливаются полномочия или удаляются? При задании полномочий необходимо использовать «+» для добавления, либо «-» для удаления. • Например, чтобы предоставить владельцу файла доступ к файлу для чтения, необходимо определить строку полномочий u+r; а чтобы разрешить всем читать и выполнять файл, будет нужна строка полномочий а+rx. Аналогично, чтобы задать для файла бит set-UID, нужно использовать u+s, а чтобы задать для файла бит set-GID — g+s. Теперь, когда мы познакомились с различными способами задания полномочий файлов и каталогов, посмотрим, как можно применить эти знания с помощью команды chmod. Изменение полномочий доступа файлов/каталогов с помощью chmod Утилита chmod позволяет изменять режимы (полномочий), поэтому она называется chmode. В этой утилите можно использовать восьмеричный или строковый метод. Например: chmod

755

*.pl

Эта команда изменяет полномочия для файлов, оканчивающихся расширением .pi. Каждый из файлов .р! определен для владельца как читаемый, записываемый и выполняемый (7 = 4 [чтение] + 2 [запись] + 1 [исполнение]).

www.books-shop.com

62

Глава 4

Файлы будут также читаемыми и выполняемыми (5 = 4 [чтение] + 1 [исполнение]) для группы и всех остальных пользователей. Можно сделать то же самое, используя строковый метод: chmod

a+rx,u+w

*.pl

Здесь а+гх используется, чтобы разрешить полномочия читать (г) и выполнять (х) для всех (a), a u+w позволяет разрешить владельцу (и) запись (w) в файл. Обратите внимание, что при необходимости использования множества строк доступа каждую пару строк необходимо разделить запятой и что запрещены пробелы между строками полномочий. Если необходимо изменить полномочия для всех файлов и подкаталогов внутри каталога, можно использовать параметр -R для выполнения рекурсивной операции задания полномочий. Например: chmod -R 750 /www/mysite

Здесь восьмеричное значение полномочий 750 задается для всех файлов и подкаталогов каталога /www/mysite.

Специальные замечания о полномочиях каталогов

Задание полномочий для каталога похоже, но не идентично установке полномочий обычных файлов. Существует ряд специальных замечаний о полномочиях каталогов: • Доступ к каталогу только для чтения запрещает команду cd (переход) в этот каталог. Чтобы это сделать, необходимо иметь полномочия для выполнения. • Полномочия только для выполнения позволят получить доступ к файлам внутри каталога, если известны их имена и разрешено читать эти файлы. • Чтобы иметь возможность вывести список содержимого каталога, используя программу типа Is, а также возможность выполнить cd (переход) в этот каталог, нужны полномочия как для чтения, так и для выполнения. • Если имеются полномочия для записи в каталог, можно создать, удалить или изменить любые файлы или подкаталоги внутри этого каталога, даже когда файл или подкаталог принадлежит кому-то другому. Теперь рассмотрим специальный тип файла, называемый символьной ссылкой и связанные с ним полномочия.

Управление полномочиями для связей

Помимо обычных файлов и каталогов, достаточно часто будут встречаться файлы другого типа — связи (ссылки). Связи являются файлами-указателями, которые ссылаются на другие файлы. Связь позволяет создать множество имен для одного файла или каталога. Существуют два типа связей: жесткие и мягкие (символьные) связи (см. следующую главу). Здесь будут рассмотрены полномочия, используемые для ссылок.

Изменение полномочий или владельца жесткой связи

ЕСЛИ изменяются полномочия или владелец жесткой связи, это также изменяет полномочия первоначального файла. Например, рассмотрим следующую команду Is -1: -rw-r-r- 1 root 21 Feb 7 11:41 todo.txt

Теперь, если пользователь root создает жесткую связь (используя командную строку Len todo.txt plan) с именем plan для todo.txt, то команда Is -1 покажет: -rw-r-r- 2 root 21 Feb 7 11:41 plan -rw-r-r- 2 root 21 Feb 7 11:41 todo.txt

www.books-shop.com

Файлы и устройства UNIX

Жесткая связь plan и первоначальный файл todo.txt имеют один и тот же размер файла (показанный в четвертом столбце), а также одинаковые значения полномочий и владельца. Теперь, если пользователь root выполняет команду: chown Sheila plan чтобы сделать владельцем жесткой связи пользователя с именем Sheila, то что изменится? Посмотрим на вывод Is -1 после выполнения этой команды: -rw-r-r- 2 Sheila root 21 Feb 7 11:41 plan -rw-r-r- 2 Sheila root 21 Feb 7 11:41 todo.txt Команда chown изменяет владельца plan, но изменился и владелец todo.txt (исходного файла). Поэтому, когда меняется владелец или полномочия жесткой связи, изменение распространяется и на первоначальный файл. Изменение полномочий или владельца мягкой ссылки Изменение владельца символьной или мягкой связи работает не так. Посмотрим на следующий вывод Is -1: Irwxrwxrwx 1 sheila root 8 Feb 7 11:49 plan -> todo.txt -rw-r-r- 1 sheila root 21 Feb 7 11:41 todo.txt Здесь можно видеть, что файл plan является символьной (мягкой) связью для todo.txt. Предположим теперь, что пользователь root изменит владельца символьной связи следующим образом: chown kabir plan Вывод Is -1 выглядит так: Irwxrwxrwx 1 kabir root 8 Feb 7 11:49 plan -> todo.txt -rw-r-r- 1 sheila root 21 Feb 7 11:41 todo.txt Теперь возникает вопрос, может ли пользователь kabir писать в todo.txt, используя символьную связь (plan)? Ответ будет отрицательным, если каталог, где хранятся эти файлы, не принадлежит kabir. Поэтому изменение владельца мягкой связи работает не так, как при жестких связях. Однако изменение полномочий мягкой связи приведет к тому, что файл, на который указывает ссылка, получит новые параметры. Например: chmod 666 plan Это изменит полномочия файла todo.txt, как показано в листинге Is -1 : -rw-rw-rw- 1 kabir kabir 25 Feb 7 11:52 plan -rw-r-r- 1 sheila root 21 Feb 7 11:41 todo.txt Будьте внимательны со связями, так как задание полномочий и владельца для этих специальных файлов не является очевидным. Создание политики полномочий для многопользовательского сервера Как упоминалось ранее, большинство проблем пользователей на UNIX и подобных ей системах связано с полномочиями файлов. Если что-то работало вчера и позавчера, но внезапно прекращает действовать сегодня, прежде всего необходимо проверить полномочия. Одной из наиболее распространенных причин ошибочных полномочий является учетная запись root. Многие неопытные системные администраторы часто получают доступ к файлам и программам через учетную запись суперпользователя (root). Когда программа выполняется с помощью учетной записи пользователя root, файлы, которые создает такая программа, могут иметь владельцем пользователя root. В этом разделе будут рассмотрены несколько политик полномочий, которые полезны в многопользовательских системах.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

63

64

Глава

4

Задание полномочий конфигурационных файлов пользователей

Домашний каталог каждого пользователя содержит несколько полускрытых файлов, имена которых начинаются с точки. Эти файлы часто используются для выполнения команд при регистрации пользователя в системе. Например, все доступные для пользователя оболочки (csh, tcsh, bash и т.д.) считывают свои параметры из файла с точкой, такого как .cshrc или .bashrc. Если пользователь неаккуратно поддерживает правильное задание полномочий файлов, другой не очень дружественный пользователь может создать для этого наивного пользователя серьезные проблемы. Например, если файл .cshrc одного пользователя доступен для записи другому пользователю, то этот пользователь может сыграть глупую шутку, например, помещая команду logout в начале файла .cshrc, так что первый пользователь будет выходить из системы, как только в ней зарегистрируется. Конечно, глупая шутка может привести к нарушению секретности файлов пользователя в системе. Поэтому за такими ситуациями необходимо внимательно наблюдать, особенно в многопользовательской системе. Можно, например, использовать программу COPS (см. главу 18), чтобы выявить проблемы, связанные с полномочиями. Если в системе существует не очень много пользователей, можно быстро выполнить простую проверку: find /home -type, f -name ".*rc" -exec Is -1 \; Эта команда покажет полномочия всех файлов с точкой в начале (заканчивающихся на «гс», чтобы перечислить только .cshrc, .bashrc и т.д.) в иерархии каталога home. Если домашние каталоги пользователей находятся в /home, эта команда быстро покажет, какие пользователи могут столкнуться с проблемами некорректности полномочий.

Задание для пользователей используемых по умолчанию файлов полномочий

Системный администратор может определить используемые по умолчанию полномочия для всех файлов пользователей, которые находятся в системе. Чтобы задать полномочия по умолчанию для новых файлов, можно применить команду umask: umask

Для того чтобы понять, как работает umask, рассмотрим пример: Предположим, что umask имеет значение 022. Когда создается новый файл, функция создания файла (open) обычно запрашивает полномочия 0666. Однако в таком случае окончательная настройка полномочий файла выполняется системой (см. рис. 4.3). Как видно на рисунке, запрошенные полномочия 0666 объединяются операцией логического «И» с дополнением текущей маски (т.е. 022 становится 755), чтобы результат стал равен 0644, что предоставляет владельцу файла доступ для чтения и записи, но всем остальным дает доступ только для чтения. Чтобы создать используемую по умолчанию маску для полномочий файлов, можно вставить команду umask в глобальный файл ресурсов оболочки /etc, который выполняется после регистрации пользователя в системе и запуска оболочки. Это приведет к выполнению команды umask и предоставит сеансу пользователя используемую по умолчанию маску. Например, если пользователи используют оболочку /bin/csh или /bin/tcsh, можно поместить подходящую команду umask в файл /etc/csh.cshrc.

Задание полномочий выполняемых файлов

Полномочия записи должен иметь только владелец файла программы, которая может выполняться обычными пользователями. Например, файлы программ в /usr/bin должны иметь, такие полномочия, что только root может читать, записывать и выполнять эти файлы, а все остальные могут только читать и выполнять их. Разрешение другим писать в файл программы может создать серьезные проблемы с безопасностью. Например, если

www.books-shop.com

65

Файлы и устройства UNIX

Рис. 4.3. Как система использует umask

Unmask

Полномочия, запрошенные функцией открытия файла ореп()

Восьмеричное представление

о

6

6

0

2

2

000

010

010 1

110

110

110 1

'

Двоичное представление

1

1'

1

1

000

110

110

no i

000

полномочия

0

000

110

6

100

4

Преобразованное значение unmask

100

4

1

(rw-r-r-)

кому-то, кроме root, разрешается писать в программу, такую как /usr/bin/zip, то злоумышленник может заменить настоящую программу zip на троянскую программу, которая нарушит защиту системы и повредит файлы и каталоги. Поэтому необходимо проверять, имеют ли файлы программ в системе надлежащие полномочия. Необходимо регулярно запускать утилиту COPS, чтобы выявлять нарушения защиты (подробнее о COPS см. в главе 18).

*

Задание используемых по умолчанию полномочий файлов для FTP Если для пересылки файлов на сервер многие пользователи используют FTP, то можно контролировать используемое по умолчанию значение umask для сервера FTP, чтобы файлы одного пользователя были недоступны другому. Например, если нужно так указать полномочия, чтобы читать загруженный на Web-сервер с помощью FTP файл смогли только пользователь и его группа, то следует изменить строку in.ftpd в файле /etc/inetd.conf. Эта строка по умолчанию выглядит так: ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -1 -a Чтобы задать используемое по умолчанию значение umask для всех файлов, загружаемых на сервер с помощью FTP, необходимо добавить аргумент -и с соответствующим значением umask. Например, чтобы задать полномочия 640 (rw-r—) для каждого загружаемого на сервер файла, можно присвоить umask значение 026. Поэтому измените предыдущую строку следующим образом: ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -1 -a -u026 Перезапустите сервер inetd (killall -HUP inetd) и перешлите файл с помощью FTP, используя учетную запись пользователя, а затем проверьте правильность установки полномочий. Это полезно в системах, которые действуют как Web-серверы для множества разных клиентов. Если один клиент не должен видеть файлы другого клиента, используйте эту возможность вместе со специальным заданием владельца. Предположим, что все файлы Web-клиентов хранятся в разделе или каталоге /www, где каждый клиентский узел имеет свой собственный каталог

www.books-shop.com

Глава 4

66

(например, /www/myclientl, /www/myclient2 и т.д.). Для каждого клиента, вероятно, уже выделена учетная запись FTP для загрузки файлов в эти каталоги. Теперь, чтобы запретить клиенту просмотр файлов другого клиента, используйте umask, как описано для сервера FTP, и измените также владельца каждого клиентского сайта следующим образом: chown -R

Например, если Web-сервер выполняется как «httpd» и присутствует пользователь-клиент с именем myclient, тогда предыдущая команда будет выглядеть следующим образом: chown

-R

myclient.httpd

/www/myclient

Эта команда изменит владельца каталога /www/myclient вместе со всеми его подкаталогами и файлами на myclient (пользователь) и httpd (группа). Это делается, чтобы разрешить пользователю-клиенту владеть, модифицировать и удалять свои файлы, а также позволит Web-серверу читать файлы в каталоге. Однако, чтобы запретить это всем остальным, необходимо изменить полномочия следующим образом: chmod

-R

2770

Для текущего примера реальная команда выглядит таким образом: chmod -R 2770 /www/myclient

Эта команда задает полномочия всех файлов и каталогов для /www/inyclient равными 2770, что позволяет владельцу (myclient) и пользователю Web-сервера (httpd) читать, писать и выполнять данные файлы/каталоги. Она также гарантирует, что после создания новые файлы получат такие полномочия, которые позволят Web-серверу читать эти файлы. Это делается с помощью разряда set-GID (2).

Работа с файлами и каталогами

В этом разделе будет показано, как работать с файлами, используя различные служебные программы системы Red Hat Linux.

Просмотр файлов и каталогов

Команда Is широко используется на любой UNIX или UNIX-подобной платформе. Наиболее часто используемыми параметрами для Is являются -1 (длинный список), -а (все файлы, включая имена файлов, начинающиеся с точки), -1 (список в один столбец только из имен файлов) и -R (рекурсивный список).

Навигация и перемещение в каталогах

Не менее популярной является команда cd, которая в действительности является встроенной командой оболочки. Если не задавать имя какого-нибудь каталога в качестве аргумента, команда cd вернет пользователя в домашний каталог учетной записи, которая используется в данный момент. Когда возникает сомнение, где в файловой системе находится пользователь в данный момент, можно использовать команду pwd, выводящую имя текущего каталога.

Определение типа файла

В отличие от операционной системы Microsoft Windows, Linux не полагается на расширения файлов для определения типа файла. Чтобы определить тип файла, можно воспользоваться утилитой file. Например: file /usr/bin/file

Эта команда покажет, каким типом файла является /usr/bin/file. Вот пример результата выполнения команды:

(сам)

файл

/usr/bin/file: ELF 32-bit LSB executable, Intel 80386, \ version 1, dynamically linked, not stripped

www.books-shop.com

67

Файлы и устройства UNIX

Просмотр статистики доступа к файлу или каталогу Можно использовать программу stat, чтобы получить статистику о файле или каталоге. Например: stat /tmp покажет статистику доступа к каталогу /tmp. Вот пример вывода результата: File: "/tmp" Size: 2048 Filetype: Directory Mode: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root) Device: 3,0 Inode: 16321 Links: 22 Access: Sun Feb 7 02:00:35 1999(00000.00:01:11) Modify: Sun Feb 7 02:01:01 1999(00000.00:00:45) Change: Sun Feb 7 02:01:01 1999(00000.00:00:45) Копирование файлов и каталогов Для копирования файлов из одного места в другое используется команда ср. Например: ср /some/important.txt /new/place/ Эта команда копирует файл important.txt из каталога /some в каталог /new/place. Можно также указать имя файла в новом месте. Обычно для ср используется параметр -f, который позволяет принудительно скопировать файл в то место, где существует другой файл с таким же именем. Например: р -f /some/important.txt /new/place Эта команда копирует файл important.txt, даже если файл с таким же именем уже существует в каталоге /new/place. Чтобы скопировать каталог вместе со всеми его файлами и подкаталогами, используйте: ср -г Например: ср -г /tmp/foo /zoo/foo Перемещение файлов и каталогов Чтобы переместить файлы и каталоги, используйте команду mv. Например: mv /filel /tmp/file2 Эта команда перемещает /filel в /tmp/file2. Аналогично можно переместить каталог вместе со всем его содержимым. Обратите внимание, что mv не перемещает каталоги между различными файловыми системами. Чтобы это сделать, используйте для копирования каталога в новую файловую систему команду ср с параметром -г, а затем удалите каталог (см. ниже) в текущем месте.

Удаление файлов и каталогов

Чтобы удалить файл или каталог, используйте команду rm. Например:

rm filename Эта команда удаляет файл. Если используется оболочка /bin/tcsh, можно взять псевдоним rm, заданный следующим образом: alias rm rm -i В этом случае параметр -i заставляет команду вывести предупреждение, прежде чем действительно что-то удалить. Можно явно использовать параметр -i. С другой стороны, можно применить параметр -f, чтобы выполнить принудительное удаление. Для удаления каталога, необходимо указать параметр -г. Например:

www.books-shop.com

68

Глава 4

rm -rf directory Эта команда удаляет все файлы и подкаталоги внутри указанного каталога.

Поиск файлов

Для того чтобы найти файл, можно использовать различные команды. Чтобы найти точный путь доступа программы, можно использовать команду which. Например: which httpd

Эта команда покажет полностью определенное (специфицированное) имя пути доступа программы httpd, если она вообще доступна. Некоторые оболочки имеют встроенную команду which, а другие используют /usr/sbin/which. Можно также найти файл или каталог программой locate по частичному или полному имени. Например: locate netpr.pl Эта команда будет запрашивать базу данных имен файлов updatedb и возвращать все записи, где встретится файл netpr.pl. Чтобы locate работала правильно, необходимо иметь задание сгоп, настроенное на ежедневное или еженедельное выполнение утилитой updatedb. Другой очень мощной программой, которую можно использовать для поиска файлов или каталогов, является find (см. главу 5).

Переопределение используемой по умолчанию маски полномочий

Системный администратор может задать маску полномочий по умолчанию в глобальном файле ресурсов для используемой оболочки. Например, для оболочки /bin/tcsh системный администратор командой umask может задать в файле /etc/csh.cshrc используемые по умолчанию полномочия файлов. Если необходимо переопределить маску используемых по умолчанию полномочий, можно выполнить umask из командной строки, чтобы изменить используемую по умолчанию маску. Например: umask

222

Эта команда задает используемую по умолчанию маску полномочий, разрешающую только чтение. Другими словами, она отключает полномочия записи у пользователя, группы и всех остальных. Она будет также переопределять системные параметры, используемые по умолчанию для оболочки. Однако это изменение является временным: если пользователь выйдет из системы и вновь зарегистрируется в ней, то восстановятся используемые по умолчанию системные параметры. Если вас не устраивает маска полномочий системы, сообщите об этом системному администратору и поместите подходящую команду umask в файл ресурсов оболочки. Например, если необходимо, чтобы маска была равна 222, причем используется оболочка /bin/tcsh, то можно поместить эту команду в файл -/.cshrc, чтобы при каждом входе в систему umask переопределяла используемые по умолчанию системные параметры.

Использование специальных полномочий файловой системы ext2

Файловая система ext2, используемая в Red Hat Linux, предоставляет некоторые уникальные свойства. Одно из этих свойств запрещает изменение файла даже пользователю root. Например:

chattr +i filename Эта команда задает атрибут «i» файла в файловой системе ext2. Когда задан этот атрибут, никто не может изменить, удалить или переименовать файл. Невозможно также добавить никакие связи для указания на этот файл. Данный атрибут может быть задан или сброшен только пользователем root и

www.books-shop.com

Файлы и устройства UNIX

69

его можно использовать для защиты от случайных искажений файла. Когда нужно очистить этот атрибут, выполняется: chattr -i filename Другие интересные свойства системы ext2, такие как атрибут undelete, еще не реализованы, но станут доступны в будущей версии файловой системы ext2. При использовании команды chattr, иногда возникают ситуации, когда невозможно изменить или удалить файл, хотя полномочия для этого есть. Это происходит, если ранее с помощью команды chattr был задан атрибут неизменяемости файла. Так как команда Is этот атрибут не показывает, возникают странные ошибки. Чтобы увидеть, какие атрибуты ext2 имеют файлы, можно использовать программу Isattr.

www.books-shop.com

www.books-shop.com

Глава 5 Повседневные команды

В этой главе: * Командная строка Linux • Оперативные справочные man-страницы « Как работают различные команды Linux

перационная система Linux, как и любая другая система UNIX, имеет сотни команд. Так как практически невозможно запомнить особенности работы каждой команды, в системе существует оперативное справочное руководство (известное как man-страницы). Пользователь всегда может увидеть подробное описание команды на ее man-странице. Однако man-страницы часто бывают не очень понятны и слишком длинны. Большинство из них не содержит хороших примеров использования. Подробность изложения может иногда ошеломить. Кроме того, не зная названия команды, невозможно найти о ней информацию. Именно поэтому в данной главе собраны команды, которые используются ежедневно. Глава состоит из разделов, чтобы похожие команды можно было найти под общим заголовком. Например, если нужно найти команду, которая работает с файлами и каталогами, можно перейти к разделу «Общие команды для файлов и каталогов», а если нужна команда, которая сжимает файлы, можно посмотреть команды, перечисленные в разделе «Команды сжатия и архивации файлов».

Общее представление о командной строке UNIX

Большая часть работы с системой Linux состоит из последовательного ввода команд. Эти команды следуют установленным правилам, общеизвестным как синтаксис командной строки. Если не следовать синтаксису, команда может выполниться неправильно и в результате возникнут проблемы.

www.books-shop.com

Глава 5

72

Когда с клавиатуры вводится команда, вся строка называется командной. Наиболее часто команды используются по одной. Однако командная строка может содержать несколько команд, если они разделены символом «точка с запятой». Можно сначала очистить экран, а затем вывести оглавление текущего каталога с помощью одной командной строки, вводя: clear; Is Сначала дается имя команды, за ним может следовать другая информация. Объекты, которые следуют за именем программы, называются аргументами. Например, вводится командная строка: we -1 doc.txt В этом примере присутствуют два аргумента, -1 и doc.txt. Программа самостоятельно определяет, как будут использоваться эти аргументы. Существуют два типа аргументов: задающие режим работы команды и параметры. Режимы команды следуют сразу после имени программы и обычно имеют в качестве префикса тире (символ «минус»). Параметры идут после режимов команды. В предыдущем примере -1 является режимом, приказывающим we подсчитать число строк, a doc.txt — параметром, указывающим, какой файл будет использован. При вводе команд в командной строке помните, что аргументы зависят от регистра символов, так же как и имена файлов в UNIX. Общий синтаксис команды UNIX:

Основы использования метасимволов Когда используются команды для работы с файлами и каталогами, можно использовать специальные символы, называемые метасимволами (wildcards), для определения шаблонов имен файлов. Например, чтобы перечислить все файлы в текущем каталоге, которые заканчиваются на .с, используйте: Is *.с

Символ звездочки является метасимволом. Оболочка интерпретирует шаблон и заменяет его всеми именами файлов, которые заканчиваются на .с. Таблица 5.1 демонстрирует наиболее распространенные метасимволы. •Таблица 5.1. Широко используемые метасимволы

Метасимвол

Значение

*

Соответствует любой последовательности из одного или нескольких символов

?

Соответствует любому одиночному символу [ ]

[

]

Соответствует одному из заключенных в скобки символов или символу из указанного диапазона

В таблице 5.2 показано несколько примеров использования метасимволов, чтобы получить представление о том, как они работают. Примеры использования метасимволов

Пример Jo* Jo*y Ut*l*s.c

Значение Файлы, имена которых начинаются с Jo Файлы, имена которых начинаются с Jo и заканчиваются на у Файлы, имена которых начинаются с Ut, содержат 1, а заканчиваются на S.C

?.п

Все файлы с именами из одной буквы, за которой следует . h

Doc[0-9].txt

Файлы с именами Doc0.txt, Doc1.txt, ... , Doc9.txt

DocO[A-Z]. txt

Файлы с именами DocQA.txt, DocOB.txt

DocOZ.M

Использование метасимволов упрощает выбор нескольких объектов.

www.books-shop.com

73

Повседневные команды

Основы использования регулярных выражений Регулярные выражения используются различными командами UNIX. Они предоставляют удобный и единообразный способ описания шаблонов соответствия. Регулярные выражения похожи на метасимволы, за исключением тех, которые предоставляют больше возможностей. Они используются несколькими командами UNIX, включая ed, sed, awk, grep и в ограниченных пределах vi или emacs. Специальные символы, перечисленные в таблице 5.3, являются типичными для регулярных выражений в целом. Если разобраться с ними, то останется изучить только несколько дополнительных вариантов, кргда понадобится. Габлица 5.3. Специальные символы регулярных выражений

Символ

Значение Соответствует любому одиночному символу, кроме символа новой строки Соответствует нескольким предыдущим символам или ни одному из них Соответствует началу строки Соответствует концу строки Соответствует началу слова Соответствует концу слова Соответствует одному из заключенных в скобки символов или диапазона символов Соответствует любому символу, который не заключен в скобки Явно взять следующий символ

$ \< \> [ ] ["]

_^

Внутри регулярного выражения любой символ, не имеющий специального значения, изображает сам себя. Например, чтобы найти строки, которые содержат «foo» в файле data.txt, используйте: grep foo data.txt Чтобы найти только те строки в data.txt, которые начинаются со слова «foo», используйте: grep "foo'

data.txt

Использование одиночных кавычек приказывает оболочке оставить только символы в кавычках и передать их программе. Одиночные кавычки необходимы при использовании любого из специальных символов. Знак доллара указывает, что нужно найти соответствие шаблону в конце строки: grep 'hello$' data.txt Результатом поиска соответствия по предыдущему регулярному выражению станут любые строки, заканчивающиеся на «hello». Чтобы искать по шаблону, который начинается с указанного слова, используйте \|>]

[файл-получатель]

Команда cat выводит содержимое файла на stdout (поток стандартного вывода. — Прим. ред.). Полезно проверить содержимое файла, используя команду cat. Аргумент, передаваемый в cat, является файлом, который необходимо просмотреть. Чтобы увидеть содержимое файла name, выполним: cat name Kiwee

Joe Ricardo Charmaine Команда cat может соединить в один несколько существующих файлов:

cat name"! name2 патеЗ > allnames Этот пример соединяет файлы с именами namel, name2 и патеЗ, чтобы создать файл allnames. Порядок соединения устанавливается порядком файлов, вводимых в командной строке. Используя cat, можно добавлять файл к другому существующему файлу. Например, если в предыдущей команде не добавлен names4, то можно устранить ошибку и получить нужный результат, выполнив cat names4 » allnames что добавит names4 в allnames. chmod Синтаксис: chmod [-R] Эта команда используется для изменения режима полномочий файла или каталога. Режим полномочий определяется как трех- или четырехзначное восьмеричное число. Например:

www.books-shop.com

76

Глава 5

chmod

755 myscript.pl

Команда изменяет полномочия сценария myscript.pl на 755 (rwxr-xr-x), что позволяет владельцу файла читать, записывать и выполнять, но всем остальным — только читать и выполнять. Вот другой пример: chmod -R 744 public_html Эта команда будет изменять полномочия каталога public_html и всего его содержимого (файлов и подкаталогов) на 744 (nvxr—г—), что относится к типичным полномочиям для личных каталогов Web, к которым можно получить доступ на рервере Apache, используя URL http://server/~username. Параметр -R приказывает chmod рекурсивно изменять полномочия для всех ! файлов и каталогов в упомянутом каталоге. chown Синтаксис: chown [ -fhR ] [ : Группа ] { Файл .

. | Каталог . . . }

Команда chown изменяет владельца файла, указанного параметром «Файл», на пользователя, указанного параметром «Владелец». Значением параметра «Владелец» может быть идентификатор (ID) пользователя или имя регистрации, находящееся в файле /etc/passwd. При желании можно также определить группу. Значением параметра «Группа» может быть идентификатор (ID) группы или имя группы, которое находится в файле /etc/group. Только пользователь root может изменить владельца файла. Изменить группу файла может пользователь root или владелец этого файла. Владелец файла, не являющийся пользователем root, может изменить группу только на ту группу, членом которой он является. Таблица 5.5 содержит параметры команды chown. Параметр -f -л -В

Описание Подавляет все сообщения об ошибках, кроме сообщений об использовании Изменяет владельца встретившейся символьной ссылки, но не владельца файла или каталога, на которые она указывает Спускается рекурсивно по каталогам, изменяя владельца для каждого файла. Когда встречается символьная ссылка, которая указывает на каталог, изменяется владелец этого каталога, но блокируется дальнейшее распространение изменения

Следующий пример изменяет существующего владельца файла на другого пользователя: chown bert hisfile.txt clear Синтаксис: clear Команда clear очищает терминал и возвращает приглашение командной строки в верхнюю часть экрана.

стр Синтаксис: cmp [-Is] filel file2 Эта команда будет сравнивать содержимое двух файлов. Если различий между ними нет, стр по умолчанию ничего не выводит. Чтобы продемонстрировать это, пусть файл filel.txt содержит:

this is file 1 the quick brown fox jumps over the lazy dog.

www.books-shop.com

Повседневные команды

77

и файл file2.txt содержит: this is file 2 the quick brown fox jumps over the lazy dog. Единственное различие между двумя файлами заключено в последнем символе первой строки. В одном файле символом является «1», а в другом файле — «2». стр file1.txt file2.txt file1.txt file2.txt differ: char 14, line 1 стр правильно идентифицировала символ 14, строки 1 как несовпадающий символ двух файлов. Параметр -1 будет печатать номер байта и различающиеся значения байтов файлов.

стр -1 file1.txt file2.txt 14 61 62 Результаты этого примера показывают, что в байте 14 есть различие, при этом первый файл имеет восьмеричное 61-, а второй файл имеет в этом месте восьмеричное 62. Наконец, команда с параметром -s не будет ничего показывать. Параметр -s будет возвращать только статус выхода, указывающий на сходство между файлами. Если файлы одинаковы, то возвращается 0 (ноль). Если файлы различны, то возвращается 1. Наконец, когда происходит ошибка, возвращается число > 1 (больше чем 1).

ср

Синтаксис:

ср [-R]

1

Используйте команду ср, чтобы сделать точную копию файла. Команда ср требует по крайней мере два аргумента. Первым является'файл, который нужно скопировать, а второй аргумент — это место или имя файла. Если второй аргумент определяет существующий каталог, ср скопирует исходный файл в этот каталог с именем файла приемника. ср main.с main.c.bak Этот пример копирует существующий файл main.с и создает новый файл, называемый main.c.bak в том же каталоге. Эти два документа будут идентичными, бит в бит.

cut Синтаксис: cut [-cdf список] Команда cut извлекает столбцы данных. Данные могут быть в байтах, символах или полях из каждой строки файла. Например, файл с именем names содержит информацию о группе людей. Каждая строка содержит данные об одном человеке: Fast Freddy:Sacramento:СА:111-111-1111 Joe Some:Los Angeles:CA:222-222-2222 Drake Snake:San Francisco:CA:333-333-3333 Bill Steal:New York:NY:444-444-4444

'

Чтобы перечислить имена и телефонные номера всех людей из файла, достаточно указать параметры -f и -d: cut -f 1,4 -d

:

names

Fast Freddy:111-111-1111 Joe Some:222-222-2222 Drake Snake:333-333-3333

www.books-shop.com

78

Глава 5

Bill Steal: 444-444-4444

Параметр «-f список» определяет поля, которые выбираются для вывода. Поля указываются параметром -d. В последнем примере -d : означает, что каждое поле отделено двоеточием. Использование : в качестве ограничителя поля делает поля 1 и 4 полями «имя» и «номер телефона». Для показа содержимого определенного столбца используйте параметр «-с список». cut -с 1-5 names

Fast Joe Drake Bill Последний пример показывает, как вывести только столбцы символов с 1 по 5 в файле с именем names. diff Синтаксис: diff

[-iqb]

Команда diff используется для определения различий между файлами и/или каталогами. По умолчанию diff не создает никакого вывода, если файлы идентичны. Команда diff отличается от команды стр способом, которым сравниваются файлы, diff сообщает о различиях между двумя файлами построчно, а стр сообщает о различиях между двумя файлами посимвольно. В результате diff лучше подходит для сравнения двоичных файлов. Для текстовых файлов стр в основном используется, когда необходимо знать, одинаковы файлы или нет. Чтобы проиллюстрировать различие между посимвольным и построчным сравнением, представьте, что произойдет, если в начало файла будет добавлен единственный символ новой строки. Если этот файл затем сравнивается с другим во всех отношениях идентичным файлом за исключением отсутствия символа новой строки в начале, diff сообщит, что к файлу была добавлена пустая строка, в то время как стр укажет, что два файла различаются практически всеми символами. Обычный формат вывода состоит из одного или нескольких фрагментов различий; каждый фрагмент показывает одну область различий между файлами. Типичный формат фрагмента выглядит так: Команда изменения (change-command) < от строки файла < от строки файла. > до строки файла > до строки файла.

Существуют три типа команд изменения. Каждая команда состоит из номера строки или разделенного запятыми диапазона строк в первом файле, одной буквы, указывающей вид выполняемого изменения и номера строки или разделенного запятыми диапазона строк во втором файле. Все номера строк являются первоначальными номерами строк в каждом файле. Типы команд изменения: • 'lar' Добавляет строки в диапазоне г второго файла после строки 1 первого файла. Например, '8а12Д5' означает добавить строки 12-15 второго файла после строки 8 первого файла; или, если преобразовывать второй файл в первый, — удалить строки 12-15 второго файла. • ' f ct ' Заменяет строки в диапазоне f первого файла строками в диапазоне t второго файла. Это похоже на объединенное добавление и

www.books-shop.com

Повседневные команды

79

удаление, но более компактно. Например, '5,7с8,10' означает изменить строки 5-7 первого файла на строки 8-10 второго файла; или, если преобразовывать второй файл в первый, — изменить строки 8-10 второго файла на строки 5-7 первого файла. • ' rdl' Удаляет строки в диапазоне г из первого файла; строка 1 соответствует месту, где они должны были бы появиться во втором файле, если бы они не были удалены. Например, '5,7d3' означает удалить строки 5-7 первого файла; или, если преобразовывать второй файл в • первый файл, — добавить строки 5-7 первого файла после строки 3 второго файла. Пусть a.txt содержит а b с d е

, ,

и b.txt содержит с d е f

g Команда diff выведет: 1,2dO

< а < b 5а4,5 > f

> g Команда diff формирует результат, показывающий, как различаются файлы и что необходимо сделать, чтобы файлы стали идентичными. Обратите внимание, что 'с' является первым общим символом двух файлов. Первая строка равна l,2dO. Это интерпретируется как удаление строк 1 и 2 первого файла (строки а и Ь). Четвертая строка показывает 5а4,6. Здесь 'а' означает «добавить». Если строки с 4 по б второго файла добавить после строки 5 первого файла, то файлы станут идентичны. Команда diff имеет несколько часто используемых параметров. Параметр -i игнорирует изменения регистра символов. Команда diff -i рассматривает символы верхнего и нижнего регистров как эквивалентные. Параметр -q сообщает, различаются ли вообще файлы. diff -q a.txt b.txt Files a.txt and b.txt differ

Параметр -b игнорирует изменения в пробелах. Фраза «the foo» будет эквивалентна «the foo», если используется параметр -Ь.

du

Синтаксис:

du [-ask]

Эта команда предоставляет итоговую информацию об использовании дискового пространства. При указании каталога du сообщит об использовании дискового пространства этого каталога и любых подкаталогов, которые он содержит. Если имя файла или каталога не определено, du выведет сведения о текущем каталоге. Команда du -а разделит суммарное значение и покажет размер каждого каталога и файла. Параметр -s позволит показать только

www.books-shop.com

Главе .

80

итоговое значение. Другим полезным параметром является -k. Этот параметр приводит к выводу размеров всех файлов в килобайтах. Далее представлены несколько примеров использования различных параметров:

du -a 247 130 114 492 du -s 492

./util-linux_2.9e-0.1.deb ./Iibncurses4_4.2-2.deb ./slangl_1.2.2-2.deb

.

emacs Программа emacs, полноэкранный текстовый редактор, является одним из лучших текстовых редакторов. Он известен своей гибкостью и мощностью, а также неумеренным использованием ресурсов. Мощность emacs достигается не простой ценой. Существует необходимая процедура обучения, которая Требует терпения и еще раз терпения. Для выполнения некоторых действий могут использоваться комбинации, состоящие из четырех последовательных клавиш. Однако emacs может делать почти все. Помимо основных операций редактирования, emacs поддерживает выделение синтаксиса, макросы, одновременное редактирование множества файлов, проверку правописания, почту, FTP и многие другие свойства. При чтении документации по emacs часто встречаются такие слова как meta-Key и С-х. Meta-key является мета-клавишей (если она есть на клавиатуре), В других случаях обычно используется клавиша Esc. С-х определяет синтаксис для совместного нажатия Ctrl с клавишей х. Любая комбинация «С-» имеет отношение к клавише Ctrl. Для нового пользователя важнее всего две комбинации клавиш emacs — С-х С-с и C-h C-h. Первая комбинация служит для выхода из emacs. Многие люди отказалось от emacs просто потому, что в первый раз не смогли выйти из программы. C-h C-h дает оперативную справку, объясняющую операции редактора и предоставляющую подробную информацию о его командах. Таблица 5.6 показывает наиболее часто используемые команды emacs. fgrep Команда fgrep была создана, чтобы ускорить поиск по сравнению с программой grep. Однако она может искать только точно указанные символы, а не общие спецификации. Имя fgrep означает «fixed character grep» (grep для определенных символов). В настоящее время компьютеры и память работают достаточно быстро, поэтому необходимость в fgrep возникает редко.

file

Синтаксис:

file Команда file определяет тип файла. Если файл не является стандартным, его тип файла не определен. Именно так определены типы файлов — каталог, FIFO, блочный специальный и символьный специальный. Если файл является стандартным и его длина равна нулю, он считается пустым. Если файл является текстовым, file проверяет первые 512 байт и пытается определить язык программирования. Если файл является выполняемым a.out, file печатает номер версии при условии, что он больше 0. file main. С main. С: с program text find Синтаксис: find [путь] [-type fdl] [-name шаблон] [-atime [+-] число дней]

www.books-shop.com

... .**'

Повседневные команды

Наиболее часто используемью команды emacs

Команда

Результат

C-v

Переместиться вперед на один полный экран

M-v

Переместиться назад на один полный экран

С-р

Переместить курсор на предыдущую строку

С-п

Переместить курсор на следующую строку

C-f

Переместить курсор вправо на одну позицию

C-b

Переместить курсор влево на одну позицию

M-f

Переместиться на одно слово вперед

M-b

Переместиться на одно слово назад

C-a

Переместиться к началу строки

C-e

Переместиться к концу строки

M-a

Переместиться назад к началу предложения

M-e

Переместиться вперед к концу предложения

Удалить символ перед курсором

C-d

Удалить следующий символ после курсора

M-

Удалить слово непосредственно перед курсором

M-d C-k M-k C-x

Удалить слово, следующее после курсора

C-xC-f

Открыть другой файл

C-x C-s C-x C-w C-xs C-x C-c

Удалить от позиции курсора до конца строки Удалить до конца текущего предложения Отменить предыдущую команду Сохранить текущий файл Сохранить текущий файл под другим именем Сохранить все буферы, которые были недавно изменены Выход из emacs

[-exec команда {} \ ;] [-empty] Команда find ищет файлы и каталоги. Например: find . -type d Команда find возвращает имена всех подкаталогов текущего каталога. Параметр -type равен d (для каталогов), f (для файлов) и 1 (для связей). find . -type f -name "*.txt" Эта команда найдет в текущем каталоге (включая подкаталоги) все текстовые файлы, заканчивающиеся расширением .txt. find . -type f -name "*.txt" -exec grep -1 'magic' {} \; Эта команда будет искать во всех текстовых файлах с расширением .txt в текущем каталоге, включая все его подкаталоги, ключевое слово «magic» и возвращать имена таких файлов (так как -1 используется с командой grep). find . -name "*.gif" -atime -1 -exec Is -1 {> \; Эта команда будет искать все файлы GIF, к которым был доступ за последние 24 часа, и покажет информацию о них с помощью команды Is -I. find . -type f -empty Эта команда покажет все пустые файлы в иерархии текущего каталога. grep Синтаксис: grep [-viw]

www.books-shop.com

82



Глава 5

Команда grep позволяет искать в одном или нескольких файлах определенную комбинацию символов. На экран терминала выводится каждая строка каждого файла, которая содержит эту комбинацию. Команда grep полезна, когда в нескольких файлах необходимо найти определенные слова или фразы. Используя параметр -v, можно выполнить обратное действие. Например, если нужно выбрать строки в data.txt, которые не содержат слово «the»: grep -vw 'the' data.txt Если бы не было параметра -w, то подошло бы любое слово, содержащее «the», такое как «toge[the]r». Параметр -w определяет, что комбинация должна быть целым словом. Параметр -i игнорирует при Поиске различия между символами верхнего и нижнего регистров. Большая часть гибкости grep проистекает из того факта, что можно определять не только точные символы, но более общие комбинации для поиска. Для этого необходимо использовать «регулярные выражения». head Синтаксис: head [-счетчик | -п число] имя файла Эта команда покажет первые несколько строк файла. По умолчанию выводятся первые 10 строк файла. Однако можно использовать специальный параметр для определения иного значения. head -2 doc.txt и Outline of future projects » Last modified: 02/02/99 Этот пример показывает, как увидеть первые две строки текстового файла doc.txt.

In

Синтаксис:

In [-s] In создает два типа связей (ссылок), жесткие и мягкие. Связь можно считать дополнительным именем файла. Когда связь создана, она неотличима от первоначального файла. Файл, который имеет жесткие связи, невозможно удалить с жесткого диска, пока не удалены все связи. Жесткие связи создаются без параметра -s. In ./www . /public_html Однако жесткая связь имеет ограничения. Жесткая связь не может соединяться с другим каталогом и с файлом в другой файловой системе. Используя параметр -s, можно создать мягкую связь, которая снимает эти ограничения. In -s /dev/fs02/jack/www /dev/fs01/foo/public_html Здесь создается мягкая связь между каталогом www файловой системы fs02 и вновь созданным в файловой системе fsOl файлом public_html . locate Синтаксис: locate Команда locate устанавливает путь доступа к определенному файлу или команде и находит точное соответствие или подстроку. Например: locate foo /usr/lib/texmf/tex/latex/misc/footnpag. sty /usr/share/automake/footer. am /us r/sha re/games/ fоrtunes/f ood /usr/share/games/fortunes/food,dat

www.books-shop.com

83

Повседневные команды

/usr/share/gimp/patterns/moonfoot.pat

;

Результат работы locate будет содержать ключевое слово «foo» в абсолютных путях доступа или вообще ничего не покажет.

Is

Синтаксис:

Is [-laR1] Команда Is позволяет выводить список файлов и подкаталогов указанного каталога. Это одна из наиболее часто используемых программ. Когда она используется с параметром -1, выводятся только имена файлов и каталогов в текущем каталоге; когда используется параметр -1, выводится длинный список, содержащий информацию о полномочиях файлов/каталогов, размер, дату изменения и т.д.; параметр -а позволяет увидеть все файлы и каталоги (включая те, которые имеют ведущую точку в своих именах) в текущем каталоге; параметр -R позволяет команде рекурсивно выводить содержимое подкаталогов, если они существуют. mkdir Синтаксис: mkdir ' При создании каталога используется команда mkdir. Существуют только два ограничения на выбор имени каталога: (1) имена файлов могут быть длиной до 255 символов и (2) имена каталогов могут содержать любые символы, кроме /. fflkdir dirl dir2 dir3 Этот пример создаст три каталога, все в текущем каталоге, при условии, что в текущем каталоге предоставлены полномочия для записи.

mv Синтаксис: mv

[-if]



Используйте команду mv для перемещения или переименования каталогов и файлов. Команда будет выполнять перемещение или переименование в зависимости от того, является существующим каталогом или нет. Чтобы проиллюстрировать это, переименуем существующий каталог с именем foo в foobar. mv foo foobar Так как foobar еще не существует как каталог, foo будет переименован в foobar. Если выполняется команда: ,, mv doc.txt foobar и foobar является существующим каталогом, будет выполнено перемещение. Файл doc.txt будет теперь располагаться в каталоге foobar. Параметр -f будет удалять существующие файлы в месте назначения без предупреждения пользователя. Параметр -i будет спрашивать у пользователя, нужно ли перезаписать каждый файл в месте назначения, когда такой файл уже существует. Если ответ не начинается с «у» или «Y», файл будет пропущен. pico Синтаксис: pico [имя файла] Это полноэкранный текстовый редактор, который хорошо подходит для пользователей, переходящих на Linux из среды DOS или Windows.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

84

Глава 5

pwd

Синтаксис:

pwd Эта команда выводит текущий рабочий каталог. Для каталогов выводятся абсолютные пути. Ни один из показанных каталогов не будет жесткой или мягкой символьной связью. pwd /home/usr/charmaine rm Синтаксис:

rm [-rif] При удалении файла или каталога используется команда rm. Здесь представлены некоторые примеры: rm doc.txt rm "/doc.txt rm /tmp/f oobar.txt Чтобы удалить с помощью rm несколько файлов, можно использовать метасимволы или вводить каждый файл отдельно. Например: rm doc1.txt 'doc2.txt doc3.txt эквивалентна: rm doc[l-3].txt rm — мощная команда, которая при неправильном использовании может вызвать полный хаос. Например, на диске записана диссертация, над которой пользователь старательно работал в течение последних шести месяцев. Он решил удалить с помощью rm все файлы типа doc, считая, что находится в другом каталоге. После того как обнаружится, что не существует файла резервной копии и станет ясно, что нет никаких путей для его восстановления, пользователю захочется узнать, как избежать таких ошибок в будущем. Команда rm имеет параметр -i, который делает rm интерактивной. Перед удалением любого файла пользователю выводится приглашение на подтверждение операции. Например: rm -i * . doc rm: remove thesis.doc (yes/no)? n

Параметр -i обеспечивает пользователю средство спасения. На его усмотрение оставлено право сохранить файл (ответ по) или пострадать от последствий (ответ yes). Параметр -f является полной противоположностью. Параметр -f (force — заставить) приказывает rm удалить все файлы, которые определены, несмотря на их полномочия. Используйте параметр -f только когда на 100% уверены, что удаляются ненужные файлы. Чтобы удалить каталог и все файлы/каталоги внутри него, используйте параметр -г. Команда rm -r удалит все поддерево. rm -г documents Можно объединить параметры -г и -i: rm -ri documents Эта команда будет спрашивать разрешения, прежде -чем удалять каждый файл и каталог. sort Синтаксис: sort t.-rndu] [-о файл_вывода] [файл_ввода/сортированный_файл]

www.books-shop.com

Повседневные команды

85

Назначение этой команды — сортировка. Однакоjs-ort также объединяет файлы. Команда sort будет читать файлы, которые содержат ранее отсортированные данные, и сливать их в один большой отсортированный файл. Простейший способ использования sort состоит в сортировке одного файла и выводе результата на экран. Пусть a.txt содержит: Ь С а d Чтобы отсортировать a.txt и показать результаты на экране, выполните: sort a.txt а b С d Для сохранения отсортированных результатов используйте параметр -о: sort -о sorted.txt a.txt будет сохранять отсортированный файл a.txt в файле sorted, txt. Чтобы использовать sort для слияния существующих отсортированных файлов в один файл и сохранить вывод в sorted.txt, можно было бы использовать: sort -о sorted.txt a.txt b.txt. с.txt Параметр -г позволит изменять порядок сортировки на обратный. Поэтому файл, который содержит в строках буквы алфавита, будет отсортирован от z до а. ., . .... Параметр -d будет сортировать файлы на основе лексикографического порядка. Команда sort будет рассматривать только буквы, цифры и пробелы и игнорировать другие символы. Параметр -и будет искать идентичные строки и подавлять все кроме одной. Поэтому sort создаст только уникальные строки. stcit Синтаксис: stat Эта программа показывает разнообразную статистику о файле или каталоге. Например: stat foo.txt Результат выполнения этой команды: File: "foo.txt" , Size: 4447232 Filetype: Regular File Mode: (0644/-rw-r-r-) Uid: (0/root) Gid: (0/root) Device: 3,0 "Inode: 16332 Links: 1 Access: Mon Mar 1 21:39:43 1999(00000.02:32:30) Modify: Mon Mar 1 22:14:26 1999(00000.01:57:47) Change: Mon Mar 1 22:14:26 1999(00000.01:57:47) Показаны даты доступа, модификации, изменения файла, информация о размере, владельце и группе, режим полномочий и т.д. strings Синтаксис: strings Команда strings выводит символьные последовательности, которые состоят по крайней мере из четырех символов. Эта утилита используется в основном для описания содержимого нетекстовых файлов.

www.books-shop.com

86

Глава 5

tail

Синтаксис:

tail [-счетчик | _fr]

Команда tail покажет конец файла. По умолчанию tail будет выводить последние 10 строк файла. Чтобы увидеть последние 50 строк файла doc.txt, необходимо выполнить команду: tail -50 doc.txt

Параметр -г выводит результат в обратном порядке. По умолчанию -г показывает все строки в файле, а не просто 10 последних. Например, чтобы вывести все содержимое файла doc.txt в обратном порядке, используйте: tail -г doc.txt

Чтобы показать последние 10 строк файла doc.txt в обратном порядке, используйте: tail -Юг doc.txt

Наконец, параметр -f полезен для мониторинга файла. С помощью этого параметра tail будет Ожидать, когда в файл будут записаны новые данные. Как только новые данные добавляются к файлу, tail будет выводить их на экран. Чтобы отменить мониторинг файла, нажмите Ctrl+C (клавишу intr), поскольку сама команда tail не остановится.

touch

Синтаксис:

touch a.out.txt Эта команда будет выполнять операцию uuencode над исполняемой программой a.out. , которое будет использовать uudecode, определим как b.out. Версия файла a.out, преобразованного командой uuencode, будет сохранена в файле a.out.txt.

zip Синтаксис: zip [-ACDe9] Эта утилита сжатия будет архивировать файлы в популярный формат, совместимый с системами VMS, MS-DOS, OS/2, Windows NT, Minix, Atari, Macintosh, Amiga и Acorn RISC OS. Это в основном связано с совместимостью zip с программой PKZIP Фила Катца. Файлы, сжатые с помощью zip, имеют расширение .zip. Команда zip имеет набор параметров, которые изменяются ключами программы. Эта команда может создавать самораспаковывающиеся файлы, добавлять комментарии в файлы ZIP, удалять файлы из архива и защищать архив с помощью пароля. Это только некоторые из свойств, поддерживаемых zip. Подробное описание можно найти на соответствующей man-странице. Специальные команды файловых систем Команды в этом разделе имеют дело с файловыми системами.

dd Синтаксис: dd if = [conv = тип_преобразования] of = [obs = размер выходного блока] Программа позволяет преобразовывать формат файла. Например: dd if=/tmp/uppercase.txt conv=lcase of =/tmp/lowe rcase.txt Эта команда получит файл /tmp/uppercase.txt и запишет новый файл /tmp/lowercase.txt, преобразовав все символы в нижний регистр (lease). Чтобы сделать обратное преобразование, можно использовать параметр

www.books-shop.com

93

Повседневные команды

conv=ucase. Однако dd широко используется для записи на гибкий диск файла образа boot, который уже имеет файловую систему, созданную rnkfs. Например: dd

if=/some/boot.img conv=lcase of=/dev/fdO obs=16k

Эта команда запишет файл /some/boot.img на первом устройстве гибких дисков (/dev/fdO) блоками размером 16КБ.

df df

Синтаксис: [-k]

/

Команда df выводит информацию о свободном пространстве смонтированных в системе дисковых устройств. Пространство жесткого диска является важным ресурсом компьютера и должно тщательно контролироваться. Неправильное управление пространством жесткого диска может вызвать существенное снижение производительности компьютера.

df Filesystem /dev/hd4 /dev/hd2 /dev/hd9var /dev/hd3 /dev/lvOO /dev/hd1 /dev/fsOl /dev/fs02

512-blocks 49152 1351680 49152 57344 57344 163840 8192000 8192000

Free 25872 243936 12224 52272 55176 16976 6381920 1873432

%Used

48% 82% .76% 9% 4% 90% 23% 78%

fused 2257

19091 2917 125 19

%Iused 19% 12% 48%

1140

20963

72

2% 1% 6% 3% 1%

Mounted on

/ /usr /var /trap /tftpboot /home /home/fsOl /home/fs02

Чтобы увидеть итоговые данные об использовании дискового пространства текущей файловой системы, выполните:

df

.

-

• -



Filesystem 512-blocks Free %Used lused %Iused Mounted on /dev/fs01 8192000 6381920 23% 20963 3% /home/fs01 Обратите внимание, что результаты представлены в 512-байтных блоках. Параметр -k будет показывать итоговые данные в блоках размером 1024 байта.

df -k . Filesystem /dev/fs01

1024-blocks Free %UsecJ 4096000 3190960 23%

lused %Iused Mounted on 20963 3% /nome/fs01

При использовании параметра -k результаты выглядят совершенно по-другому. Если вьюод интерпретируется неправильно, можно выйти за пределы дискового пространства раньше, чем предполагалось. edquota См. главу 7, раздел о назначении пользователям дисковых квот. fdformat Синтаксис: fdformat

Эта программа выполняет низкоуровневое форматирование на устройстве гибких дисков. Например: fdformat /dev/fdOH1440 Эта команда отформатирует первый гибкий диск (/dev/fdO), используя формат 1.44МБ.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

94

Глава S

fdisk

См. главу 2.

mkfs

Синтаксис:

mkfs [-t [блоки]

тип_файловой_системы]

[-cv]

Эта команда создает новую файловую систему. Например: mkfs

-t ext2 /dev/hda3

Эта команда создает файловую систему типа ext2 в разделе /dev/hda3 первого жесткого диска IDE. Параметр -с заставляет mkfs выполнить проверку на наличие плохих блоков прежде чем создавать файловую систему; параметр -v указывает на подробный вывод результатов.

mkswap

См. главу 2.

mount

Синтаксис:

mount -а [-t тип_файловой_системы] [-о параметр]

Эта команда монтирует файловую систему. Как правило, параметры монтирования для обычно используемых файловых систем хранятся в /etc/fstab. Например: /dev/hda6 /intranet ext2 defaults 12 Если эта строка находится в /etc/fstab, можно смонтировать файловую систему раздела /dev/hda6 следующим образом: mount /intranet Та же самая файловая система может монтироваться иначе: mount -t ext2 /dev/hda6 /intranet Параметр -t используется для определения файловой системы. Чтобы смонтировать все файловые системы, определенные в /etc/fstab, используется параметр -а. Например: mount -a -t ext2

Эта команда монтирует все файловые системы ext2. Обычно используемыми параметрами для ключа -о являются го (read-only — только для чтения) и rw (read/write — чтение/запись). Например:

mount -t ext2 -о го /dev/hda6 /secured Эта команда монтирует /dev/hda6 в /secured как файловую систему только для чтения.

quota

См. главу 7, раздел о мониторинге использования диска.

quotaon

См. главу 7, раздел о конфигурировании системы для поддержки дисковых квот.

swapoff

Синтаксис:

swapoff -a

Эта команда позволяет отключить устройства свопинга. Параметр -а позволяет отключить все разделы свопинга, определенные в /etc/fstab.

www.books-shop.com

95

Повседневные команды

swapon Синтаксис: swapon -a



Эта команда позволяет включить устройства свопинга. Параметр -а позволяет включить все разделы свопинга, определенные в /etc/fstab.

umount

Синтаксис:

.umount -a [-t тип_файловой_системы] Эта команда демонтирует в текущей системе файловую систему. Например: umount /cdrom Эта команда будет демонтировать файловую систему с точкой монтирования /cdrom, параметры которой определены в /etc/fstab. Параметр -а позволяет демонтировать все файловые системы (за исключением файловой системы ргос), определенные в файле /etc/fstab. Можно также использовать параметр -t для указания определенного типа файловой системы для демонтирования. Например: umount -a -t iso9660 Эта команда демонтирует все файловые системы типа iso9660, которые обычно являются дисками CD-ROM. Команды, совместимые с DOS Если из системы Linux нужен доступ к файлам MS-DOS, нужно установить пакет Mtools. Mtools поставляется с Red Hat Linux как пакет RPM, поэтому его установка Является простой задачей. Смотрите в описании команды rpm, как установить пакет RPM. Mtools является набором утилит, которые позволяют читать, писать и перемещать файлы MS-DOS. Пакет поддерживает длинные имена файлов в стиле Windows 95, диски Xdf OS/2 и диски 2т. Далее описываются обычно используемые утилиты, находящиеся в пакете Mtools. mcopy Синтаксис: mcopy [-tin] Утилита mcopy используется для копирования файлов MS-DOS в/из Linux. Например: mcopy /tmp/readme.txt b: Эта команда копирует файл readme.txt из каталога /tmp на диск b:. Параметр -t позволяет автоматически преобразовывать пару возврат каретки/перевод строки (cr/lf) в текстовых файлах MS-DOS в перевод строки. Параметр -т позволяет сохранить время модификации файла. mdel Синтаксис: mdel Эта утилита позволяет удалять файлы в файловой системе MS-DOS. mdir Синтаксис: mdir [-/] Эта утилита позволяет просматривать каталог MS-DOS. Параметр -/ позволяет увидеть все подкаталоги.

www.books-shop.com

96

mformat

Синтаксис:

mformat

[-t

цилиндры]

[-h

головки]

[-s

секторы]

Эта утилита позволяет форматировать гибкие диски для хранения минимальной файловой системы MS-DOS. Считается, что значительно проще взять диск, отформатированный на компьютере MS-DOS, чем определять цилиндры, головки, секторы и т.д.

mlabel

Синтаксис:

mlabel [-vcs] :[новая_метка]

Эта утилита показывает текущую метку тома (если она существует) указанного дискового устройства и предлагает ввести новую метку- если она не введена в командной строке. Параметр -v выводит шестнадцатеричный дамп загрузочного сектора указанного дискового устройства; параметр -с очищает существующую метку тома, a -s показывает существующую метку дискового устройства. -:



^

Специальные команды системного статуса

Команды, рассматриваемые в этой секции, имеют дело с информацией о статусе -системных ресурсов.

dmesg

Синтаксис:

dmesg Эта программа показывает сообщения о статусе, выводимые ядром во время начальной загрузки.

free

Синтаксис:

free Эта программа выводит статистику использования оперативной памяти. Пример вывода выглядит следующим образом: Mem:

total

used

free

shared

buffers

cached

127776

124596

3180

30740

2904

107504

-/+ buffers/cache:

14188

113588

Swap:

84

129816

129900

shutdown Синтаксис: shutdown

[-r]

[-h]

[-c]

[-k]

[-t

секунды]

[сообщение]

Эта команда позволяет суперпользователю или обычному пользователю, указанному в файле /etc/shutdown.allow, выключить систему для перезагрузки или остановки. Чтобы перезагрузить компьютер в данный момент, выполните: shutdown -r now

Чтобы остановить систему после выключения, замените -г на -h. Параметр -k позволяет имитировать событие выключения, не делая его в действительности. Например: shutdown -r -k now System going down for maintenance

"

Эта команда будет посылать фальшивое сообщение о закрытии всем пользователям. Параметр -t позволит определить задержку в секундах между

www.books-shop.com

Повседневные команды

97

предупреждающим сообщением и реальным событием выключения. Если нужно отменить выключение, выполните shutdown еще раз, но с параметром -с. Обратите внимание, что для определения времени можно использовать формат . Например: shutdown -г 12:55 Эта команда перезагрузит систему в 12:55. Для указания времени можно использовать +. Например: shutdown -r +5 i Эта команда запустит процесс выключения через пять минут после вывода предупреждающего сообщения. uname Синтаксис: uname [-т] [-п.] [-г] [-s] [-у] [-а] Эта команда выводит информацию о текущей системе. Например: ипате -а Эта команда выводит строку такого вида: Linux picaso.nitec.com 2.0.36 »1 Tue Oct 13 22:17:11 EOT 1998 1586 unknown Параметр -m выводит информацию о системной архитектуре (например, 1586); параметр -п выводит имя хоста (например, picaso.nitec.com); параметр -г выводит версию выпуска операционной системы (например, 2.0.36); параметр -s выводит название операционной системы (например, Linux); a параметр -v выводит версию локальной сборки операционной системы (например, #1 Tue Oct 13 22:17:11 EDT 1998). uptime Синтаксис: uptime Эта команда покажет текущее время, как долго система была включена с момента последней перезагрузки, сколько пользователей соединено с сервером, системную загрузку в последние 1, 5 и 15 минут. Команды управления пользователями Команды этого раздела предназначены для управления пользователями. chfn См. главу 7, раздел об'изменении существующей учетной записи пользователя. chsh См. главе 7, раздел об изменении существующей учетной записи пользователя. groupadd См. главу 7, раздел о создании новой группы. groupmod См. главу 7, раздел об изменении существующей группы. groups Синтаксис: groups [имя_пользователя]

www.books-shop.com

98

Глава 5

Эта команда выводит список групп, к которым в настоящее время принадлежит упомянутый пользователь. Если пользователь не определен, выводятся группы текущего пользователя.

last

Синтаксис:

last [-число] [имя_пользователя] [reboot]

Эта команда выводит список пользователей, которые.зарегистрировались в системе с момента создания /var/log/wtmp. Например: last j u l i e Эта команда показывает количество регистрации в системе пользователя julie с момента создания /var/log/wtmp. last -10 j u l i e Эта команда покажет только последние 10 регистрации пользователя julie в системе. last reboot Эта команда покажет, сколько раз система перезагружалась с момента создания файла /var/log/wtmp.

passwd

Синтаксис:

passwd

Эта команда позволяет изменить пароль пользователя. Только суперпользователь может указывать имя пользователя, все остальные должны вводить команду passwd без аргументов, что позволит пользователю изменить свой собственный пароль. Суперпользователь может с помощью этой команды изменить пароль любого пользователя. SU

Синтаксис: su [-] [имя пользователя]

Команда su может использоваться для превращения в другого пользователя. Например: su john

Эта команда позволяет стать пользователем John, если известен пароль John и учетная запись существует на сервере, на котором выполняется команда. Наиболее распространенное использование этой команды состоит в превращении в root. Когда мы выполняем эту команду, не указывая никакого имени пользователя, она предполагает, что необходимо стать пользователем root, и предлагает ввести его пароль. Если вводится правильный пароль для root, su будет выполнять оболочку, используя UID (0) и GID (0) для root. Это позволяет успешно стать пользователем root и выполнить административные задачи. Команда очень полезна, когда сервер доступен только по протоколу Telnet. Можно войти в сервер с помощью Telnet как обыкновенный пользователь и использовать команду su, чтобы стать root для выполнения системных административных задач. Если используется параметр -, новая оболочка отмечается как оболочка регистрации в системе. Пользователь root с помощью команды su может превращаться в других пользователей без введения какого-либо пароля.

useradd

См. главу 7, раздел о создании новой учетной записи пользователя.

www.books-shop.com

Повседневные команды

99

userdel

См. главу 7 раздел об удалении или отключении учетной записи пользователя. usermod См. главу 7, раздел о модификации существующей учетной записи пользователя. who Синтаксис: who

Эта команда выводит информацию о пользователях, которые в настоящее время зарегистрированы в системе. Можно использовать для той же цели команду w. whoami Синтаксис: whoami Эта команда выводит текущее имя пользователя. Пользовательские команды доступа к сетевым службам Команды, рассматриваемые в этом разделе, позволяют получить доступ к различным сетевым службам. finger Синтаксис: finger пользователь@хост Программа позволяет запросить соединение с демоном finger на указанном хосте. Например: finger [email protected] Эта команда будет запрашивать соединение finger с демоном finger, выполняющимся на сервере blackhole.integrationlogic.com. Если упомянутый хост не разрешает соединения finger, попытка будет неудачной. Успешный запрос finger выведет информацию об упомянутом пользователе. Если пользователь имеет в домашнем каталоге файл с расширением .plan, этот файл обычно выводится большинством традиционных демонов finger. Так как finger иногда используется для нарушения систем защиты, системные администраторы отключают службу finger вне своих доменов. ftp

Синтаксис:

ftp Используемую по умолчанию клиентскую программу FTP можно применять для выполнения соединения FTP с сервером FTP. Например: ftp ftp.cdrom.com Эта команда откроет соединение FTP с f t p . cdrom. com и предложит ввести имя пользователя и пароль. Если знать имя пользователя и пароль, можно зарегистрироваться на сервере FTP и обмениваться с ним файлами. В приглашении FTP можно ввести «help» или «?», чтобы получить справку о командах FTP. lynx Синтаксис: lynx [-dump] [-head] [URL]

www.books-shop.com

100

Глава 5

Это наиболее популярный интерактивный текстовый Web-браузер. Например: lynx

http://www.integrationlogic.com/

Эта команда выведет заглавную страницу узла. Это очень удобная программа быстрого просмотра. Предположим, что необходимо быстро найти, какой Web-сервер использует сайт, не запрашивая об этом Web-мастер. Выполним следующую команду: lynx -head http://www.integrationlogic.com/ Команда выведет заголовок HTTP, который браузер lynx получает от Web-сервера. Пример вывода см. ниже: НТТР/1.1 302 Moved Date: Tue, 02 Mar 1999 06:47:27 GMT Server: Apache/1.3.3 (Unix) Location: http://www.integrationlogic.com/index.shtml Connection: close Content-Type: text/html Как можно видеть, заголовок показывает, что www. integrationlogic. com выполняется на сервере Apache и платформе UNIX. Обратите внимание, что не все Web-сайты выдают информацию о платформе своего Web-сервера, но многие — будут. Если необходимо избежать использования интерактивного режима, можно применить параметр -dump для вывода страницы на экран (STDOUT). Например: lynx -dump -head http://www.integrationlogic.com/ Эта команда выводит заголовок в поток stdout. Свойство -dump может оказаться очень удобным. Например: lynx -dump -head http://webserver/new.gif > new.gif Эта команда позволит сохранить new.gif с хоста Web-сервера в локальном файле с именем new.gif. Интерактивный режим позволит удобно просматривать дружественный по отношению к текстовому браузеру сайт.

mail

Синтаксис:

mail пользователь@хост [-s тема] [< имя_файла] Это используемая по умолчанию программа почтового клиента SMTP. Ее можно использовать для отправки или получения почты на вашей системе. Например, если выполнить эту программу без аргументов, она выведет при. глашение «@» и покажет не прочитанные в настоящее время почтовые сообщения, перечисляя их в нумерованном списке. Чтобы прочитать сообщение, введите номер сообщения, и оно будет показано. Чтобы получить дополнительную информацию о mail, воспользуйтесь командой «?» в приглашении «@». Можно послать сообщение пользователю с адресом kabi^integrationlogic. com с заголовком темы «About your Red Hat book», выполнив команду: mail [email protected] -s "About your Red Hat book" Затем можно ввести почтовое сообщение и, нажав Ctrl+D, закончить его. Находясь в режиме создания сообщения, переключитесь в используемый по умолчанию текстовый редактор, вводя -v в начале строки. Если почтовое сообщение уже подготовлено в файле, можно послать его, используя команду: mail [email protected] -s "About your Red Hat book" « feedback.txt Эта команда пошлет сообщение с заданной строкой темы. Сообщение будет состоять из содержимого файла feedback.txt.

www.books-shop.com

Повседневные команды



pine Синтаксис: pine Это полноэкранный почтовый клиент SMTP. Благодаря удобному пользовательскому интерфейсу программа хорошо подходит для тех пользователей Linux, которые еще не очень хорошо в нем разбираются. rlogin Синтаксис: rlogin [-1 имя_пользователя] Команда позволяет удаленно зарегистрироваться на хосте. Например, чтобы зарегистрироваться на хосте shell.myhost.com, выполните: rlogin shell.myhost.com Так как утилита rlogin не считается безопасной, ее рекомендуют использовать только в замкнутой среде локальной сети. Параметр -1 позволяет определить имя пользователя, которое будет использоваться для аутентификации. Если необходимо удаленно регистрироваться на хосте, не вводя пароль, создайте файл .rhosts в домашнем каталоге пользователя. Добавьте имя хоста или IP-адрес компьютера, который будет использоваться для отправки запросов rlogin. Еще раз подчеркнем, что широко использовать эту утилиту не рекомендуется, так как считается, что она нарушает защиту системы. talk Синтаксис: talk tty Если надо послать сообщение другому пользователю, с этим прекрасно справится электронная почта. Но если необходимо пообщаться с другим пользователем в реальном времени, как при телефонном разговоре, используйте команду talk. ' Для того чтобы поговорить с другим зарегистрировавшимся пользователем, введите: talk [email protected] Пользователь, которого запрашивают, должен будет принять запрос talk. Когда пользователь примет запрос talk, можно начинать общаться друг с другом, печатая текстовые сообщения. Программа talk будет остановлена, когда любая из сторон нажмет Ctrl+C (клавишу intr). telnet Синтаксис: telnet [порт] Используемую по умолчанию клиентскую программу Telnet можно применять для соединения с сервером Telnet. Например: telnet shell.myportal.com Откроется соединение Telnet с системой shell.myportal.com, если упомянутый хост выполняет сервер Telnet. Когда соединение открыто, будут запрошены имя пользователя и пароль, а после успешной регистрации будет разрешен доступ по учетной записи локального пользователя на сервере Telnet. wall Синтаксис: wall Эта команда позволяет послать текстовое сообщение на терминал любого пользователя, который не отключил доступ для записи на своем tty с

www.books-shop.com

102

Глава 5

помощью команды mesg n. В команде wall можно ввести однострочное или многострочное сообщение и послать его, нажав Ctrl+D. Команды администратора сети Команды, рассмотренные в этом разделе, позволяют получать информацию о сетевых службах и самой сети. host Синтаксис: host [-а] По умолчанию эта программа позволит быстро проверить IP-адрес хоста. Если используется параметр -а, будет возвращаться различная информация DNS об указанном хосте или IP-адресе. hostname Синтаксис: hostname

.

Данная программа выводит имя хоста системы. ifconfig Синтаксис:

.

ifconfig [интерфейс] [up | down] [netmask маска] Программа позволяет сконфигурировать сетевой интерфейс. С помощью этой программы можно увидеть состояние интерфейса. Например, если ранее система Red Hat Linux была сконфигурирована для работы в сети и имеется предварительно сконфигурированное устройство сетевого интерфейса ethO, можно выполнить: ifconfig ethO

'

Должен появиться вывод, подобный этому: ethO Link encap: Ethernet HWaddr 00:CO:F6:98:37:37 inet addr:206.171.50.50 Beast: 206. 171.50.63 Mask: 255. 255. 255. 240 UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric :1 RX packets:9470 errors:0 dropped:0 overruns:0 frame:0 TX packets:7578 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 Interrupt^ Base address:0x340 Здесь ifconfig сообщает, что устройство сетевого интерфейса ethO имеет адрес Интернета (inet addr) 206.171.50.50, адрес широковещательной рассылки (Beast) 206.171.50.63 и сетевую маску 255.255.255.240. Остальная информация показывает, сколько пакетов получил этот интерфейс (пакеты RX), сколько пакетов этот интерфейс передал (пакеты ТХ), сколько ошибок различных типов произошло до сих пор, какая адресная линия прерывания используется устройством, какой установлен базовый адрес ввода/ вывода и т.д. Можно выполнить ifconfig без аргументов, чтобы получить полный список всех включенных сетевых устройств. Используя ifconfig, можно подключить интерфейс. Например: ifconfig ethO 206.171.50.50 netmask 255.255.255.240 \ broadcast 206,171.50.63 Команда запустит ethO с IP-адресом 206. 17 1 .50.50. Можно также быстро отключить интерфейс, используя команду ifconfig. Например: ifconfig ethO down

'

выполнит отключение интерфейса ethO.

www.books-shop.com

Повседневные команды

netcfg См. главу 9, раздел об использовании netcfg для конфигурирования сетевого адаптера. netstot Синтаксис: netstat t-r] [-а] [-с] [-1] Эта программа выводит статус сетевых соединений, как входящих в локальную систему, так и выходящих из нее. Например: netstat -a Команда выводит все сетевые соединения локальной системы. Чтобы увидеть таблицу маршрутизации, используйте параметр -г. Чтобы непрерывно выводить статус сетевых соединений, используйте параметр -с. Чтобы вывести информацию обо всех сетевых интерфейсах, используйте параметр -i. nslookup Синтаксис: nslookup [-query=Tnn_3anHCM_DNS] Гимя_хоста или IP] [сервер_имен] Эта команда позволяет выполнять запросы DNS. Можно запрашивать сервер DNS интерактивным образом или сразу искать информацию. Например: nslookup -query=mx iptegratipnlogic.com Эта команда будет сразу возвращать запись MX для домена integrationlogic.com. nslookup -query=mx integrationlogic.com ns.nitec.com Эта команда будет делать то же самое, но вместо используемого по умолчанию сервера имен, который определен в файле /etc/resolv.conf, она обратится к серверу имен ns.nitec.com. Можно также использовать -q вместо -query. Например: nslookup -q=a www.formtrack.com Эта команда возвращает IP-адрес (запись Address) для указанного имени хоста. Можно также выполнять nslookup в интерактивном режиме. Выполните команду без параметров — появится приглашение nslookup. В строке приглашения nslookup можно ввести «?», чтобы получить справку. Если в будущем планируется выполнение нескольких запросов DNS, интерактивный режим может быть очень полезным. Например, чтобы запросить записи NS Для множества доменов, таких как ad-engine, com и classifiedworks. com, введите следующую команду: set query=ns Когда тип запроса задан как ns, можно просто ввести ad-engine.com и ждать ответа, а когда он будет получен т- проверить имя следующего домена и т.д. Если необходимо изменить сервер имен, находясь в режиме приглашения nslookup, используйте команду server. Например: server ns.ad-engine.com Это заставит nslookup использовать ns.ad-engine.com в качестве сервера имен. Чтобы завершить интерактивный режим и вернуться к приглашению оболочки, введите exit в строке приглашения nslookup. ping Синтаксис: ping [-с счетчик] [-s размер_пакета] [-1 интерфейс]

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]



104

,

Глава б

Это одна из широко используемых сетевыми администраторами программ. Она используется для того чтобы определить, доступен ли удаленный компьютер, с помощью протокола TCP/IP. Технически эта программа посылает на удаленный хост эхо-запрос ICMP (Internet Control Message Protocol — Протокол управляющих сообщений Интернета). Так как протокол требует ответа на эхо-запрос, то удаленный хост обязан послать его назад. Это позволяет программе ping вычислить время, которое требуется для пересылки пакета на удаленный хост. Например: ping blacktiole.nitec.com Эта команда непрерывно посылает сообщения ping на хост blackhole. nitec.com. Чтобы остановить программу ping, необходимо нажать Ctrl+C, что заставляет программу вывести статистику. Вот пример вывода запросов ping, созданных предыдущей командой: PING blackhole.nitec.com (209.63.178.15): 56" data bytes 64 bytes from 209.63.178.15: icmp_seq=0 ttl=53 time=141.5 ms 64 bytes from 209.63.178.15: icmp_seq=1 ttl=53 time=162.6 ms 64 bytes from 209.63.178.15: icmp_seq=2 ttl=53 time=121.4 ms 64 bytes from 209.63.178.15: icmp_seq=3 ttl=53 time=156.0 ms 64 bytes . from 209.63.178.15: icmp_seq=4 ttl=53 time=126.4 ms 64 bytes from 209.63.178.15: icmp_seq=5 ttl=53 time=101.5 ms 64 bytes from 209.63.178.15: icmp_seq=6 ttl=53 time=98.7 ms 64 bytes from 209.63.178.15: icmp_seq=7 ttl=53 time=180.9 ms 64 bytes from 209.63.178.15: icmp_seq=8 ttl=53 time=126.2 ms 64 bytes from 209.63.178.15: icmp_seq=9 ttl=53 time=122.3 ms 64 bytes from 209.63.178.15: icmp_seq=10 ttl=53 time=127.1 ms - blackhole.nitec.com ping statistics 11 packets transmitted, 11 packets received, 0% packet loss round-trip min/avg/max =98.7/133.1/180.9 ms Мы видим 10 запросов ping к хосту blackhole . nitec . com. Так как программа была прервана после 11-го запроса, статистика показывает, что ping передала 11 пакетов и получила все пакеты, поэтому потери пакетов не произошло. Потеря пакетов была бы сигналом о плохой работе сети между инициатором запроса ping и отвечающим на ping хостом. Другой интересной статистикой является минимальное (min), среднее (avg) и максимальное время пересылки пакета туда и обратно. Чем меньше эти значения, тем лучше маршрутизация между хостами. Например, если запрос ping посылается в локальной сети, значения времени пересылки пакета туда и обратно будут в диапазоне одной миллисекунды. Если требуется, чтобы программа ping автоматически остановилась после передачи некоторого числа пакетов, используйте параметр -с. Например: ping -с 10 blackhole.nltec.com Эта команда пошлет упомянутому хосту 10 запросов ping. По умолчанию ping посылает 64-байтовые (56 байт данных + 8 байт заголовка) пакеты. Если требуется изменить размер посылаемого пакета, используйте параметр -s. Например: ping -с 1024 -s 1016 re.boot.nitec.com Команда будет посылать на удаленный хост пакет длиной 1024 (1016 + 8) байта.

www.books-shop.com

Повседневные команды

105

"1 Посылая на удаленный хост большие пакеты при слабой J операционной системе, вы затрудните пользователям доступ к этому хосту. Это может рассматриваться как атака и, скорее всего, будет незаконным действием в большинстве стран. Поэтому будьте осторожны, когда начинаете экспериментировать с программой ping и чужим компьютером.

route

Синтаксис:

route add -net dev route add -host dev route add default gw

Эта команда позволяет контролировать маршрутизацию компьютера. Например, чтобы создать используемый по умолчанию маршрут для сети, используйте команду route следующим образом: route add -net

Например, чтобы создать используемый по умолчанию маршрут для сети 206.171.50.48 с сетевой маской 255.255.255.240 и ethO в качестве интерфейса, можно выполнить:

route add -net 206.171.50.48 255.255.255.240 ethO Для того чтобы задать используемый по умолчанию шлюз, выполните команду route: route add default gw

Например, чтобы задать адрес используемого по умолчанию шлюза 206.171.50.49, можно выполнить такую команду: route add default gw 206.171.50.49 ethO

С помощью следующей команды можно проверить, что маршрут сети и используемый по умолчанию шлюз в таблице маршрутизации заданы правильно: route -n

Вот пример вывода предыдущей команды: Kernel IP routing table Destination Gateway Genmask, Flags 206.171.50.48 0.0.0.0 255.255.255.240 U 127.0.0.0 0.0.0.0 255.0.0.0 U 0.0.0.0 206.171.50.49 0.0.0.0 UG

Metric Ref 0 0 0 0 Q 0

Use Iface 6 ethO 5 lo 17 ethO

| Проверьте, что в файле /etc/sysconfig/network и ядре включена ' пересылка IP-адресов, чтобы разрешить пересылку пакетов между двумя разными сетевыми интерфейсами.

tcpdump

Синтаксис:

tcpdump

Это замечательный инструмент отлаживания сети. Например, чтобы проследить все пакеты между двумя хостами brat, nitec.com и reboot.nitec.com, используйте команду: tcpdump host brat.nitec.com and reboot.nitec.com

www.books-shop.com

106

Глава Б

Эта команда заставит tcpdump прослушивать пакеты между этими двумя компьютерами. Если reboot.nitec.com начинает посылать запросы ping для brat.nitec.com, вывод выглядит следующим образом: tcpdump: listening on ethO 09:21:14.720000 reboot. nitec.com>brat. nitec.com: 09:21:14.720000 brat. nitec.com>reboot. nitec.com: 09:21:15.720000 reboot. nitec.com>brat. nitec.com: 09:21:15.720000 brat. nitec.com> reboot. nitec.com: 09:21:16.720000 reboot. nitec.com>brat. nitec.com: 09:21:16.720000 brat. nitec.com>reboot. nitec.com: 09:21:17.730000 reboot. nitec.com>brat. nitec.com: 09:21:17.730000 brat. nitec.com>reboot. nitec.com:

icmp: icmp: icmp: icmp: icmp: icmp: icmp: icmp:

echo echo echo echo echo echo echo echo

request reply request reply request reply request reply

Если существует проблема при соединении с сервером FTP, можно использовать tcpdump на системе-шлюзе локальной сети, чтобы увидеть происходящее. Например: tcpdump port ftp or ftp-data Эта команда покажет имеющие отношение к FTP пакеты, которые выходят из сети и в нее приходят. Как можно видеть, это позволяет на низком уровне исследовать сетевые проблемы. Если существует проблема с использованием службы между двумя хостами, можно применить tcpdump для идентификации причины. traceroute Синтаксис: traceroute Программа позволяет локализовать проблемы сетевой маршрутизации. Она будет показывать маршруты между двумя хостами, прослеживая шлюзы между хостами, заставляя их отвечать на запрос ICMP TIME_EXCEEDED. Вот пример трассировки маршрута между моей локальной системой и хостом blackhole.nitec.com: traceroute to blackhole.nitec.com (209.63.178.15), 30 hops max, 40 byte packets 1 router (206.171.50.49) 4.137 ms 3.995 ms 4.738 ms 2 PM3-001.v1.NET (206.171.48.10) 32.683 ms 33.295 ms 33.255 ms 3 HQ-CS001.v1.NET (206.171.48.1) 42.263 ms 44.237 ms 36.784 ms 4 ix.pxbi.net (206.13.15.97) 106.785 ms 63.585 ms 101.277 ms 5 ix.pxbi.net (206.13.31.8) 86.283 ms ,64.246 ms 69.749 ms 6 ca.us.ixbm.net (165.87.22.10) 71.415 ms 72.319 ms 85.183 ms 7 mae.elxi.net (198.32.136.128) 101.863 ms 80.257 ms 67.323 ms 8 y. exli.net (207.173.113.146) 71.323 ms 104.685 ms 110.935 ms 9 z. exli.net (207.173.113.217) 69.964 ms 137.858 ms 85.326 ms 10 z1.exli.net (207.173.112.251) 81.257 ms 107.575 ms 78.453 ms 11 209.210.249.50 (209.210.249.50) 90.701 ms 91.116 ms 109.491 ms 12 209.63.178.15 (209.63.178.15) 83.052 ms 76.604 ms 85.406 ms Каждая строка представляет одну пересылку. Чем больше пересылок, тем хуже обычно бывает маршрут. Другими словами, если между источником и местом назначения находится не много шлюзов, то существует вероятность, что пакеты между этими двумя хостами будут пересылаться достаточно быстро. Однако это не всегда так, поскольку будет достаточно только одного медленного шлюза, чтобы испортить время доставки. Используя traceroute, можно определить, куда направляются пакеты и где они, возможно, попадают в пробку. Когда определен источник проблемы, можно обратится в соответствующую организацию и решить проблему плохой маршрутизации.

www.books-shop.com

107

Повседневные команды

Команды управления процессами Рассматриваемые в этом разделе команды позволяют управлять процессами — выполняющимися в системе программами.

bg Синтаксис: bg Это встроенная команда оболочки, которая имеется во многих популярных средах. Данная команда позволяет поместить приостановленный процесс в фоновый режим. Например, нужно выполнить команду du -a / | sort -rn > /tmp/du.sorted, чтобы перечислить все файлы и каталоги в системе, упорядочивая по используемому дисковому пространству (размеру), и поместить результат в файл с именем /tmp/du.sorted. В зависимости от числа файлов в системе для этого может потребоваться какое-то время. В таком случае можно просто приостановить командную строку, используя Ctrl+Z и ввести .bg, чтобы переместить выполнение командной строки в фоновый режим, освобождая приглашение оболочки для других целей. I Если с самого начала требуется выполнять команду в фоновом ' режиме, можно просто добавить «&» в конце командной строки. Чтобы узнать, какие команды выполняются в фоновом режиме, введите jobs — появится список выполняющихся ,в фоновом режиме командных строк. Чтобы извлечь командную строку из фонового режима, используйте команду fg.

fg

Синтаксис:

fg [%номер_задания] Эта встроенная команда оболочки, существующая во многих популярных оболочках, позволяет поместить фоновый процесс в основной режим. Если выполнить эту команду без аргументов, она извлечет последнюю команду, которая была помещена в фоновый режим. Когда несколько команд выполняется в фоновом режиме, можно использовать команду jobs, чтобы найти номер задания и использовать этот номер как аргумент для fg при переводе задания в основной режим. Например, если jobs показывает, что есть две команды фонового режима, можно извлечь первую из них, используя:

fg %1 jobs

Синтаксис:

jobs Это встроенная команда оболочки, которая существует в популярных оболочках. Она позволяет увидеть список процессов, выполняющихся в фоновом режиме или приостановленных в настоящее время.

kill

См. главу 8, раздел о Передаче сигналов выполняющемуся процессу.

killall См. главу 8, раздел о передаче сигналов выполняющемуся процессу. PS

См. главу 8, раздел об использовании ps для получения статуса процесса.

top

См. главу 8, раздел о мониторинге процессов и загрузке системы.

www.books-shop.com

108

Глава 5.

Команды автоматизации задач

Команды, рассматриваемые в этом разделе, используются для выполнения необслуживаемых задач.

at

См. главу 8, раздел о планировании выполнения процессов.

atq

См. главу 8, раздел о планировании выполнения процессов.

atrm

См. главу 8, раздел о «планировании выполнения процессов.

crontab

См. главу 8, раздел о планировании выполнения процессов.

Команды повышения эффективности работы

Команды, рассматриваемые в этом разделе, помогут повысить производительность работы пользователя.

be

Синтаксис:

be

Это интерактивный калькулятор, который реализует специальный язык. Лично я не так уж заинтересован в изучении языка, но нахожу эту утилиту очень полезной для выполнения быстрых вычислений. Когда команда выполняется без аргументов, она берет вводимые данные и интерпретирует их как операторы для программирования калькулятора. Например, чтобы умножить 1024 на 4, можно просто ввести 1024*4 и получить результат, а текущий результат — использовать, подставляя символ точки. Cdl Синтаксис:

cal [месяц] [год} Эта отличная программа выводит прекрасно отформатированный календарь для месяца или года, указанных в командной строке. Если не указывать никаких аргументов, будет выведен календарь текущего месяца. Чтобы увидеть календарь для всего года, введите год в диапазоне 1-9999. Например: cal 2000 Эта команда выводит следующий календарь 2000 г.

www.books-shop.com

дневные команды

ispell Синтаксис:

10$, '

'

-..

•.

:

••

* •• •

• ••••••'> ••-*•-.-• '••

ispell /proc/sys/net/ipv4/ip_forward, где n равно 1 или 0. ' Листинги 9.5 и 9.6 показывают файлы для двух интерфейсов (ethO и ethl). Листинг 9.5. Файл /etc/sysconfig/network-scripts/ifcfg-ethO DEVICE=ethO IPADDR=192.168.1.126 NETMASK=255.255.255'.128 NETWORK=192.168.1.0 BROADCASTS 92.168.1.127 ONBOOT=yes

Листинг 9.6. Файл /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 IPADDR=192.168.1.254 NETMASK=255.255.255.128 NETWORK=192.168.1.128 BROADCAST=192.168.1.255 ONBOOT=yeS

Когда эти файлы созданы, а интерфейсы включены и работают (с помощью перезагрузки или команды ifup), необходимо будет создать два используемых по умолчанию маршрута для двух сетей с помощью следующих команд route: route add -net 192.168.1.0 255.255.255'. 128 ethO route add -net 192.168.1.128 255.255.255.128 ethl

Каждая из этих команд route будет гарантировать, что пакеты, предназначенные для упомянутой сети, передаются через указанное устройство интерфейса.

Конфигурирование хост-компьютера

Каждый хост-компьютер в каждой из подсетей должен быть сконфигурирован так, чтобы все они знали сетевой адрес, маску локальной подсети и информацию о шлюзе. Например, предполагая, что все хост-компьютеры являются рабочими станциями Linux и каждый имеет одно интерфейсное устройство Ethernet (ethO), файл /etc/sysconfig/network для любого из этих хост-компьютеров в сети 192.168.1.0 будет таким, как показан на листинге 9.7. Листинг 9.7. Файл /etc/sysconfig/network NETWORKING=yes FORWARD_IPV4=yes HOSTNAME=marketing-1.nitec.com OOMAINNAME=nitec.com GATEWAY=192.168.1.126 GATEWAYDEV=ethO

Файл сетевого интерфейса на этом же компьютере будет таким, как показан на листинге 9.8. Листинг 9.8. Файл /etc/sysconfig/network-scripts/ifcfg-ethO DEVICE=ethO

www.books-shop.com

185

Управление сетями

IPADDR=192.168.1.1 NETMASK=255.255.255.128 NETWORK=192.168.1.0 BROADCASTS 92.168.1.127 ONBOOT=yes

Аналогичным образом необходимо будет настроить и компьютеры в сети 192.168.1.128. Каждый из компьютеров в этой сети будет использовать строку GATEWAY=192.168.1.254 в файле /etc/sysconfig/network и строки NETWORK=192.168.1.128 и BROADCAST=192.168.1.255 в своих файлах /etc/sysconfig/network-scripts/ifcfg-ethO. Конечно, если какой-либо из этих компьютеров является системой, отличной от Linux, такой как система Windows Эх/2000 или NT, необходимо будет использовать соответствующие средства конфигурирования сети для задания этих значений. Когда будут настроены компьютер-шлюз и по крайней мере по одному хосту в каждой подсети, можно будет протестировать подсети. Простейшим способом тестирования является использование программы ping. Вот описание простого теста и рекомендаций по поиску неисправностей. Чтобы удалить все связанные с DNS проблемы, используйте во время тестирования сети только IP-адреса: 1. Прежде всего воспользуйтесь программой ping, чтобы прозондировать хост-компьютер в каждой подсети. Например, выполните ping 192.168.1.2 с компьютера 192.168.1.1. Если отклики ping не получены, проверьте сетевые конфигурационные файлы (/etc/sysconfig/network и /etc/sysconfig/network- scripts/ifcfg-ethO). Исправьте проблему, которая будет обнаружена, и перезапустите интерфейс, сначала выключив его с помощью ifconfig ethO down и затем включив его с помощью команды /etc/sysconfig/network- scripts/ifup rthO. Когда утилита ping будет успешно выполнена в каждой подсети, перейдите к следующему шагу. 2. Если можно выполнить ping хоста с другого хоста в той же подсети для обеих подсетей, выполните ping компьютера-шлюза из каждой подсети. Если эту операцию выполнить невозможно, проверьте файлы сетевой конфигурации компьютера-шлюза и исправьте ошибки и опечатки. Когда можно будет выполнить ping компьютера-шлюза из каждой подсети, перейдем к следующему шагу. 3. Теперь попытайтесь выполнить ping хоста в другой подсети. Если сделать это не удастся, воспользуйтесь traceroute , чтобы определить, доходят ли пакеты до машины-шлюза. Если traceroute показывает, что пакеты доходят до шлюза, но не передаются к месту назначения, проблема связана со шлюзом. Необходимо проверить, включена ли на компьютере пересылка IP-адресов. Выполните cat/proc/sys/net/ipv4/ ip_forward на компьютере-шлюзе, чтобы проверить возвращаемое значение (1 или 0). Если оно не равно 1, то пересылка IP-адресов либо выключена в файле /etc/sysconfig/network, либо не включена в ядре. В таком случае исправьте эту проблему и попробуйте еще раз. Если можно посылать запросы ping в любой из двух подсетей, значит, есть две работающие подсети. Иначе необходимо еще раз проверить все действия, необходимые для создания подсетей.

www.books-shop.com

www.books-shop.com

Часть 4 Организация работы служб Интранет/Интернет

www.books-shop.com

www.books-shop.com

Глава 10 Служба DNS

В этой главе: • Служба имен доменов (DNS) • Конфигурирование клиента DNS • Настройка сервера DNS с помощью BIND • Служба DNS для виртуальных доменов • Циклическая работа DNS для выравнивания нагрузки

г

лужба имен доменов (DNS — Domain Name Service) является сердцем Интернета. Поэтому сетевому администратору нужно научиться превращать систему Red Hat Linux в сервер DNS. Невозможно в одной главе рассказать о всех особенностях DNS, в этой главе будут рассмотрены только основы работы службы и практические операции с DNS. Наша цель состоит в том, чтобы помочь понять, как работает DNS и как реализовать сервер DNS для системы Red Hat Linux.

Как работает DNS

Интернет использует Интернет-протокол (IP). Другими словами, каждый компьютер (ресурс) в Интернете имеет уникальный IP-адрес и весь трафик каждого компьютера генерируется с помощью IP. Близкие параллели можно найти в общественных телефонных сетях. Каждый, кто имеет телефон, имеет уникальный телефонный номер. Чтобы сделать телефонный вызов, необходимо знать телефонный номер вызываемой стороны. Аналогично, чтобы общаться в Интернете, нужно иметь IP-номер. Но люди не любят запоминать большие номера. Поэтому нужен более простой способ общения, который обеспечивает DNS.

www.books-shop.com

190

Глава 10

Понять принципы работы DNS помогут примеры. Предположим, необходимо получить доступ к Web-сайту h t t p : / / w w w . i n t e g r a t i o n l o g i c . c o m / , чтобы выяснить, какие продукты и услуги предлагает компания Integration Logic, Inc. Для этого придется запустить браузер Web и ввести в качестве URL-адреса строку http: //www. integ rationlogic. com/. Если этот узел Web запрашивается в первый раз, в процесс вовлекается DNS. Рис. 10.1 демонстрирует схему этой работы. Рис. 10.1. Простая схема, показывающая, как работает DNS

Компьютер

Локальный сервер DNS (обычно расположенный в сети Интернет-провайдера)

Сервер DNS домена kitegrationLDgic.com Браузер Web соединяется с локальным сервером DNS (обычно это сервер DNS Интернет-провайдера), чтобы найти IP-адрес для www. i n t e g r a t i o n l o g i c . com (1). Локальный сервер DNS проверяет свою кэш-память, чтобы найти IP-адрес сайта (2). Если этот север DNS никогда раньше не получал запрос о www.integrationlogic.com, кэш-память не будет содержать о нем никакой информации. В таком случае локальный сервер DNS соединится с другим сервером DNS (обычно корневым), чтобы найти IP-адрес сервера DNS, ответственного за домен integrationlogic. com (3). Если www. integrationlogic. com действительно существует, сервер DNS домена i n t e g r a t i o n l o g i c . c o m вернет IP-адрес этого сайта. Локальный сервер DNS вернет IP-адрес браузеру Web и поместит IP-адрес в кэш-память для использования в будущем (5). Весь процесс может показаться немного запутанным, но в действительности он прост и прозрачен для конечного пользователя. DNS является системой разрешения имен хостов Интернета (компьютеров) в IP-адреса. Что произойдет, если при известном IP-адресе системы требуется узнать имя хоста? Именно для этого была создана DNS — разрешать как IP-адреса, так и имена хостов в обоих направлениях. В действительности, DNS выполняет больше функций, чем просто разрешение имен IP-в-хост и хост-в-IP; в следующих разделах этой главы вы узнаете о многих популярных и полезных областях применения DNS. Когда речь идет о DNS, примите решение: нужно выполнять сервер DNS или можно сконфигурировать систему как клиент DNS для удаленного сервера DNS (обычно Интернет-провайдера)? Прежде ответьте на следующие вопросы: • Хотите ли вы предоставить службу DNS для одного или нескольких собственных доменов Интернета?

www.books-shop.com

Служба DNS

191

• Хотите ли вы улучшить производительность службы DNS для часто запрашиваемых ресурсов Интернета? Если ответ положителен на эти вопросы, необходимо подумать о реализации локального сервера DNS. Однако вне зависимости от того, будет ли сер вер DNS выполняться в системе Red Hat Linux, систему все равно необходимо сконфигурировать как клиент DNS для локального или удаленного сервера DNS. Рассмотрим теперь, как сконфигурировать систему Red Hat Linux в качестве компьютера-клиента службы DNS. Конфигурирование клиента DNS (Resolver) ЕСЛИ из системы Red Hat Linux планируется доступ к другим хост-компьютерам Интернета, необходимо сконфигурировать ее как систему клиента DNS. Клиентская часть DNS называется resolver. Это несколько подпрограмм в библиотеке С, которые позволяют любой программе выполнять запросы DNS. Resolver поставляется в стандартном комплекте системы Red Hat Linux. В этом разделе вы научитесь конфигурировать resolver. Обычно программа установки Red Hat Linux спрашивает о сервере DNS и автоматически создает необходимые конфигурационные файлы resolver. Однако часто требуется отредактировать конфигурацию resolver, чтобы отразить какие-то изменения в используемом сервере DNS. Например, если resolver был сконфигурирован во время установки Red Hat Linux, но позже сменился Интернет-провайдер, то службу придется вручную сконфигурировать заново вот таким образом. Если планируется использовать сервер DNS Интернет-провайдера для разрешения имен и IP-адресов, попросите провайдера сообщить имя хоста и IP-адрес его сервера DNS. Когда требуемая информация будет получена, можно сконфигурировать resolver. Прежде всего необходимо изменить конфигурационный файл resolver, называемый /etc/resolv.conf. Листинг 10.1 показывает типичный файл /etc/resolv.conf для домена с именем nitec.com. Листинг 10.1. Конфигурационный файл /etc/resolv.conf процесса resolver № Используемый по умолчанию домен domain nitec.com ft Используемый по умолчанию список поиска search nitec.com # Первый сервер имен nameserver 206.171.50.50 # Второй сервер имен nameserver 206.171.50.55 Как и многие другие обычные конфигурационные файлы Linux, этот файл имеет очень простой формат. Любая пустая строка или строка, начинающаяся с «#», игнорируется. Имеющими смысл строками являются только строки с директивами domain, search или nameserver. Директива domain позволяет определить для системы имя используемого по умолчанию домена. Если этой строки нет, имя используемого по умолчанию домена автоматически извлекается из имени хоста системы. Директива search воздействует на то, как resolver будет искать имена хостов, которые не полностью квалифицированы. Например, если необходимо ввести команду ping www в оболочке системы с этим конфигурационным файлом resolver, программа ping запрашивает resolver для разрешения www. Так как www является частичным именем хоста, то resolver создаст полное имя хоста с помощью списка search (например, www. nitec. com) и пытаться разрешить IP-адрес для этого хоста. Например, если задать в директиве search значение integrationlogic.com (в предыдущем списке) и сделать тот же самый запрос ping, resolver возвратит IP-адрес сайта www. i n t e g r a t i o n l o g i c . c o m . Если

www.books-shop.com

192

Глава 10

директива search отсутствует, то автоматически используется имя используемого по умолчанию домена, когда нужно разрешить частичное (неполное) имя хоста. Директива nameserver используется для определения сервера имен доменов, который resolver должен использовать для запроса. Можно (и нужно) определить несколько директив name server в конфигурационном файле. Каждый сервер имен доменов опрашивается в порядке появления в конфигурационном файле. Например, если программа запрашивает resolver, чтобы разрешить имя хоста www. ad-engine, com, resolver сначала пытается разрешить имя в IP-адрес, используя сервер имен доменов 206.171.50.50. Если сервер имен доменов 206.171.50.50 не смог вернуть ответ (т.е. если запрос превысил лимит времени ожидания), тогда устанавливается соединение со вторым сервером имен доменов, 206.171.50.55. В настоящее время в конфигурационном файле разрешено использовать только три директивы name server. Рекомендуем задать по крайней мере две директивы nameserver для двух различных серверов имен доменов. Можно задать директиву nameserver для IP-адреса любого сервера имен доменов в Интернете. Однако необходимо использовать только IP-адреса ближайших серверов имен, чтобы сократить задержку при разрешении имен доменов. Никогда не используйте без разрешения в вашем конфигурационном файле resolver IP-адрес чужого сервера имен доменов. Это считается невежливым и может иметь юридические последствия, если resolver создает большую нагрузку на чужой сервер имен. Вы узнали, как конфигурировать resolver DNS в системе, чтобы использовать удаленные серверы DNS. Можно также жестко закодировать один или несколько IP-адресов на работу с соответствующими именами доменов в файле /etc/hosts. Этот файл имеет очень простой формат: Пример файла /etc/hosts: 206.171.50.50 picaso.nitec.com picaso 127.0.0.0 localhost localhost Resolver может использовать этот файл для разрешения адреса, когда недоступны удаленные серверы DNS. Если сеть не велика и не нужен локальный сервер DNS, можно использовать этот файл для разрешения локальных имен хостов. Однако когда доступны как удаленный сервер DNS, так и файл /etc/hosts, resolver должен знать, в каком порядке обрабатывать запросы DNS. Можно задать этот порядок в файле /etc/host.conf, используя директиву order. Например: order hosts,bind Если файл /etc/host.conf имеет такую директиву order, тогда resolver сначала попытается использовать файл /etc/hosts для обслуживания запроса, но если файл не содержит нужной записи, будут использоваться bind или серверы DNS, определенные в файле /etc/resolv.conf. I Если в сети много пользователей, можно улучшить ' производительность DNS, используя локальный сервер DNS до обращения к файлу /etc/hosts, поскольку чтение файла для каждого нового запроса DNS может быть медленным. Когда только что описанные файлы настроены, конфигурация resolver DNS завершена. Простейшим способом тестирования конфигурации DNS является проверка компьютера по ping в Интернете. Если программа ping не

www.books-shop.com

Служба DNS

193

работает (неизвестно имя хоста), дважды проверьте конфигурацию resolver DNS и устраните ошибки или опечатки. Выполнение собственного сервера DNS имеет несомненные административные преимущества. Например, если вы владеете одним или несколькими доменами Интернета, можно будет в любое время добавлять, удалять или изменять записи DNS. В следующем разделе вы узнаете, как настроить сервер DNS в системе Red Hat Linux.

Настройка сервера DNS

Red Hat Linux поставляется с программным обеспечением сервера имен доменов Интернета Беркли (BIND — Berkeley Internet Name Domain). Если он не был указан во время установки операционной системы, можно установить версию RPM этого программного обеспечения позже. Например, чтобы инсталлировать версию 8.2-6 программного обеспечения BIND для платформы *86, найдем пакет bind-8.2-6.i386.rpm в каталоге RPMS компакт- диска Red Hat Linux и выполним команду: rpm -ivh bind-8.2-6.1386.rpm

Упомянутый выше пакет RPM программного обеспечения BIND содержит три программы: /usr/sbin/named (сам сервер имен), /usr/sbin/named-xfer (вспомогательная программа сервера имен), /usr/sbin/ndc (программа управления сервером имен) и /usr/doc/bind-8.1.2/named-bootconf.pl (вспомогательный сценарий Perl для преобразования старых конфигурационных файлов в новый формат). Когда программное обеспечение BIND будет установлено, все готово для конфигурирования DNS.

Основы конфигурирования DNS

Первичным конфигурационным файлом сервера имен доменов BIND с именем «named» является /etc/named.conf. При запуске сервер named считывает конфигурационный файл, чтобы определить, как он должен действовать.

Файл /etc/named.conf

Этот файл состоит из операторов, комментариев и пустых строк. Комментарии Строка комментария может быть одной строкой, которая начинается с двух символов левой косой черты «/«.Например:

// Это строка комментария в named.conf

Или это может быть строка, которая начинается с символа «#». Например: » Это строка комментария в named.conf Или это может быть многострочный комментарий, который начинается с «/*» и заканчивается «*/». Например: /*

Это многострочный комментарий в named.conf Если вы знакомы с программированием на C++, С, Perl или похожими языками, можно заметить, что синтаксис строк комментариев похож на синтаксис этих языков. Помимо комментариев и пустых строк, которые игнорируются named, реальные конфигурационные строки называются операторами и имеют следующий синтаксис: keyword { // описание оператора }; Существует много типов операторов. Здесь будут рассмотрены только часто используемые.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

194

Глава 10

•i

Оператор options Оператор options позволяет задать глобальные параметры сервера имен. В файле named.conf можно использовать только один оператор options. Если оператор options не определен, по умолчанию используется оператор, в котором для каждого параметра заданы используемые по умолчанию значения. Внутри ограниченного скобками блока оператора options может находиться много параметров. Обычно используются: options { directory ; statistics-interval ; forwarders {[in_addr ; [in_addr; forward ( only | first );

Г . . ] ] };

}; Параметр directory позволяет определить путь доступа к рабочему каталогу сервера имен. Если каталог не определен, используемым по умолчанию рабочим каталогом является «.» — каталог, из которого был запущен сервер. Каталог должен быть указан абсолютным путем. Обратите внимание, что когда определяется относительный каталог как часть блока другого оператора, то он специфицируется относительно рабочего каталога. Параметр statistics-interval позволяет контролировать частоту генерации статистики, создаваемой сервером имен. По умолчанию сервер имен каждый час записывает статистику в используемый по умолчанию журнал (используя syslog в /var/messages). Если необходимо изменить это значение, добавьте нужный параметр и определите число минут, которое определяет интервал записи статистики в журнал. Можно немного сократить размер журнала и задать это число равным нулю. В этом случае запись статистики отключается. Если требуется, чтобы сервер имен пересылал запросы DNS другим серверам имен, можно задать список IP-адресов удаленных серверов имен с помощью параметра forwarders. Например: forwarders

{

206.171.50.10;

206.177.175.10;

>;

Здесь перечислены два IP-адреса двух различных серверов имен. Каждая пара IP-адресов должна быть разделена точкой с запятой. Используемый по умолчанию список forwarders пуст, поэтому никакой пересылки не выполняется; на все запросы отвечает сам сервер имен. Параметр forward используется, когда список forwarders не пуст. Этот параметр управляет поведением сервера имен. Если указать значение «first» (используется по умолчанию), тогда сервер имен будет посылать все запросы на forwarders. Если forwarders превысил время ожидания или не может ответить на запрос, сервер имен попытается выполнить поиск самостоятельно. Если задать параметру forward значение «only», тогда сервер имен будет запрашивать только forwarders, не пытаясь найти ответ самостоятельно. Для большинства сайтов оператор options будет выглядеть примерно так: options { directory "/var/named" };

Другими словами, наиболее распространенное использование оператора options состоит в определении рабочего каталога сервера. Рабочий каталог — это место, где будут храниться все файлы, имеющие отношение к домену или зоне. Оператор zone Помимо оператора options, оператор zone является единственным типом оператора, который можно найти в конфигурации named.conf практически любого узла. Чтобы настроить службу имен для домена Интернета, необходимо создать оператор zone в файле /etc/named.conf. Три обычно используемых оператора zone выглядят так: zone type master;

{

www.books-shop.com

195

Служба DNS

file ; }; zone { type slave; masters { ip_addr; [ip_addr; . . . ] > ; file ; >; zone "." { type hint; file ; }; Первый оператор zone используется для зоны master (первичной). Например, если требуется, чтобы сервер имен был официальным сервером имен для определенного домена, нужно задать зону master. Например: zone "ad-engine.com" < type master; file "ad-engine.db";

>:

Здесь сервер имен сконфигурирован как первичный сервер имен для домена ad-engine.com. Обратите внимание, что параметр file используется для описания имени файла специальной конфигурации зоны или домена. Если имя файла определяется относительно рабочего каталога сервера, файл должен находиться внутри этого каталога. Если указано несколько серверов имен для определенного домена, можно задать только один в качестве master или официального сервера имен (используя параметр «type master»). Остальные серверы имен (столько сколько нужно) должны быть указаны как серверы имен типа slave (подчиненный). Например: zone "ad-engine.com" { type slave; masters < 206.171.50.10; >; file "ad-engine.db"; >;

Здесь текущий сервер имен был задан как сервер имен slave для домена ad-engine.com. Список masters определяет один или несколько IP-адресов, с которыми соединяется slave, чтобы обновить свою копию зоны. Если определен параметр file, то в этот файл записывается точная копия конфигурации зоны. Рекомендуется использовать «file», так как это ускоряет запуск сервера. Можно определить в файле /etc/named.conf столько операторов zone, сколько требуется. Однако запрещено определять несколько конфигураций зоны для каждой зоны или домена. Например, запрещено настраивать сервер имен как master и slave для одной и той же зоны. Наконец, еще одним обычно используемым оператором является специальный оператор zone. Имя домена определено как «.», р тип сервера имен как «hint» или кэш. Эта специальная зона используется для определения нескольких корневых серверов имен. Когда запускается сервер имен, он применяет список hints, чтобы найти корневой сервер имен и получить самый свежий список корневых серверов имен. Теперь посмотрим на специальные конфигурации зоны и домена.

Специальные конфигурации зоны или домена

Для каждого домена или зоны Интернета нужно иметь два конфигурационных файла. Один конфигурационный файл нужен для настройки прямой трансляции DNS (имя_хоста-в-1Р), а другой файл нужен для настройки обратной трансляции DNS (1Р-в-имя_хоста). Например:

www.books-shop.com

196

Глава 10

zone "ad-engine.com" { type master; file "ad-engine.db"; }; zone "50.17l.206.in-addr.arpa" type master; file "db.206.171.50"; };

{

Два предыдущих оператора zone находятся в файле /etc/named.conf. Эти операторы zone настраивают сервер имен на режим официального master (первичный) сервера имен для домена ad-engine, com. Другими словами, этим сервером имен обрабатываются все трансляции имя_хоста-в-1Р (также известные как прямые трансляции DNS) для ad-engine, com. Второй оператор zone настраивает сервер имен на режим master (первичный) сервера имен сети 206.171.50.0; другими словами, все трансляции 1Р-в-имя_хоста (также известные как обратные трансляции DNS) для этой сети обрабатываются этим же сервером имен. Первый оператор zone утверждает, что информация о конфигурации для прямой трансляции в домене ad-engine.com хранит файл ad-engine.db, а второй оператор zone указывает, что конфигурация обратной трансляции DNS для сети 206.171.50.0 хранится в файле с именем «db.206.171.50». Оба эти файла состоят из записей ресурсов DNS (RR — resource record) и необязательных строк комментариев. Запись ресурса DNS имеет следующий синтаксис: {name}

{ТТЦ

addr-class

record-type

record-specific-data

Поле пате всегда является именем записи домена и должно начинаться в . первом столбце. Традиционно только первая запись ресурса DNS задает поле пате. Для всех остальных записей ресурсов в файле зоны, name можно оставить пустым; в этом случае запись берет имя предыдущей записи ресурса. Второе поле, TTL, является необязательным полем «Time to Live» (время жизни). Оно определяет, как долго информация будут храниться в базе данных. Если оставить это поле пустым, то используемое по умолчанию время существования определено в записи ресурса «Start of Authority» (начало полномочий или авторства). Третье поле, addr-class, является классом адреса. Единственным широко используемым классом адреса для адресов Интернета и другой информации является IN. Четвертое поле, record-type, определяет тип записи ресурса. Пятое поле, record-specific- data, определяет данные для типа записи в четвертом поле. Рассмотрим типичные записи ресурсов. SOA: Начало ПОЛНОМОЧИЙ Запись SOA или «Начало полномочий» используется для указания начала зоны. Синтаксис записи SOA: @ IN SOA nameserver. contact-email-address ( serial_number ; Serial refresh_number ; Refresh retry_number ; Retry expire_number ; Expire minimum_number ) ; Minimum

Первым стоит поле name. Оно всегда идентифицируется символом «@», и это поле не нужно повторять ни в какой другой записи ресурса того же файла. Поле nameserver используется для определения имени хоста текущего сервера имен, а поле contact-email-address указывает адреса электронной почты системного администратора домена. Остальные данные связаны с записью SOA и Используются для задания серийного номера вместе с различными значениями по умолчанию. Строка serial_number определяет номер версии этого файла зоны. Хотя в качестве серийного номера можно использовать любое положительное число, обычно указываются числа в формате «YYYYMMDDNNN». Здесь YYYY —

www.books-shop.com

Служба DNS

197

год, MM — месяц, DD — день, a NNN — число. Поэтому серийный номер «19990215001» сообщает, что последний раз файл зоны был изменен 15/02/1999 и было две ревизии после этой даты (000-001). Каждый раз, когда обновляется файл зоны, должен быть увеличен серийный номер, иначе изменение не будет применено. Строка refresh_number указывает, как часто (в секундах) вторичный сервер имен должен проверять первичный сервер имен, чтобы определить необходимость обновления. Обратите внимание, что если обновляется файл зоны master (или первичного сервера) на сервере имен master и не обновляется серийный номер, вторичный сервер имен не будет обновлять свою копию информации о зоне. Строка retry_number указывает, как долго (в секундах) вторичный сервер должен ожидать, прежде чем повторно попробовать неудачную пересылку зоны. Строка eхрire_питber определяет верхнюю границу в секундах, в течение которых вторичный сервер имен должен использовать данные зоны, прежде чем завершится срок их действия. Строка minimum_number является ограничением (в секундах), которое будет использоваться для поля «Time to Live» (TTL) в записях ресурсов, если это значение не указано в файле зоны. Это обязательный минимум времени существования, если оно определено в некоторой записи ресурса (RR) зоны. Должна существовать только одна запись SOA для каждой зоны. Вот пример записи SOA для домена с именем ad-engine, com: @ IN SOA ns.ad-engine.com. kabir.ad-engine.com. ( 1999020100 Serial 7200 Refresh - 2 ч 3600 Retry - 1 ч 43200 Expire - 12 ч 3600 ) Minimum - 1 ч

Здесь имя хоста сервера имен для ad-engine, com задано как ns. adengine. com, а контактным почтовым адресом является kabir@ad-engine. com. Обратите внимание, что символ «@» из адреса электронной почты заменен в записи SOA символом «.». Частота обновления равна 7200 с (два часа). Поэтому вторичный сервер имен для ad-engine.com будет опрашивать первичный сервер, чтобы проверить, увеличился или нет серийный номер зоны. Типичные значения лежат в диапазоне от 2 до 12 час и зависят от того, насколько часто меняется конфигурация зоны. Частота повторной попытки равна 3600 с (один час). Если сетевая неисправность помешает вторичному серверу имен обратиться к первичному серверу в конце цикла обновления (после каждых двух часов в нашем случае), то вторичный сервер должен ждать еще один час, прежде чем снова попробовать установить связь с первичным сервером. Период окончания действия задан как 43200 с (12 час). Это позволяет вторичному серверу использовать свою копию данных зоны в течение 12 час, если он не сможет обратиться к первичному серверу. Указанное значение очень важно, когда вторичный сервер DNS задан в другой сети. Его нужно задать достаточно большим, чтобы в случае отказа первичного сервера имен или его сети вторичный сервер мог бы предоставлять услуги DNS для наибольшего периода отсутствия связи. В этом примере вторичный сервер имен будет предоставлять услуги DNS в течение 12 час после того, как не сможет восстановить связь с первичным сервером и остановит службу DNS для этой зоны после указанного периода. Однако он будет по-прежнему регулярно пытаться связаться с первичным сервером имен. Минимальным числом является используемое по умолчанию значение TTL для записей ресурсов. Оно определяет, как долго запись ресурса остается в кэше сервера имен. Например, когда сервер имен запрашивает сервер имен ad-engine.com об определенной записи DNS, он будет сохранять ответ на запрос в своем кэше в течение 3600 с (1 час). Если информация DNS меняется часто, нужно увеличить это значение.

www.books-shop.com

198

Глава 10

NS: Сервер имен Запись NS используется для указания сервера имен, отвечающего за домен. Ее синтаксис: IN NS .

Обратите внимание, что поля name и TTL (записи ресурса) не определены, так как name необходимо указывать только в записях SOA с помощью символа «@», а значение TTL также определено в записи SOA с помощью числа. Например: IN NS ns.ad-engine.com.

Эта запись ресурса определяет, что ns.ad-engine.com является сервером имен для файла текущей зоны. Можно определить множество записей NS. Фактически нужно иметь по крайней мере две записи NS (одну для сервера имен master и одну для slave). Обратите внимание на точку в конце имени хоста сервера имен. В файле зоны необходимо ставить точку после всех полных имен хостов. А: Адрес Запись А используется для указания IP-адреса определенного хоста. Запись А используется для трансляции имени хоста в IP-адрес. Синтаксис записи: IN А Например: www.ad-engine.com.

IN A 206.171.50.51

Необходимо иметь по крайней мере одну запись А на хост. Можно также использовать сокращение для имени хоста. Например: www IN A 206.171.50.51

Эта запись эквивалентна предыдущей, если зоной является a d - e n g i n e , com. Другими словами, если не определять полное имя хоста, имя домена добавляется к сокращенному имени. Таким образом www превращается в www. ad-engine.com. PTR: Указатель имени домена Запись PTR используется для трансляции IP-адреса в имя хоста (обратная служба имен доменов). Синтаксис записи PTR: IP-address IN PTR hostname. Например: 206.171.50.51 IN PTR www.ad-engine.cora. Здесь IP-адрес 206.171.50.51 ассоциирован с хостом www.ad-engine.com. Можно также использовать сокращенную версию: 51 IN PTR www

Обычно провайдер услуг Интернета выполняет для сети первичную обратную службу DNS. CNAME: Каноническое имя Запись CNAME, определяет псевдоним (имя хоста) для канонического (официального) имени хоста. Синтаксис этой записи: alias IN CNAME . Например: webserver.ad-engine.com

IN

CNAME

www.ad-engine.com.

Здесь webserver, ad-engine, com является псевдонимом для www: ad-engine, com. Сокращенная версия выглядит так: webserver IN CNAME www

Обратите внимание, что когда необходимо будет разрешить w e b s e r v e r , adengine, com в какой-то IP-адрес, то будет возвращаться IP-адрес www. ad-engine.

www.books-shop.com

199

Служба DNS

com. Поэтому надо убедиться, что для канонического имени хоста существует по крайней мере одна запись А. MX: Обмен ПОЧТОЙ Запись MX используется для определения имени хоста, который задан в качестве почтового сервера SMTP домена. Синтаксис записи следующий: IN MX preference-value . Например: IN MX 0 mail.ad-engine.com. Номер предпочтения (preference-value) имеет смысл, только если в сети присутствует более одного почтового сервера. Например: IN MX 10 fast-mail-server.ad-engine.com. IN MX 20 slow-mail-server.ad-engine.com. Здесь меньшее значение номера указывает на большее предпочтение. Теперь, когда мы познакомились с основами записей ресурсов DNS, можно переходить к созданию серверов DNS: первичного, вторичного и кэширования. Master/первичный сервер DNS Предположим, что существует сервер named, выполняющийся на хосте ns. nitec. com, а в Internic недавно зарегистрирован домен с именем cl'assifiedworks. com, поэтому нужно настроить named на ns. nitec. com для предоставления услуг первичной DNS нового домена. Вот как это делается. Сначала необходимо создать следующий оператор zone в файле /etc/named, conf: zone "classifiedworks.com" { type master; file "classifiedworks.db"; }; Наш сервер имен является первичным для домена classif iedworks. com. Теперь нужно создать файл зоны classifiedworks.db в рабочем каталоге сервера имен, который указан оператором options { directory path_name};. Листинг 10.2 показывает пример файла зоны для домена classif iedworks. com. Листинг 10.2. Файл зоны домена classifiedworks.com @

IN SOA ns.nitec.com. 1999020100 ; 7200 ; 3600 ; 43200 ; 3600 ) ;

kabir.nitec.com. ( Serial Refresh - 2 hours Retry - 1 hour Expire - 12 hours Minimum - 1 hour

IN NS ns.nitec.com. IN MX mail.nitec.com. www IN CNAME www.nitec.com. ftp IN A 206.171.50.55 Значения записей SOA и NS таковы, что ns. nitec. com является сервером имен для домена classif iedworks. com. Нужно получать почту для этого домена через хост m a i l . n i t e c . c o m , поэтому соответствующим образом настроена запись MX. Для www. nitec. com введен псевдоним www. classif iedworks. com. Кроме того, запись типа А для f t p . classifiedworks.com ссылается на адрес 206.171.55. Итак, записи ресурсов позволяют конфигурировать файл зоны. После создания этого файла и сохранения его в рабочем каталоге сервера DNS, можно считать завершенным процесс конфигурирования первичного сервера имен.

www.books-shop.com

200

Глава 10

Slave/вторичный сервер DNS

Сконфигурировать вторичный сервер имен DNS несложно. Вручную придется отредактировать только файл /etc/named.conf. Например, домену classifiedworks. com нужен вторичный сервер имен DNS с именем ns2. nitec. com. Прежде всего, потребуется создать оператор зоны для сервера named с именем ns2. nitec. com, который мы уже видели в файле /etc/named.conf: zone "classifiedworks.com" { type slave; file "classifiedworks.db";

>; . /. Это вторичный сервер, поэтому не нужно вручную формировать файл classifiedworks.db. Его можно получить с первичного сервера имен домена classifiedworks. com, воспользовавшись программой named-xfer из дистрибутива named. Уже известно, что домен classifiedworks. com имеет первичный сервер имен ns.nitec.com, поэтому потребуется следующая команда named-xfer: named-xfer -z classifiedworks.com -f classifiedworks.db \ -s 0 ns.nitec.com

Ключ -z определяет имя зоны, параметр -f — имя файла зона, a -s — сервер имен, на котором в текущий момент находится нужная информация. После запуска программы в текущем каталоге создается файл classifiedworks.db. Переместив его в рабочий каталог сервера имен на компьютере ns2.nitec.com, можно считать законченной конфигурирование вторичного сервера DNS домена classifiedworks.com. •

Сервер DNS обратного разрешения

Самостоятельно управляя сетевыми IP-адресами, нужно иметь средство для их обратного разрешения. Например, в собственной IP-сети 206.171.50.0, используемой для предоставления конфигурационной информации DNS домену nitec. com, необходимо указать для этой сети зону обратного разрешения (просмотра) DNS. Рассмотрим как это сделать. Сначала внесем в файл /etc/named.conf новую зону: zone "50.171.206.in-addr.arpa" type master; file "db.206.171.50";

{

>; В конфигурационном описании использовано специальное имя зоны 50.171.206. in-addr.агра. Эта зона необходима для обратного разрешения сетевых номеров. На обратное разрешение указывает суффикс in-addr. агра в имени- зоны DNS. Затем в'рабочем каталоге сервера named требуется создать db.206.17l.50. Имя файла зоны обратного разрешения DNS может быть произвольным, но принято использовать синтаксис db. . Содержимое файла похоже на уже знакомые нам файлы зон, однако в нем находятся записи PTR, но нет записей типа A, CNAME и т.д. Пример файла db.206.171.50 приведен в листинге 10.3. Листинг 10.3. Пример файла зоны обратного разрешения DNS (db.206.171.50) @

IN SOA ns.nitec.com. kabir.nitec.com. ( 1999020100 ; Serial 7200 ; Refresh - 2 hours 3600 ; Retry - 1 hour 43200 ;'Expire - 12 hours 3600 ) ; Minimum - 1 hour

IN NS ns.nitec.com, 51.50.171.206.in-addr.arpa. IN PTR ns.nitec.com.

www.books-shop.com

Служба DNS



201

52.50.171.206.in-addr.arpa. IN PTR mail.nitec.com. 53.50.171.206.in-addr.arpa. IN PTR www.nitec.com. Записи PTR отображают три IP-адреса на три разных имени хоста. Допустимо использовать сокращенную форму для тех же самых записей:

51 IN PTR ns.nitec.com. 52 IN PTR mail.nitec.com. 53 IN PTR www.nitec.com. Во многих случаях Интернет-провайдер пользуется в сети собственными IP-адресами, поэтому на него возлагается обязанность по созданию первичной службы обратного разрешения DNS. Однако существует специальная сеть, где нужно самостоятельно организовать службу обратного разрешения имен. Это сеть 127.0.0, используемая для локальной кольцевой проверки интерфейса IP (127.0.0.1). Никто не получает авторства над этой сетью, поэтому службу обратного разрешения DNS нужно формировать самостоятельно. Именно поэтому в файле /etc/named.conf обязан присутствовать специальный оператор зоны, например: zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; Кроме того, в рабочем каталоге сервера имен должен находиться файл зоны named.local. Его содержимое показано в листинге 10.4. Листинг 10.4. Файл named.local @

IN SOA localhost.root.localhost. ( 1999020100 ; Serial 7200 ; Refresh - 2 hours 3600 ; Retry - 1 hour 43200 ; Expire - 12 hours 3600 ) ; Minimum - 1 hour

1

IN PTR localhost.

IN NS localhost. Вторичный сервер DNS режима «только кэширование» Все серверы DNS поддерживают кэширование, т.е. по умолчанию У: .. юльзуют кэш-память. Однако, когда нет надобности в предоставлении с ,ужбы DNS всем доменам Интернета, но требуется улучшить производительность запросов DNS в локальной сети, то можно запустить сервер DNS «только кэ. ширование» (cache-only). Такой сервер будет иметь файл /etc/named.conf, показанный на листинге 10.5. Листинг 10.5. Файл /etc/named.conf сервера DNS «только кэширование» zone "." { type hint; file "named.ca"; >; zone "0.0.127.in-addr.arpa" type master; file "named.local"; };

{

Первый оператор зоны указывает серверу имен на использование файла named.са для выявления в процессе запуска корневого сервера имен. Второй оператор определяет службу обратного разрешения имен для локальной закольцованной сети. Создание сервера имен «только кэширование» закончено.

www.books-shop.com

202

Глава 10

Изучив создание различных конфигураций сервера имен, перейдем к операциям управления этим сервером.

Управление сервером DNS

Дистрибутив named содержит прекрасную программу ndc, предоставляющую простой интерфейс командой строки для управления сервером имен.

Запуск сервера имен

Сервер имен должен автоматически запускаться во время старта системы. Если этого не произойдет, выполните следующие операции: 1. Зарегистрируйтесь на сервере имен по учетной записи root и перейдите в каталог /etc/rc.d/init.d. Проверьте, что в каталоге находится сценарий named. Если его нет, то переустановите дистрибутивный пакет RPM BIND с компакт-диска Red Hat. 2. Проверив наличие сценария /etc/rc.d/init.d/named, перейдите в каталог системного уровня выполнения по умолчанию (см. /etc/ inittab) — rc. Во многих системах по умолчанию установлен уровень выполнения 3, поэтому обычно нужно перейти в каталог /etc/rc.d/rc3.d/. 3. Создайте символьную ссылку SXXnamed, указывающую на сценарий /etc/rc.d/init.d/named. Символы XX замените большим числом (скажем, 55 или 85), чтобы предотвратить запуск сервера имен до завершения корректной настройки сетевого интерфейса. Например, создайте символьную ссылку S55named на сценарий named: In

-s

/etc/rc.d/init.d/named

S55named

После создания ссылки система будет стартовать сервер имен при каждой загрузке. Однако, когда необходим запуск сервера вручную, используйте программу ndc: ndc start

Перезагрузка конфигурации нового сервера имен

После изменения любого файла зоны или файла /etc/boot.conf нужно перезапустить сервер имен, иначе изменения не будут применены. Для этого выполните: ndc reload

Не забудьте изменить порядковый номер записи SOA во всех модифицированных файлах зон, иначе сервер имен не станет загружать новую конфигурацию. Если требуется предварительно остановить сервер имен, то вместо параметра reload укажите restart. ;

Остановка сервера имен

Когда нужно по каким-либо причинам остановить сервер имен, выполните следующую команду ndc: ndc stop

Просмотр статистики сервера имен

Программа ndc позволяет генерировать различную статистическую информацию о сервере имен, которая попадает в рабочий каталог этого сервера. Выполните: ndc stats

В рабочем каталоге будет создан файл named.stats, в который попадает разнообразная информация о сервере, включая число запросов на ресурсную запись. Любое изменение информации DNS должно сопровождаться проверкой конфигурации с помощью утилит запроса к серверу имен. В следующем разделе книги мы обсудим проверку конфигурации сервера имен.

www.books-shop.com

Служба DNS

203

Тестирование сервера DNS Для обращения к серверу имен вручную существует много разных утилит. Если хочется работать из командной строки, используйте дистрибутив RPM с именем bind-utils, находящийся на компакт-диске Red Hat. В дистрибутиве bind-utils собраны утилиты dig, dnsquery, host, nslookup и т.д. Лучше всего считается широко используемая утилита nslookup, поэтому рассмотрим ее использование для проверки конфигурации DNS. Предположим, только что в Internic зарегистрирован новый домен и для него сформирован сервер имен с необходимой для работы конфигурацией DNS. После перезапуска сервера имен нужно проверить конфигурацию утилитой nslookup. Запустив из командной строки утилиту nslookup, мы увидим имя хоста и IP-адрес сервера имен, который используется по умолчанию. Если запустить nslookup на системе, исполняющей сервер имен, мы увидим собственное имя и IP-адрес этого компьютера. Отсутствие информации говорит о неправильной конфигурации файла /etc/resolv.conf. С другой стороны, запуск nslookup на компьютере, не являющемся сервером имен, позволит указать проверяемый сервер. Это можно делать только тогда, когда Internic еще не внесла сведения о сервере имен в свой корневой сервер. Для проверки утилитой nslookup иного сервера, чем задан по умолчанию, введите в приглашении nslookup команду server , где является именем хоста тестируемого сервера. После этого nslookup будет использовать указанное имя во всех последующих запросах. Утилита nslookup позволяет выполнять любые типы запросов DNS, пользуясь несложным синтаксисом. Например, поиск сервера имен домена выполняется следующей командой утилиты nslookup: set query=ns domain.tld Первая строка указывает на запрос NS (запись сервера имен) к введенному во второй строке домену (domain.tld). Аналогично выполняются запросы к записям A, MX, CNAME и т.д. Если полученный ответ вам кажется некорректным, вернитесь к файлу зоны и проверьте, нет ли в нем опечаток. Самой распространенной ошибкой является отсутствие точки в конце полного имени хоста. Управление виртуальными доменами DNS Один сервер имен обслуживает несколько доменов. Это позволяет поддерживать одним компьютером службу имен в нескольких доменах. Многие Интернет-провайдеры предоставляют своим клиентам место под Web-сайты на собственных серверах. Поскольку такие домены обслуживаются через другие домены (например, через собственный домен Интернет-провайдера), такие домены называются виртуальными. Сегодня в Интернете весьма распространены домены такого типа. Многие заводят себе виртуальные домены. Когда возникнет задача ежедневного создания большого числа таких доменов, лучше автоматизировать этот процесс. В листинге 10.6 показан сценарий на языке Perl, который поможет в создании виртуального домена. Листинг 10.6. Сценарий makesite #!/usr/local/bin/perl -w use strict;

n

# Назначение: makesite создает виртуальные сайты. # Сценарий использует набор шаблонов формирования » конфигурационных # файлов DNS и HTTPD. # П Примечание: это очень «простой* сценарий.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

204

Глава 10

use Time::localtime; $ARGV[0] or &syntax; my Ssite '/scratch/dns/makesite'; my $MAKESITE_DIR 'httpd'; my SUSER 'httpd'; my $GROUP '2770'; my SPERMISSION my $BASE_DIR '/tmp 1 ; my SHTDOCS 'htdocs'; 'cgi-bin'; my SCGIBIN my $NAMED_PATH '/var/named'; 1 my $NAMED_FILE_EXT '.db ; "$MAKESITE_DIR/named.template"; my $NAMED_TEMPLATE 1 /etc/named.conf; my $NAMED_CONF '/usr/local/apache/etc/httpd.conf my $HTTPD_CONF my $VHOST_TEMPLATE "$MAKESITE_DIR/httpd.template"; "$BASE_DIR/makesite.log"; my SLOG FILE my $dir = Ssite; my @domain_types = qw(com net org edu); my ($domain_ext, $thesite_dir, $public_dir, $htdocs_dir, $cgibin_dir, $named_file, $dir_len, $temp_len); my $tm = localtime(time); my Sdate = sprintf("%s-%02s-%02$-%02d-%02d" $tm->year-t-1900, $tm->mon+1, $tm->mday, $tm->hour, $tm->min); my $serial = sprintf("%s%02d%02dOOO",

$tm->year+1900, $tm->mon+1. $tm->mday);

$site=- y/[A-Z]/[a-z]/; # Получим длину с учетом EXT $dir_len = length($dir); foreach $domain_ext (@domain_types){ .$dir =" s/\.$domain_ext//g;} it Получим новую длину без EXT $temp_len = length($dir); и Если пользователь не ввел расширение, показать синтаксис. &syntax if($temp_len == $dir_len); $named_file = $NAMED_PATH . '/' . $dir . $NAMED_FILE_EXT ; $thesite_dir = $BASE_DIR . '/' • $dir ; $htdocs_dir = $BASE_DIR . '/' . $dir . '/' .. SHTDOCS; $cgibin_dir = $BASE_OIR . '/' . $dir . '/' . SCGIBIN; die "$thesite_dir already exist! Aborted!\n" if (-e $thesite_dir), system("mkdir $thesite_dir"); system("mkdir ,$htdocs_dir"); '. system("mkdir $cgibin_dir"); &createNamedFile($named_file, Ssite, "$dir$NAMED_FILE_EXT"); &createIndexFile($htdocs_dir, $site); &createVirtualHostConf( domain=>$site,

www.books-shop.com

205

Служба DNS

website=>"www.$site", cgibin=>$cgibin_dir, htdocs=>$htdocs_dir); system("chown -R $USER.$GROUP $thesite_dir"); system("chmod -R SPERMISSION $thesite_dir"); open (FP, ">$LOG_FILE") || die "Can't write to log file.\n"; print FP "Sdate created www.Ssite [$htdocs_dir] site.\n"; close (FP); exit 0; sub createNamedFile { my $file = shift; my Sdomain = shift; my Sdatabase = shift; my $line; open'(OUT, ">$file") || die "Can't write $file\n"; open(FP, $NAMED_TEMPLATE) || die "Can't open $NAMED_TEMPLATE\n"; while ($line=) { Sline =" s//$domain/g; Sline =" s//$serial/g; print OUT Sline; } close (FP); close (OUT); open (FP, ">$NAMED_CONF") || die "Can't open $NAMED_CONF\n"; print FP « ZONE; // Sdomain был создан по значению Sdate zone "Sdomain" { type master; file "Sdatabase"; >; ZONE close (FP); > sub createlndexFile { my Shtdocs = shift; my Sdomain = shift; open(FP, ">$htdocs/index.html") || die "Can't write index.html \n"; print FP «INDEX.PAGE;

Sdomain

This is Sdomain Web site

In was created on Sdate





INDEX_PAGE close(FP); } sub createVirtualHostConf {

www.books-shop.com

206

Глава 10

my %params = @_; my $line; open (OUT, ">$HTTPD_CONF") || die "Can't open $HTTPD_CONF $!\n"; open (FP, $VHOST_TEMPLATE) || die "Can't open $VHOST_TEMPLATE $!\n"; while (Sline = ) { $line =" s//$params{domain}/g; Sline =' s//$params{cgibin}/g; Sline =' s//$params{htdocs}/g; Sline =" s//$params{website}/g; print OUT Sline;

} close(FP); close(OUT);

} sub syntax < print «SYNTAX; makesite Example: makesite nitec.com SYNTAX exit 0;

} Назначение этого сценария Perl состоит в создании виртуального Web-сайта с подходящей конфигурацией DNS и сервера Web Apache, не проводя длинного редактирования файлов. Например, необходимо создать новый Web-сайт с именем www.newdomain.com. Если бы нужно было все делать вручную, то пришлось бы сделать так: 1. Добавить новый оператор zone в файл /etc/named.conf для newdomain.com. 2. Добавить новый файл зоны для newdomain. com в рабочий каталог сервера имен. Его нужно было бы создавать с самого начала или скопировать и изменить файл существующего домена. 3. Создать корневой каталог документов Web-сайта и каталог сценариев CGI для домена в подходящем месте Web-пространства сервера. 4. Изменить конфигурационный файл сервера Apache, чтобы apache считал www. newdomain. com новым Web-сайтом. Так как ручная конфигурация этих важных файлов может сопровождаться ошибками, я решил написать сценарий makesite, который делает все эти действия автоматически. Например, чтобы создать узел www. newdomain. com с подходящей конфигурацией DNS и Apache, можно выполнить: makesite newdomain.com

Эта команда добавляет оператор zone (см. ниже) в файл /etc/named.conf: // newdomain.com был создан 1999-02-03-13-30 zone "newdomain.com" { type master; file "newdomain.db"; >;

Этот оператор создает файл newdomain.db в /var/named (рабочий каталог сервера имен), который показан на листинге 10.7. Листинг 10.7. Файл /var/named/newdomain.db @ IN SOA newdomain.com.

hostmaster.newdomain.com.

(

www.books-shop.com

207

Служба DNS

19990206000 7200 ЗббО 1728000 3600 )

serial YYYMMDOXXX refresh (1 hour) retry

(20 days) expire (1 hour) minimal TTL

; Name Servers IN NS ns.nitec.com. IN MX 10 mail.nitec.com. ; CNAME records www IN CNAME www.nitec.com. Сценарий затем добавит следующие строки в конце конфигурационного файла сервера Apache (htppd.conf):

я и Конфигурация домена www.newdomain.com #

ServerName www.newdomain.com Se rve rAdmi n webmaste r@newdomai n.com Document Root /tmp/newdomain/htdocs ScriptAlias /cgi-bin/ /tmp/newdomain/cgi-bin/ ErrorLog .logs/www.newdomain.com.error, log TransferLog logs/www.newdomain.com.access.log

# ft Конец описания конфигурации домена сайта www.newdomain.com tt И наконец, сценарий создает следующую структуру каталогов и страницу index.html для узла Web: ' /www/newdomain /www/newdomain/htdoc's - корневой каталог документов для узла Web /www/newdomain/cgi-bin - каталог cgi-bin Страница index.html хранится в каталоге /www/newdomain/htdocs/. Сценарий также задает полномочия для каталогов Web-сайта, чтобы только указанный пользователь и группа имели полномочия для чтения/записи. Так как сценарий делает всю грязную работу, можно создать множество виртуальных узлов, не беспокоясь о конфигурационных проблемах. И наконец, когда создание узлов будет закончено, можно перезапустить сервер имен и Web-сервер, чтобы привести все сайты в рабочее интерактивное состояние. Это в действительности простой, но полезный инструмент. Можно использовать его без всяких проблем. Сценарий makesite получает имя домена в качестве аргумента и использует два текстовых файла шаблона для создания конфигурационной информации сервера имен и Web-сервера. Листинг 10.8 показывает файл named.template, используемый для создания конфигурации сервера имен. Листинг 10.8. Файл named.template §

*

IN SOA . hostmaster.. ( ; serial YYYMMDDXXX

7200 ; refresh 3600 ; (1 hour) retry 1728000 ' ; (20 days) expire 3600 ) ; (1 hour) minimal TTL

www.books-shop.com

208

Глава 10

; Name Servers IN NS ns.nitec.com. IN MX 10 mail.nitec.com. ; CNAME records www IN CNAME www.nitec.com. Если внимательно посмотреть, можно увидеть, что в этом файле-шаблоне существует два специальных тега ( и ). 'Сценарий makesite считывает этот шаблон и заменяет теги подходящей информацией. Так как основная задача состоит в создании виртуального Web-сайта с подходящей конфигурацией DNS, нет необходимости в создании каких-либо записей А. Например, предыдущая конфигурация утверждает, что www. (например, www.newdomain.com) является псевдонимом www.nitec.com. Использование записей А требует много времени на техническое обслуживание большого количества виртуальных Web-сайтов (например, для изменения IP-адресов). Именно поэтому используется запись CNAME, чтобы, даже в случае необходимости изменения IP-адреса хоста www. nitec. com, вообще не нужно было бы модифицировать конфигурационные файлы виртуального домена. Листинг 10.9 показывает файл httpd.template, используемый для создания конфигурации сервера Apache. Листинг 10.9. Файл httpd.template #

# Конфигурация домена

#

# Как и с предыдущим шаблоном, можно заметить, что в этом файле используется несколько специальных тегов. Эти теги также заменяются соответствующей информацией. Чтобы использовать этот сценарий Perl в своем собственном окружении, сначала измените следующие строки в начале сценария: my $MAKESITE_DIR = '/usr/local/src/makesite';

Измените путь каталога на тот, где хранятся все файлы для makesite. 1

my $USER = 'httpd ;

Измените имя пользователя, если Web-сервер Apache запущен от имени другого пользователя (например, 'nobody') или как-нибудь иначе. my SGROUP = 'httpd';

Измените имя группы, если Web-сервер Apache запущен от имени другой группы (например, 'nobody') или как-нибудь иначе. my SPERMISSIONS = ' 2 7 7 0 ' ;

Измените значение полномочий, как того требуют обстоятельства. В примере только $USER и $GROUP имеют полный доступ к каталогу Web-сайта.

www.books-shop.com

Служба DNS

209

my $BASE_DIR = ' / w w w ' ; Измените это значение на базовый каталог всех Web-сайтов. my SHTDOCS = 'htdocs' ; Измените это значение на относительное имя каталога корневого документа для файла httpd.conf. Текущее, значение создает $ВА8Е_ШК/ $HTDOCS (по умолчанию: /WWV//htdocs) в качестве корня документов Web-сайта. my _$CGIBIN = 'cgi-bin'; Измените это относительное имя каталога, если не нужно, чтобы директива Apache ScriptAlias была задана как $ВА8Е_ВШ//$СС1ВШ (по умолчанию: /www/.cgi-bin). my $NAMED_PATH =' '/var/named'; Измените этот каталог на рабочий каталог сервера имен. my $L06_fILE '= "$BASE_DIR/fnakesite.log"; Измените это значение, если не требуется записывать файл журнала таkesite в базовом каталоге. Например, можно задать это как «/imp/makes!te. log» для записи в каталог /tmp. my $HTTPD_CONF = '/usr/local/apache/etc/httpd.conf'; Измените это значение, чтобы указать файл httpd.conf создаваемого Web-сервера. Когда сделаны все предыдущие изменения, необходимо будет изменить в соответствии с собственными требованиями файлы named.template и httpd.template и сохранить оба, эти файла в каталоге, где находится сценарий makesite. Наконец, убедитесь, что сценарий выполним и что строка интерпретатора Perl (строка #!) задана корректно. Будем надеяться, что это поможет избежать ошибок. Если есть навыки программирования на Perl, всегда можно будет настроить сценарий на конкретное окружение в той степени, как это нужно. Организации, которые управляют множеством виртуальных доменов, часто имеют много серверов. В следующем разделе будет показано, как использовать DNS для выравнивания нагрузки среди множества серверов. Выравнивание нагрузки с помощью сервера DNS :Идея состоит в распределении нагрузки среди нескольких серверов определенного вида. Обычно это используется для выравнивания нагрузки Web среди Web-серверов. Полученная схема называется циклической службой имен доменоэ. ; Предположим,,что есть два Web-сервера, www1.yourdomain.com (192.168.1.10) и www2.yourdomain.com (192.168.1.20), причем необходимо распределить нагрузку для www.yourdomain.com на эти два сервера с помощью циклической DNS. В файл зоны yourdomain.com добавьте строки: wwwl IN A 192.168.1.10 www2 IN A 192.168.1.20 www IN CNAME www1 www IN CNAME www2 Перезапустите сервер имен и проверьте по ping хост www.yourdomain.com. В выходных данных ping появится адрес 192.168.1.10. Остановите и возобновите ping этого же хоста, и теперь ping покажет второй IP-адрес. Это связано с тем фактом, что предыдущая конфигурация заставляет сервер имен циклически проходить по записям CNAME для www. Другими словами, хост www.yourdomain. com является одновременно wwwl. yourdomain.com и www2. yourdomain.com.

www.books-shop.com

210

ГлаваЮ

Теперь, когда кто-то входит на www. yourdomain. com, сервер имен будет сначала выдавать первый адрес, но следующий запрос будет предоставлять второй адрес и продолжать циклическое повторение этих адресов. Одним из недостатков этого подхода с циклической DNS является то, что сервер имен не может узнать, какая система перегружена, а какая нет; он вслепую выполняет работу в цикле. Если один из серверов отказывает или становится недоступным по какой-то причине, циклическая DNS будет попрежнему регулярно возвращать IP-адрес отказавшего сервера. Это внесет большой беспорядок, так как некоторые пользователи смогут получить доступ к серверу, а некоторые — нет. Если требуется улучшить управление и необходимо постоянно проверять работоспособность сервера, рекомендуем использовать аппаратные решения на основе новых устройств-директоров, таких как Web Director (http://www.radware.com/), Асе Director (http://www.alteon.com/) или Local Director (http://www.cisco.com/).

www.books-shop.com

Глава 11 Служба электронной почты

В этой главе: • Работа почта SMTP • Настройка DNS для почтовой службы SMTP • Настройка sendmail для почтовой службы SMTP • Тестирование конфигурации sendmail • Защита sendmail • Борьба со спамом • Настройка сервера почты POP • Настройка клиентов почты SMTP/POP

ожете ли вы представить Интернет без службы электронной почты (e-mail)? Большинство людей не могут. Служба e-mail является широко используемой службой Интернета. В этой главе мы узнаем о работе электронной почты и о создании сервера e-mail на сервере Red Hat Linux. На рис. 11.1 показана базовая блок-схема работы с e-mail. Пользователь с клиентским приложением e-mail посылает почтовое сообщение серверу e-mail. Сервер e-mail отправителя пересылает сообщение e-mail серверу e-mail получателя. Получатель принимает доступ к электронной почте с помощью клиентского приложения e-mail, которое запрашивает его сервер e-mail для получения всех непрочитанных сообщений e-mail. Теперь получатель может ответить отправителю подобным образом. Обычно между клиентом и сервером используется коммуникационный протокол, называемый протоколом почтовой службы (POP — Post Office Protocol) и упрощенным протоколом пересылки почты (SMTP — Simple Mail Transfer Protocol). Протокол POP используется для доставки электронной

www.books-shop.com

Глава 11

212

Основная блок-схема работы e-mail

Получатель

Локальный почтовый сервер SMTP/POPS

Локальный сервер DNS

Локальный почтовый сервер SMTP/POPS

Локальный сервер DNS

почты с сервера e-mail, a SMTP — для отправки почты на сервер. Локальный сервер SMTP посылает сообщение серверу SMTP, ответственному за получателя. Протокол POP не нужен, если клиент e-mail находится на самом сервере SMTP. Пересылка сообщений e-mail между серверами выполняется с помощью протокола SMTP. Посмотрим, как работает SMTP. Работа почты SMTP Упрощенный протокол пересылки почты (SMTP — Simple Mail Transfer Protocol) весьма прост. Сервер SMTP ожидает соединение на порту TCP номер 25. Другой сервер SMTP (или клиент) соединяется с этим портом и инициирует транзакцию e-mail с помощью простых команд SMTP. Фактически, можно использовать клиентскую программу Telnet с любого компьютера для соединения с известным сервером SMTP следующим образом: telnet 25 Здесь будет показано, как эмулировать клиент e-mail с помощью Telnet и как послать кому-нибудь сообщение e-mail. Так как мы уже выполняем сервер SMTP на одном из серверов Red Hat Linux, называемом blackhole.nitec.com, то можно просто выполнить telnet picaso. nitec.com 25, чтобы соединиться с локальным сервером SMTP. Далее представлен интерактивный сеанс SMTP. В процессе соединения telnet с портом 25 сервера SMTP с именем picaso. nitec.com выводится сообщение: 220 picaso.nitec.com ESMTP Sendmail 8.9.3/8.9.3/Rbl-Orbs-Dul; Sun, 21 Feb 1999 10:08:00 -0800 Это приветственное сообщение от сервера SMTP на picaso. nitec. com. Когда приветственное сообщение послано, сервер ожидает команды. Самая первая введенная команда SMTP: hello nitec.com Это порождает такой ответ сервера: 250 picaso.nitec.com Hello IDENT:[email protected] [206.171.50.50], pleased to meet you

www.books-shop.com

Служба электронной почты

213

Для получения справочной информации о доступных командах SMTP введите: help Сервер отвечает сообщением-справкой: 214-This is Sendmail version 8.9.3 214-Topics: 214HELD EHLO % MAIL RCPT DATA 214RSET NOOP ' QUIT HELP VRFY 214EXPN VERB ETRN DSN 214-For more info use "HELP ", 214-To report bugs in the implementation send email to [email protected]. 214-For local information send email to Postmaster at your site. 214-End of HELP info Эти команды можно использовать для создания сообщения e-mail. Во-первых, мы сообщаем серверу наш обратный адрес e-mail с помощью команды MAIL следующим образом: MAIL From: [email protected] Сервер отвечает сообщением-подтверждением: 250 [email protected]... Sender ok С помощью команды RCPT ему передается адрес e-mail получателя: RCPT То:

[email protected]

Сервер снова отвечает сообщением-подтверждением: 250 [email protected]... Recipient ok После передачи на сервер адресов e-mail отправителя и получателя введите содержимое сообщения e-mail. Для этого используется команда DATA: data Сервер отвечает следующим сообщением: 354 Enter mail, end with "." on a line by itself Мы вводим такое сообщение e-mail: Date: 01 Jan 2000 12:01:01 From: alter-ego To: [email protected] Subject: Ping! How are you on the first day of t,he new century? Is your computer still working? Later Yourself from the future. Сообщение заканчивается строкой с одной точкой. Сервер подтверждает сообщение, используя следующий ответ: 250 JAA01145 Message accepted for delivery Для завершения сеанса связи вводится команда QUIT: quit Сервер отвечает другим сообщением, и соединение с сервером закрывается: 221 blackhole.nitec.com closing connection Connection closed by foreign host.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

214

Глава 11

Так как сообщение e-mail, которое было здесь создано, пришло для учетной записи пользователя kabir@nitec. com, оно было получено с помощью клиентской программы e-mail через несколько секунд после того, как сообщение было задано с помощью Telnet (см. выше). Реальное сообщение вместе с заголовками показано здесь: Return-Path: Received: froiii reboot.nitec.net ([email protected] [206.171.50.51] by picaso.nitec.com (8.9.3/8.9.3) with SMTP ID KAA01163 for [email protected]; Sun, 21 Feb 1999 10:03:52 -0800 Message-ID:

Date: 01 Jan 2000 12:00:01 From: [email protected] To: [email protected] Subject: Ping! Status: X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 •X-UIDL:

36cdb3b500000032

How are you on the first day of the new century? Is your computer still working? Later

Yourself from the future. Полученное с сервера сообщение e-mail выглядит точно так же как и составленное ранее с помощью Telnet. Сообщение SMTP составляется клиентской программой e-mail. Подробное описание протокола SMTP дано в RFC 821. Когда в сети присутствует сервер SMTP, который включен и работает, весь процесс весьма прост. До формирования своего собственного сервера SMTP, выполняющегося на сервере Red Hat Linux, вам необходимо создать соответствующую конфигурацию DNS для доставки email. Настройка почтовой службы DNS Можно вспомнить из предыдущей главы (Служба DNS), что записи MX (Почтовый обмен) используются для идентификации ресурсов почтового сервера SMTP в конфигурации DNS для домена. Предположим, что нужно определить хост с именем mail.yourdomain.com в качестве почтового сервера SMTP для домена yourdomain. com. Запись SOA (начало полномочий) для yourdomain. com должна включать строку следующего вида:

IN MX preference-value . Здесь preferencevalue (значение предпочтения) является положительным (целым) числом и используется, когда существует несколько почтовых серверов SMTP. Если присутствует только один почтовый сервер SMTP, это число может иметь любое значение. Например: IN MX 5 mail.yourdomain.com. Единственный почтовый сервер SMTP mail.yourdomain.com был задан с уровнем предпочтения 5. Вот пример многосерверного сценария: IN MX 10 fast-mail-server.ad-engine.com. IN MX 20 slow-mail-server.ad-engine.com. Важную роль играют значения уровней предпочтения. Когда почтовый сервер SMTP из Интернета хочет послать почту по адресу someone@ad-engine. com, он сначала выполнит запрос DNS для поиска записи MX для ad-engine.com.

www.books-shop.com

215

Служба электронной почты

Запись MX, полученная почтовым сервером SMTP, будет выглядеть, как только что показанная. Затем почтовый сервер SMTP выберет fast-mail-server. ad-engine, com как предпочтительный почтовый сервер для доставки, так как он имеет больший приоритет (т.е. меньшее значение уровня предпочтения) из двух доступных серверов. После этого он попытается инициировать соединение SMTP (используя порт 25) с компьютером fast-mail-server, ad-engine, com. Если по каким-то причинам сервер fast-mail-server.ad-engine.com не доступен, для доставки выбирают сервер slow-mail-server, ad-engine, com. Поэтому наличие нескольких записей MX реализует избыточность системы доставки почты, что очень важно, когда в организации широко используется электронная почта. Всегда используйте в записи типа MX имя хоста, который имеет свою собственную запись типа А. Другими словами, не используйте в записях MX псевдонимы хостов. Подробности в RFC 1123. После настройки DNS с помощью подходящих записей типа MX, протестируйте конфигурацию. Для этого используйте команду nslookup -q=mx . Если DNS сконфигурирована правильно, то будут выведены только что созданные записи MX. После подобной проверки все готово к настройке почтовой службы SMTP.

Настройка почтовой службы SMTP

До настройки службы SMTP вы должны решить, какой почтовый сервер SMTP будет использоваться в системе Red Hat Linux. Существует много программ почтовых серверов SMTP. Однако среди них выделяется sendmail, которая используется во всем мире очень давно. Эта служба применяется по умолчанию почтовым сервером SMTP для Red Hat Linux. Посмотрим, как установить в системе sendmail.

Установка sendmail

Как любое другое серверное программное обеспечение, которое установлено в системе Red Hat Linux, sendmail поставляется в пакетах RPM. Однако нужно будет установить несколько пакетов RPM, а именно: • sеndmail-..rрm — основной дистрибутив • sendmail-cf-..rpm — дистрибутив конфигурационного файла почты sendmail • sendmail-config-..rpm — дистрибутив дополнительных конфигурационных файлов • sendmail-doc-..rpm — дистрибутив документации Чтобы установить эти пакеты, выполните rpm -ivh для каждого из них. Если во время установки Red- Hat Linux была установлена предыдущая версия sendmail, необходимо удалить пакеты sendmail до инсталлирования новой версии, так как они могут быть не полностью совместимыми. Для удаления пакета RPM используйте команду rpm -е . Точное имя пакета RPM вы можете найти с помощью команды rpm -q . Пакеты установлены. Теперь все готово к конфигурированию sendmail. Основным конфигурационным файлом для sendmail является /etc/sendmail.cf.

Запуск и остановка sendmail

Сервер sendmail еще не сконфигурирован, однако с ним можно работать. Чтобы запустить sendmail вручную, выполните следующую команду: /usr/sbin/sendroail -р

www.books-shop.com

216

Глава-11

Нужно только заменить значением времени. Обычно время задается в минутах или часах. Например, чтобы sendmail обрабатывал очередь почты каждые 15 минут, можно использовать -ql5m, а чтобы обрабатывать очередь каждый час, можете использовать -qlh. Можно определять также секунды, дни или недели. Например, можно определить -qlhSOm, чтобы sendmail обрабатывал очередь каждые полтора часа. ЕСЛИ у вас нет постоянного соединения с Интернетом, можно использовать/usr/sbin/sendmail -bd -о DeliveryMode=d. Таким образом вы сможете запустить sendmail в отложенном режиме, который исключает использование DNS, пока служба не будет запущена снова с помощью команды /usr/sbin/sendmail -q. Если вы соединяетесь периодически, можно поместить /usr/sbin/sendmail -q в задание сгоп, чтобы после установления соединения, очередь обрабатывалась автоматически. Если Требуется, чтобы сервер sendmail запускался автоматически после каждой загрузки системы, создайте символьную ссылку (начинающуюся с Sxx, где хх является числом) из каталога используемого по умолчанию уровня ВЫПОЛНЕНИЯ к сценарию /etc/rc.d/init.d/sendmail. Например, чтобы выполнять sendmail после каждой загрузки для многопользовательской системы (уровень выполнения 3), можно создать следующую символьную ссылку: In -s /etc/re.d/init.d/sendmail /etc/rc.d/rc3.d/S85sendmail После этого sendmail будет автоматически; запускаться во время каждой загрузки. Если посмотреть подобный сценарий, то можно увидеть, что sendmail запускается с параметром -bd, т.е. как демон (фоновый процесс). Можно изменить сценарий /etc/rc.d/init.d/sendmail, чтобы указать интервал очереди сайта. Можно также добавить следующий код прямо перед этой строкой (daemon /usr/sbin/sendmail -bd) в сценарии, чтобы автоматически выполнять newaliases и makemap на конфигурационных файлах при начальной загрузке системы:

newaliases for i in virtusertable access domaintable mailertable do if [ -f /etc/mail/$i ] ; then - echo "Making $i database for sendmail..." makemap hash /etc/mail/$i < /etc/mail/$i sleep 1 fi done sleep 1 Это гарантирует, что все конфигурационные базы данных восстанавливаются всякий раз, когда запускается процесс сервера. Сценарий /etc/rc.d/init.d/sendmail можно использовать для запуска, остановки или перезапуска sendmail. Для остановки sendmail выполните: /etc/rc.d/init.d/sendmail

stop

Для перезапуска sendmail введите: /etc/rc.d/init.d/sendmail restart Можно также заставить sendmail немедленно обрабатывать всю очередь. Для этого служит команда: /usr/sbin/sendmail -q

Если нужно обрабатывать очередь по частям, используйте параметр -qS. Вы сможете обработать очереди только тех сообщений, которые имеют указанную в адресе отправителя. Например:

www.books-shop.com

т

Служба электронной почты

/usr/sbin/sendmail -qSkabir заставит sendmail обрабатывать всю очередную почту для пользователя kabir. Можно также использовать -qR, чтобы заставить sendmail обрабатывать сообщения, которые имеют указанную в адресе получателя. Выполните команду mqueue, чтобы узнать, какие сообщения находятся в очереди в настоящий момент. Описание и конфигурация /etc/sendmail.cf Файл /etc/sendmail.cf в действительности предназначен для демона sendmail, и поэтому его синтаксис оптимизирован для демона. Новичков может напугать конфигурационный файл sendmail — так было со многими администраторами на протяжении многих лет. Конфигурационный файл /etc/sendmail.cf считается самым сложным конфигурационным файлом, с которым приходится иметь дело администратору UNIX. Может быть (и была) написана целая книга о конфигурации, которая находится в /etc/sendmail.cf. Однако не каждому администратору нужно знать подробности конфигурации /etc/sendmail.cf. В большинстве случаев ему даже не нужно изменять этот конфигурационный файл,' так как он укомплектован обычно используемыми конфигурациями. Здесь будет представлен краткий обзор конфигурационного файла, который поможет понять, как происходит настройка файла. Кроме того, вы сможете следовать инструкциям, находящимся на Web-узле sendmail ( h t t p : / / w w w . s e n d m a i l . o r g ) для реализации при необходимости некоторых дополнительных свойств,- Познакомившись с информацией, представленной в этой главе, вы сможете включить и запустить систему. Вы получите инструкции по изменению конфигурации. Что здесь отсутствует, так это создание своих собственных конфигурационных правил, которые требуют хорошего понимания внутренней работы sendmail. Структура файла sendmail.cf: • Пустые строки игнорируются • Строки комментариев, обозначенные ведущим знаком «#», также игнорируются • Строки, начинающиеся с С, D, F, Н, О, Р, V, К, М, S, R, являются строками конфигурации • Строки, начинающиеся с ведущего знака пробела, являются строками продолжения В следующих разделах будут кратко рассмотрены различные конфигурации, чтобы иметь представление о том, что каждая из них делает.

S и R: Правила перезаписи адреса

Строка «S» используется для отметки начала нового правила перезаписи. Она имеет синтаксис Srule, где rule— имя_правила/число. Например, S3 отмечает начало набора правил 3. Строка «R» определяет правило перезаписи адреса. Правило перезаписи может рассматриваться просто как^ оператор следующего вида: If (текущий адрес e-mail соответствует шаблону левой then Заменить текущий адрес шаблоном правой руки для правила1 end

руки для

правила)

Оно имеет такой синтаксис: R



Здесь LHS— шаблон левой руки, a RHS— шаблон правой руки правила. Например:

R$* < $.' > $*

$: $1 < $2 > $3

www.books-shop.com

218

Глава 11

Здесь шаблоном левой руки является $* < S* > S* , а шаблоном правой руки $: $1 < $2 > $3. Оба шаблона состоят из различных метасимволов, таких как $*, $+, $-, $=х, и $-х. Правила перезаписи являются достаточно сложными и обычно не требуют никаких изменений администратором. Однако, если планируется написание своих собственных правил перезаписи, необходимо прочитать руководство Sendmail Installation and Operation Guide (Руководство по установке и использованию sendmail), поставляемое вместе с документацией sendmail. D: Определить макрос Строка «D» определяет макрос. Синтаксис: 0 Например: DP someword Это то же самое, что и $Р = someword, и всякий раз когда где-нибудь ссылаются на $Р, макрос заменяется на someword. Обычно не требуется добавлять, удалять или перемещать какие-либо определения макросов «D». С и F: определить классы Строки «С» аналогичны строкам «D». Синтаксис такой строки следующий: С . . . Например: СА strl str2 str3 Здесь класс Д является списком строк strl, str2, str3. Строки «F» подобны строкам «С», за исключением того факта, что строка «F» используется для определения класса, который считывается' из файла. Например: Fw/etc/mail/sendmail.'cw Класс w является списком всех имен доменов в файле /etc/mail/sendmail.cw. Этот файл должен содержать одну запись на строку. Единственной другой строкой «F», которая находится в файле sendmail.cf, является: FR-o /etc/raai.l/relay-doitiains Класс R является списком всех имен доменов в /etc/mail/relay- domains. Обратите внимание на параметр -о, благодаря которому эта строка становится необязательной. Другими словами, sendmail не будет, возражать, если этот файл окажется пустым. -Обычно здесь не требуется никаких изменений. Однако если нужно, чтобы служба sendmail проявила недовольство, когда не определены домены-ретрансляторы, можно удалить параметр -о из предыдущей строки FR. М: Определить почтальона (mailer) Строка «М» используется для создания определения программы-почтальона. Синтаксис этой строки следующий: М =, =, . . . Например: Msmtp, P=[I.PC], F=mDFMuX, 3=11/31, R=21/31, E=\r\n, L=990, T=DNS/RFC822/SMTP Здесь определяется программа-почтальон SMTP. Обычно не нужно делать никаких изменений в стандартных определениях программ-почтальонов.

Н: Определить заголовок Строка «Н» используется для создания определения заголовка. Синтаксис для такой строки:

www.books-shop.com

Служба электронной почты

219

Н[?flags?]: Например: H?P?Return-Path: HReceived: $?sfrom $s $.$?_($?s$|from •$.$_) $,by $3 ($v/$Z)$?r with $r$. id $i$?u for $u; $|; $.$b

H?D?Resent-Date: $a H?D?Date: $a H?F?Resent-From: $?x$x $|$g$. H?F?From: $?x$x $|$g$. H?x?Full-Name: $x H?M?Resent-Message-Id: H?M?Message-Id: Каждая из предыдущих строк «Н» определяет почтовый заголовок. Не нужны никакие изменения в определениях заголовков.

О: Задать параметр

Строка «О» используется для задания глобальных параметров sendmail. Синтаксис этой строки:

О = В таблице 11.1 представлены все доступные параметры последней версии (8.9.sc)sendmail.

аблица 11.1. •

Параметры sendmail Параметр AliasFile=/etc/mail/aliases AliasWait=30m AutoRebuildAliases=True BlankSub=. CheckAiases=False ClassFactor=1800 ConnectkxiCacheSize=2 ConnectionCacheTimeout=5m ConnectionRateThrottte=20

DefaultUser=8:12

Пояснение Задает имя файла базы данных псевдонимов. Изменяйте только в том случае, если храните базу данных псевдонимов в месте, отличном от /etc/mail/aliases Используемое по умолчанию время ожидания в минутах для загрузки псевдонимов при запуске. Не изменяйте это Если задан как True, sendmail пытается восстановить базу данных псевдонимов, когда необходимо и возможно. Не изменяйте Задает символ подстановки пробела. Не изменяйте Если задано как True, проверяет на достоверность правую сторону псевдонима в базе данных псевдонимов. По умолчанию задается False. Изменять не рекомендуется Используется для вычисления приоритета сообщения. Не изменяйте Максимальное число открытых соединений, которые будут кэшироваться в любое время ' Максимальное время (в минутах), в течение которого кэшированное соединение будет поддерживаться открытым во время периода ожидания Ограничивает число демонов-процессов в секунду для входящих соединений. Когда его значение равно 0, устанавливается неограниченное (т.е. столько, сколько позволят ресурсы системы) число процессов-демонов в секунду Используемые по умолчанию пользователь и группа для программ- почтальонов. DID 8 используется по умолчанию для пользователя 'mail' в /etc/passwd, a GID 12 используется по умолчанию для группы 'mail' в файле /etc/group. Изменять не рекомендуется

www.books-shop.com

220

Глава 11

Таблица 11.1 (продолжение)

Б

Параметр

DeliveryMode=background BghfflitMode=pass8 ForkEachJob=FAlSE

FowardPath=$z/.forward.$w+$h: $z/.forward+$h:$z/.forward.$w: $z/.forward HelpRte=/usr/lib/sendmail.hf HoldExpensive=False

HostStatusOirectory=.hoststat

HostsRte=/etc/hosts LogleveNS MatchGECOS=False

MaxOeamonChildren=40 MaxHopCount=30 MaxMessageSize=5000000 MeToo=False

MinFreeBkx*s=100

MinQueueAge=10m

NoRecipientActfon=add-to-undisclosed

OkJStyteHeadefs=Ta)e

Пояснение Выполняет sendmail в фоновом режиме. Никаких изменений не требуется Задает, как обрабатываются восьмибитовые данные. Оставьте значение по умолчанию Когда задан как TRUE, создается отдельный процесс для обслуживания каждого сообщения в очереди. Никаких изменений не требуется Задает путь доступа для поиска файла .forward каждого пользователя. Изменений не требуется Задает местоположение файла справки Когда задан как True, «дорогостоящим» (с большими требованиями к ресурсам. - Прим, ред.) почтальонам (отмеченным с помощью флага F=e в строке М для почтальона) запрещено немедленное соединение. Оставьте значение по умолчанию Задает имя каталога для информации о статусе хоста. Используемое по умолчанию значение создает каталог как /var/spool/rnqueue/.hoststat. Изменений не требуется Задает имя файла хостов. Изменений не требуется Задает используемый по умолчанию уровень записи журнала. Изменений не требуется Когда параметр равен True, sendmail будет выполнять нечеткий поиск в файле /etc/passwd, чтобы найти «похожее» имя пользователя в поле GECOS каждой записи пароля. Рекомендуется использовать значение по умолчанию Максимальное число порожденных разветвляющихся (fork) процессов- потомков в любое время Максимальное число попыток обработки сообщения до того, как оно будет отвергнуто Максимальный размер сообщения в байтах. Сообщения такого размера больше приниматься не будут Когда псевдоним содержит сведения об отправителе, sendmail автоматически удаляет отправителя из расширения. Если этот параметр задан как True, отправитель будет получать почту. Можно задать данное значение как True, в этом случае сократится число обращений за технической поддержкой от пользователей, которые хотят получать почту, даже если она исходит от них самих Минимальное число свободных блоков, которые позволят sendmail принять сообщение. Это гарантирует, что никто не сможет занять дисковое,пространство, бомбардируя сервер почтой (т.е. посылая множество копий больших почтовых сообщений). Можно увеличить этот параметр относительно значения по умолчанию Сообщение должно сохраняться в очереди, по крайней мере в указанный период времени, прежде чем оно будет обрабатываться Когда сообщение не содержит подходящий заголовок получателя, выполняется определенное действие. Используемое по умолчанию значение создает заголовок «То: undisclosed-recipients Переключатель старый/новый формат заголовка. Изменений не требуется

www.books-shop.com

221

Служба электронной почты

Таблица 11.1 Е (продолжение)

Параметр OperatorChars=.:%@!7D+ PrivacyOptK>ns=r)eedvrtyheto,restrertmailq, restrictqrun.goaway QueueOirectofy=/var/spool/nx)ueue QueueLA=8 QueueSortOrder=Host

RedpientFacton=30000 RefuselA=12 RetryFactor=90000 RunAsUser=mail

SendMimeErrors=True

SevenBitlnput=False

0 SmtpGreetingMessage=$j Sendmail $v/$Z; $b

Staiusfite=/var/log/sendmail.st SuperSafe=True TempRleMode=0600 Tlmeout.command=30m Tinoeout.connect=3m Timeout.databk)ck=1h Timeout.datafinal=1h Timeout.datainit=5m

Пояснение Список маркеров (разграничивающих символов). Изменений не требуется Смотрите подраздел об обеспечении секретности в разделе «Безопасность sendmail» в этой главе Полностью квалифицированный путь доступа каталога очереди Когда средняя нагрузка системы превышает указанное число, вместо отсылки сообщений помещайте их в очередь Задает порядок сортировки очереди. Используемое по умолчанию значение позволяет sendmail сортировать очередь, применяя имена хостов получателей. Для сортировки почты с помощью заголовка приоритета можно изменить его на «Priority». Для сортировки по времени отправки можно задать его как «Time» Это значение используется для снижения приоритета сообщения, которое имеет большое число получателей Когда средняя нагрузка системы превышает указанное значение, отвергайте входящие соединения Это значение используется для снижения приоритета. Изменять не рекомендуется Этот параметр определяет имя пользователя, которое sendmail использует для всех своих процессов-потомков. Другими словами, процессы-потомки sendmail, которые порождены для обслуживания реальных запросов, не выполняются суперпольэователем, тем самым улучшая защиту. Делать изменения не рекомендуется Когда этот параметр равен True,-сообщения об ошибках задаются с помощью форматов MIME Никаких изменений не требуется Когда этот параметр задан как True, сообщение преобразуется в семибитные данные. Не изменяйте значение по умолчанию Задает приветственное сообщение, которое sendmail посылает, когда осуществляется соединение. Если вы не хотите сообщать всеми миру о версии sendmail, которую используете, удалите переменные $v/$Z из этой отроки. Таким образом сократится число путей проникновения в систему Полностью квалифицированный путь доступа файла статуса Переключатель режима усиленной защиты. Рекомендуется используемая по умолчанию настройка Задает используемый по умолчанию режим для временных файлов в очереди Используемое по умолчанию значение времени ожидания команд SMTP Используемое по умолчанию значение времени ожидания соединения Используемое по умолчанию значение времени ожидания для блоков данных Используемое по умолчанию значение времени ожидания для конечной '.' ('точки') в данных Используемое по умолчанию значение времени ожидания для команды DATA

www.books-shop.com

222

Глава 11

Таблица 11.1 I (продолжение)

Параметр

Пояснение

Tirneout.fileopen=60s

Используемое по умолчанию значение времени ожидания для открытия файлов .forward и rinclude:

Timeout.helo=5m

Используемое по умолчанию значение времени ожидания для команды НЕЮ Статус хоста устаревает после указанного периода времени ожидания Используемое по умолчанию значение времени ожидания для начального приветственного сообщения

Timeout.hoststatus=10m

,

Timeou1.initial=5m Timeout.mail=10m Timeout. misc=2m Timeout.queueretum.non-urgent=7d Tlmeout.queuereturn.normal=5d Timeout.queueretum.urgent=2d Timeout.queueretum=5d Timeout.queuewam.non-urgent= 12h Tirneout.queuewarn.norrnal=6h Timeout.queuewam.urgent=2h Timeout.queuewarn=6h Timeout.quit=2m

Используемое по умолчанию значение времени ожидания для команды MAIL Используемое по умолчанию значение времени ожидания для команд NOOP и VERB Время ожидания до возвращения несрочного сообщения отправителю Время ожидания до возвращения обычного сообщения отправителю Время ожидания до возвращения срочного сообщения отправителю Время ожидания до возвращения сообщения отправителю Время ожидания до посылки предупреждения о невозможности доставки несрочного сообщения отправителю Время ожидания до посылки предупреждения о невозможности доставки обычного сообщения отправителю Время ожидания до посылки предупреждения о невозможности доставки срочного сообщения отправителю Время ожидания до посылки предупреждения о не доставленном сообщении отправителю Используемое по умолчанию время ожидания для команды QUIT

Timeout.rcpt=30m

Используемое по умолчанию время ожидания для команды RCPT

Timeout.rset=5m

Используемое по умолчанию время ожидания для команды RSET

UnixFromline=From $g $d

Определяет формат, используемый для строки From: в стиле UNIX Когда этот параметр задан как True, такие файлы как .forward, :incrude: считаются незащищенными, когда они предоставляют право для записи группе. Не изменяйте используемое по умолчанию значение Когда этот параметр задан как True и возникает ошибка, sendmail будет использовать заголовок ErrorsTo (если доступен) для сообщения об ошибке. Не изменяйте используемое по умолчанию значение

UnsafeGroupWrites=True

UseErrorsTo=False

Р: Определения старшинства

Строка «Р» используется для задания значений поля заголовка «Precedence:» (приоритетность). Синтаксис для этой строки следующий: Р = Например: Pfirst-class=0

www.books-shop.com

223

Служба электронной почты

V: Уровень версии конфигурации Строка «V» используется для совместимости с более старыми версиями конфигурации. Не нужно делать никаких изменений в такой строке. К: Объявление файла ключей Строка «К» служит для определения отображения. Синтаксис для этой строки: К Например: Kaccess hash -о /etc/mail/access.db Теперь посмотрим на другие конфигурационные файлы sendmail в каталоге /etc/mail. Конфигурирование файлов /etc/mail/* В этом разделе рассматриваются конфигурационные файлы sendmail, находящиеся в каталоге /etc/mail. Ограничение доступа к серверу sendmail с помощью /etc/mail/access Подобный конфигурационный файл может использоваться для создания базы данных ограничений доступа к серверу sendmail. Можно контролировать доступ к серверу sendmail на основе домена, поддомена, IP-адреса или сети. Конфигурационные строки в этом файле имеют такой формат: host or user Здесь 'host or user' может быть полностью или частично квалифицированным именем хоста, именем домена, IP-адресом, сетевым адресом или адресом e-mail, таким как wormhole.nitec.com, nitec.com, 192.168.1.10, 192.168.1.0, spammer@somewhere. com и т.д. Доступные параметры контроля показаны в таблице 11.2. Пример конфигурации /etc/mail/access Any-spam-maker.com cli6nt-domain.com annoying-company.com кэблица 11.2. • Параметр Конфигурационные параметры для базы ок данных /etc/mail/access REIAY

REJECT DISCARD 501 553 550

REJECT RELAY DISCARD

Описание ^__ Вы можете принимать почту, даже если другие конфигурационные правила будут требовать отвергнуть почту указанного хоста или пользователя Действует как ретранслятор почты SMTP для указанного хоста. Можно принимать почту, предназначенную для пользователей, в указанном домене. Кроме того, пользователям разрешается в указанном домене посылать почту с помощью этого сервера. Не отвергает почту из указанного домена, даже если другие правила будут требовать, чтобы вы это делали Отвергать всю (входящую/исходящую) почту указанного домена Отбрасывать сообщение полностью, используя $#discard mailer. Отброшенные сообщения принимаются. Важно, чтобы отправитель думал, что они были доставлены Не принимать почту, если адрес отправителя частично или полностью совпадает с указанным user@host Не принимать почту, если адрес отправителя не содержит имени хоста Не принимать почту для указанного имени домена

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

Глава

224 [email protected]

11

501 You can't use this mail server.

Здесь вся почта из any-spam-maker. com будет отвергнута, вся входящая и выходящая почта для client-domain.com будет ретранслироваться, вся почта из annoying-company, com будет приниматься, но отбрасываться без уведомления, а любая почта от [email protected] будет отвергаться с сообщением «You can't use this mail server» («Вам нельзя использовать этот почтовый сервер»). Обратите внимание, что sendmaij не использует непосредственно конфигурационный файл /etc/mail/access. Служба пользуется версией файла для базы данных DBM. Чтобы создать необходимый файл DBM для файла /etc/mail/access, выполните команду: makemap hash /etc/mail/access < /etc/mail/access С помощью этой команды создается необходимый файл базы данных DBM (такой как /etc/mail/access.db) в том же каталоге. Вам не нужно перезапускать демона sendmail всякий раз, когда этот файл изменяется.

Создание псевдонимов для пользователей с помощью /etc/mail/aliases

Этот конфигурационный файл позволяет создавать базу данных псевдонимов пользователей. Предположим, что необходимо создать псевдоним саrol.godsave для пользователя с именем carol. Для этого можно использовать такой конфигурационный файл: : Для создания псевдонима carol.godsave можно добавить в этот конфигурационный файл строку: carol.godsave: carol Когда sendmail получает почту для са rol . godsave@you rdomai n . com, она будет доставлена учетной записи carol на почтовом сервере. Одним из действительно полезных применений псевдонимов является создание локальных групп. Например: web-developers: keith, cynthea, Jason Эта строка определяет псевдоним web-developers, который может использоваться для отправки сообщений e-mail указанным пользователям. Используемый по умолчанию файл /etc/mail/aliases уже содержит множество используемых по умолчанию псевдонимов. Можно изменять их так, как будет удобно. Обратите внимание на то, что если существует пользователь с тем же именем, что и псевдоним, почта будет послана пользователям, определенным в псевдониме. Например: root: kabir Для отправления почты по адресу root@nitec. com (несмотря на то, что существует учетная запись пользователя с именем root на почтовом сервере) почта все равно будет посылаться пользователю kabir. Можно также сцепить псевдонимы. Например: root: kabir kabir: mohammed Здесь псевдоним root разрешается в псевдоним kabir, который разрешается в mohammed. Поэтому почта, посылаемая по адресу root@localhost, может дойти до почтового ящика пользователя с именем mohammed. Обратите внимание, что sendmail не использует непосредственно конфигурационный файл /etc/mail/aliases. Применяется версия этого файла для базы данных DBM. Чтобы создать соответствующий файл DBM для файла /etc/mail/aliases, выполните следующую команду:

newaliases

www.books-shop.com

225

Служба электронной почты

Она создаст необходимый файл базы данных DBM (такой как /etc/mail/ aliases.db) в том же каталоге. Вам не нужно перезапускать демон sendmail всякий раз, когда этот файл изменяется. ПРИМЕЧАНИЕ

Выполнение newaliases эквивалентно выполнению команды sendmail -bi. Отображение доменов с помощью /etc/mail/domaintable Подобный конфигурационный файл может использоваться для создания базы данных отображений имен доменов, таких как: Yet-another-domain.com yourdomain.com . Здесь yet-another-domain.com отображен на yourdomain.com. Поэтому когда получена почта для [email protected], она пересылается на адрес [email protected]. Обратите внимание, что домен назначения (yourdomain. com) должен быть полностью квалифицированным именем домена. Кроме того, имейте в виду, что отображение доменов в таблице доменов представлено в заголовках, т.е. это делается в наборе правил 3. В данном случае sendmail не использует непосредственно конфигурационный файл /etc/mail/domaintable. Применяется версия этого файла в базе данных DBM. Чтобы создать необходимый DBM файл для файла /etc/mail/domaintable, выполните команду: makemap hash /etc/mail/domaintable < /etc/mail/domaintable С ее помощью в том же каталоге будет создан необходимый файл базы данных DBM (такой как /etc/mail/domaintable.db). He нужно перезапускать демон sendmail всякий раз, когда этот файл изменяется.

Переадресация почты для доменов с помощью /etc/mail/mailertable

Этот конфигурационный файл служит для создания базы данных переопределения используемых по умолчанию маршрутов почты указанных доменов. Формат этого файла: Например: visitor-01.mydomain.com local:visitor"! Когда приходит почта для v i s i t o r - 0 1 . m y d o m a i n . c o m , она переадресуется локальному пользователю visitor 1. Обратите внимание, что можно использовать только те программы-почтальоны, которые определены с помощью строки «М» в файле /etc/sendmail.cf. При просмотре файла /etc/sendmail.cf можно увидеть, что в качестве почтальонов выделены qsmtp, procmail, smtp, esmtp, smtpS, relay, Usenet, uucp, uucp-ol, suucp, uucpnew, uucp-om, uucp-uuom, local, prog. Можно также определять частичные имена доменов в качестве имени исходного домена. Например: .mydomain.com smtp:mail-hub.mydomain.com Здесь указано, что почта для хостов *. mydomain. com будет пересылаться на сервер mail-hub.mydomain.com с помощью почтальона SMTP. ПРИМЕЧАНИЕ

Необходимо иметь подходящую'запись MX для исходного домена, иначе почта никогда не будет доставлена. Рассмотрим другой пример:

ad-engine.com smtp:[email protected]

www.books-shop.com

226

Глава 11

Вся почта для ad-engine, com будет доставляться пользователю kabirfintegrationlogic.com с помощью почтальона SMTP до тех пор, пока ad-engine.com не попадет в файл /etc/mail/sendmail.cw. Обратите внимание, что sendmail не использует непосредственно конфигурационный файл /etc/mail/mailertable. Применяется версия этого файла в базе данных DBM. Чтобы создать необходимый DBM файл для файла /etc/mail/mailertable, выполните команду: makemap hash /etc/mail/mailertable < /etc/mail/mailertable С помощью этой команды буден создан необходимый файл базы данных DBM (например, /etc/mail/mailertable. db) в том же каталоге. Не нужно перезапускать демон sendmail всякий раз, когда этот файл изменяется. Настройка пересылки почты с помощью /etc/mail/relay-domains Последняя версия sendmail (v8.9.x) запрещает неавторизованную пересылку почты по умолчанию. Другими словами, если не будет явно указано на прием почты другого домена, то sendmail откажется это сделать. Предположим, что последняя версия sendmail используется на хосте с именем mail . mydomain.com. Если кто-то неизвестно откуда пытается использовать mail.mydomain.com для доставки почты на другой сервер SMTP, то по умолчанию сервер sendmail будет отвергать такие запросы. Это позволяет устранить злоупотребление пересылкой почты людьми, которые рассылают ненужные почтовые сообщения. Чтобы разрешить использование сервера sendmail для пересылки законным доменом, необходимо определить домены в файле relay-domains. Следует добавить свой собственный домен и любые другие дружественные домены, для которых необходимо разрешить операцию пересылки. Например: nitec.com integrationlogic.com ad-engine.com ,

'

Кроме того, можно использовать IP-адреса в форме сетевого адреса или полного IP-адреса. Чтобы протестировать конфигурацию пересылки, выполните: echo '$=R' | sendmail -bt Эта команда должна показать все допустимые домены. Настройка пунктов назначения локальной доставки: /etc/mail/sendmail.cw Файл sendmail.cw можно использовать для определения имен хостов и доменов, для которых сервер sendmail будет получать почтовые сообщения. Пример такого файла: nitec.com ad-engine.com classif iedworks. com Здесь каждая строка определяет имя домена, который будет обслуживать сервер sendmail. Создание виртуальных почтовых серверов с помощью /etc/mail/virtusertable ЕСЛИ требуется предоставить поддержку почты для множества доменов, можно настроить виртуальную почтовую службу с помощью sendmail. Предположим, что нужно предоставить виртуальную почтовую службу для домена с именем y o u r c l i e n t . com. Для этого: 1. Добавьте домен (yourclient.com) в файл /etc/mail/sendmail.cw, чтобы sendmail принимал почту для этого хоста.

www.books-shop.com

Служба электронной почты

227

2. Добавьте домен (you rclient. com) в файл /etc/mail/relay-domains, чтобы sendmail пересылал сообщения для этого домена. Чтобы отобразить пользователей виртуальных доменов на одну или несколько локальных учетных записей, используйте файл /etc/mail/virtusertable следующим образом: Несколько примеров: [email protected] [email protected] [email protected] [email protected]

mike mike jason jason

Почта виртуальных адресов e-mail, таких как [email protected] и [email protected], поступает локальному пользователю mike. Аналогично, почта для info@yourclient. com и jason@yourclient. com поступает другому локальному пользователю jason. Это обеспечивает для домена y o u r c l i e n t . com почтовый сервер, которого у него нет. Однако остальному миру будет казаться, что yourclient.com имеет почтовый сервер. Если также для этого домена создать службу DNS домена yourclient.com, можно профессионально провести процесс настройки. Сделайте следующее: • Добавьте запись типа А в DNS домена yourclient. com, которая указывает на сервер sendmail. Например, если IP-адрес хоста сервера sendmail равен 192.168.1.10, можно добавить следующую строку в конфигурационный файл DNS домена yourclient.com mail.yourclient.com. IN A 192.168.1.10 • Добавьте запись MX в запись типа SOA домена you rclient. com, которая указывает на mail.yourclient.com. Например: IN MX 5 mail.yourclient.com. Это заставит остальной мир считать, что yourclient.com имеет реальный почтовый сервер, до тех пор пока существует сервер sendmail, настроенный на рассмотренную выше виртуальную конфигурацию. Виртуальная почтовая служба часто запрашивается клиентами Web-сайтов провайдера услуг сети Интернет. Другими словами, люди или компании, которые платят провайдеру Интернета за осуществление хостинга (размещения) Web-сайта (www.client-domain.com), обычно хотят иметь виртуальную почтовую службу. В таком случае будет трудно управлять единым файлом /etc/mail/virtusertable . Например, если предоставляются услуги хостинга сотням доменов, то /etc/mail/virtusertable становится местом возникновения потенциальных ошибок при любой модификации этого файла. Можно использовать более гибкое решение. Предположим, что нужны две виртуальные почтовые службы для двух клиентов с именами client-a.com и client-b. com. Вам необходимо: • Создайте отдельный файл отображения виртуальной службы e-mail для каждого домена. Используйте соглашение об именах, такое как domain, ft г (. ft г сокращение от fake-to-real — фалышивый-в-реальный). • Создайте файл /etc/mail/client-a.ftr, который содержит то, что обычно находится в /etc/mail/virtusertable для данного домена. Например, этот файл может выглядеть так: [email protected] clientl [email protected] [email protected] @client-1.com clientl В .этом примере файла адрес [email protected] был отображен на локальную учетную запись clientl, webmaster@client-1. com был отображен на учетную запись удаленного провайдера Интернета, а все другие

www.books-shop.com

228

Глава 11

возможные почтовые адреса домена были отображены на локальную учетную запись. Последняя запись весьма полезна и часто запрашивается. Она позволяет домену client-1.com использовать любой адрес e-mail, который они хотят иметь на своем Web-сайте или в других деловых публикациях и рекламных объявлениях. Например, если www. client- 1. com публикует адрес [email protected], то любой, посылающий почту по этому адресу, будет успешно обслужен пользователем client 1. • Создайте файл /etc/mail/client-b.ftr для второго клиента. Этот файл, скорее всего, будет похож на предыдущий вариант. Однако предположим, что владелец client-b. com хочет, чтобы все почтовые адреса автоматически отображались на его существующие учетные записи почтового сервера у провайдера Интернета. В таком случае файл отображения будет выглядеть следующим образом: @dient-b.com %[email protected]

• Теперь, когда есть два файла отображения виртуальных пользователей, создайте законченный файл /etc/mail/virtusertable с помощью команд: touch /etc/mail/virtusertable cat *.ftr » /etc/mail/virtusertable

Здесь первая команда будет создавать файл /etc/mail/virtusertable, если он еще не существует. Вторая команда будет объединять все файлы .ftr в /etc/mail/virtusertable. Это приведет к эффективному формированию законченного файла /etc/mail/virtusertable. " Далее выполните программу makemap для создания версии файла для базы данных: makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable 1

Создание множества файлов отображений виртуальных пользователей поможет отследить отдельные домены. В любое время, когда необходимо изменить специальное отображение домена, отредактируйте файл ftr домена и создайте конечный файл /etc/mail/virtusertable с помощью рассмотренных выше операций. Так как большинство клиентских почтовых программ разрешают пользователям задавать в исходящих строках «From:» все что угодно, может оказаться ненужно что-либо делать, чтобы отображать исходящий трафик виртуальных сайтов. Однако если необходимо убедиться, что исходящая почта от пользователей виртуальных почтовых узлов транслируется в их виртуальные домены, воспользуйтесь файлом /etc/mail/genericstable. Например, возьмем виртуальный почтовый узел с именем classifiedworks . com, для которого существует файл /etc/mail/classifiedworks.ftr, имеющий строку: [email protected] sheila

Здесь адрес sales@classif iedworks. com отображается на локального пользователя с именем sheila. Теперь, когда sheila посылает почту с помощью сервера sendmail, необходимо, чтобы ее почта выглядела как sheila@classifiedworks. com, а не sheila@yourdomain. com. В таком случае создайте файл /etc/mail/genericstable со следующей строкой: sheila [email protected]

Содержимое файла virtusertable преобразуется в обратном направлении. Чтобы сохранить независимой специальную информацию домена, можно создать отдельный файл обратного отображения для каждого домена. Пусть этот файл имеет расширение .rft (real-to-fake — реальный-в-фальшивый). После создания такого файла для каждого домена, для которого выполняется

www.books-shop.com

Служба электронной почты

229-

виртуальная почтовая служба, задайте объединенный файл /etc/mail/genericstable следующим образом: • touch /etc/mail/genericstable cat *.rtf > /etc/mail/genericstable Для создания версии этого файла для базы данных выполните программу makemap: " makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable В конце работы для каждого виртуального почтового домена создайте файл .ftr, который отображает фальшивые почтовые адреса в реальные и сформируйте другой файл для отображения реальных адресов в фальшивые адреса e-mail. Когда эти файлы будут созданы, объедините их. Вы получите /etc/mail/virtusertable (для .ftr) и /etc/mail/genericstable (для .rtf). Затем выполните makemap (см. выше), чтобы создать версии этих файлов для базы данных. Процесс закончен, поскольку все виртуальные домены перечислены в файлах /etc/mail/sendmail.cw и /etc/mail/relay-domains. Тестирование конфигурации sendmail Существует достаточно много конфигурационных файлов, с которыми приходится иметь дело, чтобы заставить sendmail работать так, как требуется. В связи со значительным объемом работы по конфигурированию существует вероятность того, что не все будет работать в точности так, как необходимо. Поэтому рекомендуется делать следующее: • Всегда создавайте резервную копию конфигурации до внесения каких-либо изменений. • Каждый раз, когда проводится изменение конфигурации sendmail, тестируйте новую конфигурацию, а затем переходите к следующим действиям. Далее представлено несколько примеров того, как можно выполнить тестирование типичных конфигурационных проблем. Тестирование правил перезаписи адресов sendmail Чтобы протестировать поведение правила sendmail, выполните sendmail следующим образом: sendmail -bt Эта команда будет выполнять sendmail в адресном режиме и выведет приглашение ввода команд для взаимодействия со службой. В приглашении можно вводить команды тестирования, такие как: Например, чтобы увидеть, что правило перезаписи 0 для sendmail будет делать с [email protected], выполните: О [email protected] Результат для sendmail в нашей системе показан ниже: ADDRESS TEST MODE (ruleset 3 NOT Enter > 0 [email protected] rewrite: ruleset 0 input: rewrite: ruleset 199 input: rewrite: ruleset 199 returns: rewrite: ruleset 98 input: rewrite: ruleset 98 returns: rewrite: ruleset 198 input: rewrite: ruleset 198 returns: rewrite: ruleset 0 returns:

automatically invoked) kabir @ nitec . com kabir @ nitec ,. com kabir @> nitec . com kabir @ nitec . com kabir @ nitec . com kabir @ nitec . com $tt local $: kabir @ nitec . com $» local $: kabir @ nitec , com

www.books-shop.com

230

Глава 11

Доставка по адресу kabi rtnitec . com осуществляется с помощью почтальона local. Рассмотрим другой пример. Предположим, что существует следующее отображение /etc/mail/domaintable: ad-engine.com nitec.com Поэтому любая почта, предназначенная для ad-engine.com, должна быть перенаправлена в nitec. coni Результат теста: ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter > 3 , 0 [email protected] rewrite: ruleset 3 input: kabir @ nitec . com rewrite: ruleset 96 input: kabir < 6> nitec . com > rewrite: ruleset 96 returns: kabir < @i ad-engine , com . > rewrite: ruleset 3 returns: kabir < e* ad-engine ., com . > rewrite: ruleset 0 input; kabir < @ ad-engine ,. com . > rewrite: ruleset 199 input: kabir < ei ad-engine ,. com . > rewrite: ruleset 199 returns: kabir < @> ad-engine . com . > rewrite: ruleset 98 input: kabir < ei ad-engine ', com . > rewrite: ruleset 98 returns: kabir < @> ad-engine . com . > rewrite: ruleset 198 input: kabir < @ ad-engine . com . > rewrite: ruleset 90 input: < ad-engine . com > kabir < @ adengine . Com . > ; rewrite: ruleset 90 input: ad-engine . < com > kabir < @ adengine . com . > rewrite: ruleset 90 returns: kabir < ei ad-engine . com . > rewrite: ruleset 90 returns: kabir < § ad-engine . com . > rewrite: ruleset 95 input: < > kabir < @ ad-engine . com . > rewrite: ruleset 95 returns: < > kabir < @ ad-engine . com . > rewrite: ruleset 198 returns: $tf esmtp $@ ad-engine . com . $: kabir < @ adengine . com . > rewrite: ruleset 0 returns: $# esmtp $@ ad-engine . com . $: kabir < @ adengine . com . > Здесьадрес kabir@nitec. com перезаписывается в виде kabir@ad-engine. com, a sendmail показывает, что доставка по этому адресу будет осуществляться с помощью почтальона ESMTP («дорогостоящего» SMTP), так как ad-engine.com не перечислен в /etc/mail/sendmail.cw. Если бы он был перечислен, то предыдущий тест показал бы: ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter > 3 , 0 [email protected] rewrite: ruleset 3 input: kabir @ ad-engine . com rewrite: ruleset 96 input: kabir < i@ ad-engine . com > rewrite: ruleset 96 returns: kabir < i9 ad-engine . com . > rewrite: ruleset 3 returns: kabir < i3 ad-engine . com . > rewrite: ruleset 0 input: kabir < i9 ad-engine . com . > rewrite: ruleset 199 input: kabir < i9 ad-engine . com . > rewrite: ruleset 199 returns: kabir < i§i ad-engine . com . > rewrite: ruleset 98 input: kabir < i@ ad-engine . com . > rewrite: ruleset 98 returns: kabir < iЭ ad-engine . com . > rewrite: ruleset 198 input: kabir < i§> ad-engine . com . > rewrite: ruleset 198 returns: $й local $: kabir rewrite: ruleset 0 returns: $tt local $: kabir Обратите внимание, что в качестве множества правил используется 3,0, так как множество правил 3 вовлечено в трансляцию таблицы доменов, а множество правил 0 — в синтаксический разбор адреса.

www.books-shop.com

Служба электронной почты



231

Тестирование файлов базы данных /etc/mail/* При изменении файлов /etc/mail/access, /etc/mail/aliases, /etc/mail/ domain-table, /etc/mail/mailertable, /etc/mail/virtusertable и т.д. необходимо убедиться, что sendmail может выполнять поиск должным образом. Например, предположим, что в файле /etc/mail/alias создан следующий псевдоним: • root: kabi г После выполнения команды newaliases потребовалось узнать, может ли sendmail осуществить поиск соответствующего псевдонима. Чтобы протестировать поиск в базе данных, выполните sendmail -bt и в приглашении команды режима тестирования адреса введите: /тар Например, чтобы протестировать базу данных /etc/mail/aliases для псевдонима root, можно выполнить команду: /map aliases root Она выведет: map_lookup: aliases (root) returns kabiг Использование sendmail для просмотра транзакции SMTP в режиме расширенного вывода Сервер sendmail можно использовать для просмотра доставки сообщения к месту назначения. Например: sendmail -vt Параметр -vt приказывает sendmail работать в режиме подробного вывода и искать во входной информации заголовки То:, From:, Сс: и Вес:. Когда выполняется эта команда, она ожидает ввода от пользователя. В этот момент можно ввести, например: То: [email protected] From: [email protected] Subject: Testing sendmail This is a test. После ввода короткого сообщения, показанного здесь, нажмите Ctrl+D для выхода из режима ввода сообщения. Sendmail выведет транзакцию SMTP, похожую на представленную здесь: [email protected] ... Connecting to mail.integrationlogic.com. via esmtp... 220 wormhole.integrationlogic.com ESMTP Sendmail 8.9.3/8.9.3; Sun, 21 Feb 1999 19:57:00 -0600 » EHLO picaso.nitec.com 250-wormhole.integrationlogic.com Hello picaso.nite&.com [206.171.50.50], pleased to meet you 250-EXPN 250-VERB 250-8BITMIME 250-SI2E 250-DSN 250-ONEX 250-ETRN 250-XUSR 250 HELP » MAIL From: SIZE=77

www.books-shop.com

232

Глава 11

250 . . . Sender ok » RCPT [email protected]> 250 . . . Recipient ok »

DATA

345 Enter mail, end with "." on a line by itself

» . 250 TAA16439 Message accepted for delivery [email protected] . . . Sent (TAAT6439 Message accepted for delivery) Closing connection to mail.integrationlogic.com. » QUIT 221 wormhole.integrationlogic.com closing connection Строки, которые начинаются с », посылаются локальным сервером sendmail (picaso.nitec.com) удаленному серверу sendmail (mail.integrationlogic.com). Как можно видеть, это очень похоже на то, что было продемонстрировано ранее с помощью соединения telnet.

Использование флага отладки sendmail

Параметры dX (где X является уровней отладки) и -bv можно использовать вместе для того, чтобы увидеть, какие действия будет предпринимать sendmail для определенного адреса. Например: sendmail -bv -dO [email protected]

Эта команда на нашем сервере sendmail выведет: Version 8.9.3

Compiled with: MAP_REGEX LOG MATCHGECOS MIME7T08 MIME8T07 '. NAMED_BIND NETINET NETUNIX NEWDB NIS QUEUE SCANF SMTP USEROB XDEBUG ======== SYSTEM IDENTITY (after readcf) ========== (short domain name) $w = picaso (canonical domain name) $j = picaso.nitec.com (subdomain name) $m = nitec.com (node name) $k = picaso.nitec.com [email protected] . . . deliverable: mailer local, user kabir Как можно видеть, параметр -dO заставляет sendmail представить различную информацию о самой службе sendmail. Последняя строка в предыдущем листинге показывает, как sendmail будет обрабатывать данный адрес. Если указать просто -d без какого либо уровня отладки, можно увидеть всю отладочную информацию. Использование тестового конфигурационного файла При манипуляциях с sendmail.cf рекомендуется создать тестовую версию файла /etc/sendmail.cf и изменять только тестовую копию. Таким образом можно сохранить рабочую конфигурацию. Вот как можно протестировать новую конфигурацию. • Создайте копию /etc/sendmail.cf с новым именем. Предположим, что тестовая конфигурация называется /etc/sendmail- test.cf. • Используйте параметр -С для выполнения sendmail с новым тестовым конфигурационным файлом. Например, /usr/sbin/sendmail -Csendmail-test.cf будет использовать /etc/sendmail-test.cf. • Используйте параметр -oQ, если для тестовой конфигурации нужна другая очередь (т.е. отличная от /var/spool/mqueue). Например, /usr/sbin/sendmail -Csendmail-test.cf -oQ/var/spool/test-mqueue использует для тестовой конфигурации каталог /var/spool/test-mqueue. Рассмотрим несколько вопросов безопасности, имеющих отношение к конфигурации sendmail.

www.books-shop.com

Служба электронной почты

Безопасность sendmail

Являясь одним из самых старых почтовых серверов, sendmail несет свою долю ответственности за проблемы защиты. Последняя версия sendmail разрабатывалась с учетом требований строгой защиты.

Защита конфигурационных файлов

Начиная с версии 8.9.x сервер sendmail ужесточил ограничения на полномочия конфигурационных файлов. Например, если выполнить chmod - R 664 /etc/mail/* для изменения полномочий конфигурационных файлов, а затем попробовать перезапустить sendmail, появятся следующие сообщения об ошибках: Starting sendmail: /etc/sendmail.cf: line 93: fileclass: cannot open /etc/mail/sendmail.cw: Group writable directory WARNING: Group writable directory /etc/mail /etc/mail/virtusertable.db: could not create: Permission denied WARNING: Group writable directory /etc/mail /etc/mail/access.db: could not create; Permission denied WARNING: Group writable directory /etc/mail /etc/mail/domaintable.db: could not create: Permission denied WARNING: Group writable directory /etc/mail /etc/mail/mailertable.db: could not create: Permission denied Убедитесь, что сервер sendmail безопасен для выполнения в системе. Для этого: • Обеспечьте такие полномочия, при которых файлы и каталоги /etc/ sendmail.cf и /etc/mail/* могли бы читаться только суперпользователем или пользователями, определенными в строке RunAsUser в файле /etc/sendmail.cf. Все файлы и каталоги службы должны разрешать запись только суперпользователю. • Не предоставляйте полномочие записи группе для любого из конфигурационных файлов, каталогов или любых других файлов, которые необходимо читать программе sendmail. Ни при каких обстоятельствах группа не должна получать доступ к любому из конфигурационных файлов для записи. Хотя sendmail позволяет отключить свойства защиты, связанные с полномочиями файлов и владением (используя параметр DontBlameSendmail), настоятельно рекомендуется решать проблему с полномочиями/владением обычными методами. После этого следует отключить проверку в sendmail. Если нужно сохранить проверку безопасности в исходном виде, убедитесь, что домашние каталоги пользователей, где хранятся файлы .forward, не имеют разрешения на запись ни для какой группы. Сам файл .forward должен иметь значение полномочий 644 (rw-r—г—). Кроме того, убедитесь, что любой каталог, который присутствует в пути доступа файла, читаемого программой sendmail, не имеет доступа группы для записи. Если необходимо использовать параметр DontBlameSendmail для создания пути обхода системы безопасности, прочтите документацию, поставляемую с sendmail. Это поможет вам разобраться с данным свойством. Когда уровень полномочий файлов/каталогов задан правильно и sendmail не выдает никаких предупреждающих сообщений или сообщений об ошибках в связи с полномочиями/владением файлов и каталогов, необходимо также убедиться, что запись журналов указана верно. По умолчанию sendmail будет записывать журналы с помощью syslogd. В файле /etc/syslog.conf должна быть следующая строка: m a i l . * /var/log/maillog

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

233

234

Глава 11

Можно изменить имя файла журнала по своему усмотрению. Обычно его называют maillog или mail.log. Проверьте, что в файле /etc/logrotate.d/syslog существует запись, представленная ниже: /var/log/maillog { post rotate

/usr/bin/killalls -HUP syslogd endscript

> Этот оператор будет перезапускать syslogd, после того как logrotate обработает файл /var/log/maillog.

Обеспечение более строгого режима деятельности и секретности

Можно заставить sendmail более строго соблюдать протокол SMTP, когда клиенты соединяются с сервером, и можно контролировать взаимодействие пользователей с sendmail. Это делается строками параметров следующего вида: О PrivacyOptions=needvrfyhelo,restrictmailq,restrictqrun,goaway Параметр Параметры секретности sendmail public needmailheio needexpnhelo noexpn needvrfyhelo novrfy notrn noverb restrictmaik) restrictqrun noreceipts goavray authwarnings

Описание Разрешает открытый доступ Клиент должен использовать НЕЮ или EHELO до отправления команды MAIL Клиент должен использовать НЕЮ или EHELO до отправления команды EXPN Клиент не может использовать команду EXPN Клиент должен использовать НЕЮ или EHELO до отправления команды VRFY Клиент не может использовать команду VRFY Клиент не может использовать команду ETRN Клиент не может использовать команду VERB Ограничение использования команды maflq. Когда задан это параметр, команду mailq могут выполнять только суперпользователь, владелец и пользователи группы каталога очереди Ограничивает параметр -q. Когда задан этот параметр, использовать его может только суперпользователь и владелец каталога очереди Не возвращать код успешных операций Не разрешать запросы статуса SMTP Вставляет в сообщения заголовки /-Authentication-Warning:

Значения PrivacyOptions показаны в таблице 11.3. Вы должны принять и другие меры безопасности для защиты sendmail от некорректного использования. Это обсуждается в следующем разделе. Борьба со спамом В наши дни распространяется слишком много нежелательных почтовых сообщений. Сервер sendmail может пострадать от некорректного использования посторонними лицами. Люди, которые рассылают ненужные сообщения e-mail, часто используют чей-то чужой почтовый сервер для выполнения своей грязной работы. Это называется уязвимостью пересылки почты третьей стороной.

www.books-shop.com

235

Служба электронной почты

Как справиться с уязвимостью пересылки почты третьей стороной До недавних пор программа sendmail по умолчанию разрешала пересылать почту всем пользователям. Другими словами, кто-то, совершенно не имеющий отношения к вам или вашей организации, мог использовать ваш сервер sendmail как ретранслятор почты SMTP для отправки сообщений человеку, о котором вы ничего не знаете. В подобном случае неизвестны как отправитель, так и получатель, поскольку они не имеют никакого отношения ни к вам, ни к вашей организации. Это было официально допустимо, так как предоставляло администраторам почты средства поиска проблем почтовых соединений. Однако сейчас в Интернете расплодились спаммеры или создатели объемистой ненужной почты, которые ищут незащищенные ретрансляторы для выполнения своей работы. Они злоупотребляют ресурсами системы. Кроме того, в результате их действий у организаций могут возникнуть юридические осложнения. Многие штаты США рассматривают законы против нежелательной почты, предусматривающие финансовую ответственность за нанесенный вред всех вовлеченных сторон. Если почтовый сервер становится предметом юридического разбирательства о нежелательной почте, решение вопроса и доказательство непричастности может потребовать дополнительных правовых и финансовых ресурсов. Если сервер участвует в такой почтовой рассылке, многие получатели посчитают это активным участием в незаконной деятельности и, скорее всего, пришлют сотни гневных писем, либо сообщат через черный список спаммеров. Подобное развитие событий вредит репутации организации, а также влияет на работу почтовых соединений, так как многие почтовые серверы будут проверять черный список спаммеров до того, как они согласятся обменяться почтой с вашим доменом. Проверьте, не является ли уязвимой используемая программа sendmail для атаки ретрансляции. Один из самых простых способов проверки почтового сервера на уязвимость ретрансляции состоит в посещении URL-адреса h t t p : / / m a p s . v i x . c o m / tsi/ar-test. html, который поддерживается Web-сайтом компании MAPS Transport Security Initiative. Здесь можно ввести в специальное поле имя хоста почтового сервера и нажать кнопку GO, чтобы определить, не является ли почтовый сервер уязвимым для атак ретрансляции. На рис. 11.2 показан процесс тестирования почтового сервера mail, nitec.com. Тестирование, picaso.nitec.com на уязвимость ретрансляции третьей стороной

Сайт тестирует хост и определяет, может ли он пересылать почтовые сообщения третьей стороны. Рис. 11.3 показывает, что mail, nitec. com не делает ретрансляцию. Вы видите, что mail.nitec.com не разрешает третьей стороне осуществлять ретрансляцию. Обратите внимание, что если необходимо разрешить одному или нескольким доменам использовать для пересылки сервер sendmail,

www.books-shop.com

Глава 11

236

Результат проведения теста о ретрансляции третьей стороной

добавьте их в файл /etc/mail/relay-domains. Также, если необходимо заблокировать отправки известными спаммерами бесполезных почтовых сообщений, используйте файл /etc/mail/access, чтобы явно запретить им доступ к почтовому серверу. Пересылка спаммеров в черную дыру Для автоматического блокирования доступа известных спаммеров к серверу sendmail можно использовать систему RBL (Mail Abuse Prevention System's Realtime Blackhole List). Система RBL имеет Web-сайт: h t t p : / / m a p s . v i x . c o m / . RBL можно представлять себе как базу данных известных спаммеров. Запрашивая базу данных, можно узнать, кто является спаммером, и отвергнуть почтовые услуги вовлеченного домена. Рассмотрим пример , чтобы понять, как работает RBL. Предположим, что нужно узнать, не перечислен ли в RBL определенный домен с IP-адресом 127.0.0.2. Выполните: nslookup -q=a 2.0.0.127.rbl.maps.vix.com что выведет IP-адрес этого хоста (2.0.0.127. rbl.maps.vix.com) как 127.0.0.2. Здесь берется IP-адрес 127.0.0.2 и превращается в специальное имя хоста, переставляя в обратном порядке байты IP-адреса и добавляя в конце . rbl.maps.vix.com, чтобы получить 2.0.0.127. rbl.maps.vix.com. Затем для этого хоста ищется запись А (адрес). В результате получаем IP-адрес (127.0.0.2), который уже известен. Другими словами, если известен IP- адрес возможного спаммера, выполните предыдущий тест, чтобы увидеть, не получите ли вы в ответ IP-адрес. Если при этом поиске система вернет тот же адрес, значит данный IP-адрес перечислен в RBL. Для получения текстовой записи (txt) можно выполнить другой запрос: nslookup -q=txt 2.0.0.127.rbl.maps.vix.com Эта команда выведет: 2.0.0.127.rbl.maps.vix.com text = "Blackholed - see "

www.books-shop.com

237

Служба электронной почты

Если IP-адрес, который был использован для создания специального имени хоста, не перечислен в RBL, система не выдаст никакого ответа ни для записи А (адреса), ни для записи ТХТ (текста). Следовательно, можно считать, что IP-адрес в базе данных спаммеров не перечислен. Так как RBL предоставляет IP-адрес 127.0.0.2 для целей тестирования, он перечислен в RBL, и поэтому будут получены показанные ранее ответы при запросах сервера имен. Таким образом, MAPS RBL является системой контроля и блокирования спама на основе DNS, которая может запрашиваться для определения, не является ли определенный IP-адрес заблокированным адресом спаммера. RBL можно использовать двумя способами. Во-первых, можно подписать соглашение с MAPS RBL, перенести всю базу данных на локальный хост и создать локальную RBL для своего собственного использования. Во-вторых, можно запрашивать мастер базы данных RBL в каждом конкретном случае. Самая последняя версия sendmail (8.9.x) поставляется с RBL. Существующий пакет RPM в Red Hat Linux для последней версии sendmail помещает RBL в /etc/sendmail.cf, поэтому для конфигурирования этой системы ничего делать не нужно. Можно протестировать конфигурацию RBL в sendmail следующим образом. Выполните: sendmail -bt В приглашении режима тестирования адреса введите: .D{client_addr> 127.0.0.1 Basic_check_relay о

.

Вывод выглядит так: ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter > .D{client_addr>127.0.0.1 > Basic_check_relay rewrite: ruleset 190 input: < > rewrite: ruleset 190 returns: OKSOFAR Это показывает, что адрес 127.0.0.1 ( адрес циклического контроля) не заблокирован в RBL, так как результатом перезаписи был OKSOFAR. Теперь продублируем предыдущий тест, используя 127.0.0.2 (поставляемый RBL тестовый IP-адрес, который заблокирован в RBL). Должен появиться вывод, похожий на следующий: ADDRESS TEST MODE, (ruleset 3 NOT automatically invoked) Enter > .D{client_addr>127.0.0.2 > Basic_check_relay rewrite: ruleset. 190 input: < > rewrite: ruleset 190 returns: $ft error $@ 5 . 7 . 1 $: "Mail from " 127 . 0 . 0 . 2 " refused by blackhole site rbl.maps.vix.com. Email from your server is blocked. Contact your local Systems Administrator or ISP." Как можно видеть, этот IP-адрес находится в черном списке RBL, поэтому sendmail запретит ему пересылать сообщения. Реальный тест можно выполнить с помощью утилиты autoresponter, которую создал Руссель Нельсон. Согласно требованиям владельца autoresponter, нужно послать почту по адресу [email protected] с сервера, чье блокирование в RBL требуется протестировать. Ждите ответ с ns.crynwr.com с диалогом SMTP. Если получите другой ответ с l i n u x . c r y n w r . com, значит параметры RBL не правильны. Если необходимо знать, какие почтовые транзакции отвергнуты по RBL, выполните дгер «maps.vix.com» /var/log/maillog. Так вы увидите отвергнутые запросы.

www.books-shop.com

238

1

Глава 11

Настройка службы почты POP

POP (Post Office Protocol — Протокол почтовой службы) широко используется для получения почты, хранящейся на сервере POP. Подобно SMTP, это очень простой протокол. Рассмотрим, как клиент POP получает почту с сервера POP.

Работа подобной системы

Для демонстрации воспользуемся клиентом telnet, как и в случае SMTP. Поскольку сервер POP прослушивает порт TCP номер 110, можно сделать соединение telnet с нашим сервером POP, blackhole. nitec. com, следующим образом: telnet blackhole.nitec.com 110

Сервер POP приветствует таким сообщением: +ОК РОРЗ blackhole.nitec.com v4.47 server ready

Затем мы вводим команду POP, чтобы сообщить серверу почтовый ящик пользователя, который нам хотелось бы открыть. USER

kabir

Сервер отвечает сообщением: +ОК User name accepted,

password please

Командой POP вводится пароль пользователя kabir: PASS mypwd1 Сервер POP отвечает сообщением: +OK Mailbox open, 3 messages Как можно видеть, на сервере имеются три сообщения. Создаем список сообщений, используя следующую команду POP: LIST

Сервер POP отвечает: +ОК Mailbox scan listing follows 1 1387 2 588 * 3 590

Для получения одного из этих сообщений (#3) вводится команда POP: RETR 3 Сервер вернет сообщение вместе с кодом ответа: +ОК 590 octets Return-Path: Received: from nitec.com (picaso.nitec.com [206.171.50.51]) by ,blackhole.nitec.com (8.8.7/8.8.7) with ESMTP id KAA01647 for ; Mon, 22 Feb .1999 10:05:39 -0800 Message-ID: Date: Mon, 22 Feb 1999 10:00:45 -0800 From: Mohammed Kabir X-Mailer: Mozilla 4.5 [en] (WinNT; I) X-Accept-Language: en MIME-Version: 1.0 To: [email protected] Subject: TEST 2 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit

www.books-shop.com

239

Служба электронной почты

Status: THIS IS TEST 2 .

Транзакция POP проста. Посмотрим, как можно настроить систему для поддержки POP. POP3 описан в RFC 1939.

Установка сервера РОРЗ

, Последней версией протокола POP является 3, поэтому установлен сервер РОРЗ. Пакет ШАР на компакт-диске Red Hat Linux содержит сервер РОРЗ. Следовательно, для установки РОРЗ задайте пакет IMAP, используя обычную команду rpm -ivh .

Конфигурирование службы РОРЗ

Когда сервер будет установлен, необходимо изменить файл /etc/inetd.conf, чтобы в нем присутствовала строка следующего вида: рор-3 stream top nowait root /usr/sbin/tcpd ipop3d

Если у вас есть строка рор-2, ее можно закомментировать, так как РОР2 используется не очень широко и большинство современных клиентов POP поддерживает РОРЗ. После создания указанной выше строки в /etc/inetd.conf необходимо проверить файл /etc/services, чтобы убедиться, что там такие строки: рор-3 110/tcp # PostOffice V.3 pop 110/tcp ft PostOffice V.3 После проверки этих двух файлов перезапустите демон inetd с помощью killall -HUP inetd, чтобы разрешить ему ожидание запросов РОРЗ на порте TCP номер ПО. Когда в систему поступает запрос на соединение РОРЗ, демон inetd для обработки запроса запустит демон ipop3d. Теперь сервер РОРЗ готов обслуживать запросы. Однако, если необходимо улучшить безопасность системы, можно ограничить доступ к серверу РОРЗ с помощью файлов /etc/hosts.allow и /etc/hosts.deny, используемых оболочкой TCP (tcpd). См. главу 18 о безопасности.

Конфигурирование почтовых клиентов SMTP/POP

Когда будут сконфигурированы серверы SMTP и РОРЗ, необходимо настроить программное обеспечение почтовых клиентов для пользователей. Если пользователи собираются получать доступ к своей почте по соединениям telnet с почтовым сервером, нужно будет установить один или несколько пакетов почтовых клиентов, таких как mail, pine и procmail. Пользователи, которые используют telnet для доступа к своей почте, могут применить свойство перенаправления почты. Например, если пользователь хочет переслать свою почту на другую учетную запись или на другой почтовый сервер, он может добавить в свой домашний каталог файл .forward, чтобы заставить sendmail доставить почту на указанный адрес. Формат файла .forward прост. Например, чтобы переслать всю почту для пользователя mrfrog на [email protected], необходич мо изменить -mrfrog/.forward таким образом, чтобы в строке находился только адрес [email protected]. Проверьте, чтобы полномочия файла .forward разрешали чтение и запись только владельцу. Все остальные должны иметь к нему доступ только для чтения. В большинстве случаев пользователи будут получать доступ к почте с помощью машины с системой MS Windows, выполняющей клиент РОРЗ. Чтобы пользователи могли сконфигурировать типичный почтовый клиент POP3/SMTP для Windows, необходимо предоставить каждому пользователю следующую информацию: • Имя пользователя

www.books-shop.com

240

Глава 11

:

• Пароль • IP-адрес или имя хоста сервера входящей почты РОРЗ • IP-адрес или имя хоста сервера исходящей почты SMTP Обратите внимание, что таким клиентам потребуется разрешить использование сервера sendmail в режиме ретранслятора. В противном случае клиент не сможет отправлять почту. Например, если к почтовому серверу получают доступ через America Online, необходимо будет добавить aol. com в /etc/mail/ relay-domains.

Коммерческие утилиты Сервер sendmail с открытым исходным кодом вполне подходит практически для всех ситуаций, однако отдельная организация может запретить использование sendmail в качестве программы первичного почтового сервера. Например, если в организации требуется, чтобы все используемое программное обеспечение поддерживалось поставщиком на коммерческой основе, придется перейти на коммерческую версию sendmail, так как она непосредственно поддерживается компанией Sendmail, Inc. Ниже представлены некоторые альтернативные варианты сервера sendmail, не открывающие исходных кодов программ. Sendmail Pro Sendmail Pro — коммерческая версия программы сервера sendmail, без открытого исходного кода. Она поставляется с усовершенствованиями и предоставляет поддержку от надежного поставщика на коммерческом уровне. Дополнительную информацию об этом продукте можно найти по адресу: http://www.sendmail.com/. Не пугайте http://www.sendmail.org/ с http://www.sendmail.com. Первый Web-сайт поддерживается Sendmail Consortium, а второй является Web-сайтом компании Sendmail, Inc.

qmail

Пакетом qmail пытаются заменить открытую программу sendmail. Системные администраторы отмечают, что этот пакет легко настраивается и обеспечивает хорошую интеграцию с программным обеспечением списков почтовой рассылки. Пакет RPM данного программного обеспечения можно получить по адресу: http://www.qmail.org/. Если вы заинтересованы в использовании вместе с sendmail пакета программного обеспечения списка почтовой рассылки, познакомьтесь с пакетом Majordomo. Его можно найти по адресу: http://www.greatcircle.com/majordomo/.

www.books-shop.com

Глава 12 Web-служба

В этой главе: • Компилирование, конфигурирование и установка Web-сервера Apache • Конфигурирование Apache для поддержки CGI " Конфигурирование Apache для серверных дополнительных модулей • Поддержка виртуальной Web-службы с помощью Apache • Использование Apache в качестве прокси-сервера • Использование аутентификации HTTP с помощью Apache • Осуществление мониторинга сервера Apache • Введение журнала посещений и ошибок Apache « Улучшение безопасности Web-сайта • Использование SSL вместе с Apache для защищенных транзакций

а последние несколько лет примерно 50% сайтов всемирной Web-сети использовали Web-сервер Apache. С 1996 г. Apache был Web-сервером номер один. Согласно исследованиям компании Nercraft (http: //www. netcraf t. com/), Apache и его производные Web-серверы имеют явное преимущество по сравнению с коммерческими Web-серверами, предлагаемыми такими компаниями, как Microsoft и Netscape. Поэтому не удивительно, что компания Red Hat в своем официальном дистрибутиве поставляет Apache, как используемый по умолчанию Web-сервер. В этой главе рассматриваются основные вопросы конфигурирования и управления Web-сервером Apache. Дополнительные сведения по Web-серверу Apache вы сможете найти в книгах The Apache Server Bible или Apache Server Administator's Handbook, которые

www.books-shop.com

242

Глава 12

были опубликованы издательством IDG Books Worldwide. Автором этих книг является ваш покорный слуга.

Системные требования к Apache

Сервер Apache может выполняться практически на любом компьютере, который может работать с современной версией операционной системы Red Hat Linux. Однако выполнение сервера Apache не означает эффективность его работы. Для создания стабильной платформы для Apache необходимо уделить внимание следующим системным требованиям.

Компилятор ANSI С

Для компилирования Apache в системе Red Hat Linux вам потребуется компилятор ANSI С. Рекомендуется компилятор С GNU (gee) организации Free Software Foundation (FSF), который содержится в дистрибутиве Red Hat Linux. Однако проверьте, что компилятор gcc имеет версию 2.7.2.x или выше. С другой стороны, если планируется установка уже созданных двоичных файлов, то компилятор С в системе не нужен. Советуем вам скомпилировать свою собственную копию Apache, так как это позволяет модифицировать его в соответствии с конкретными потребностями.

Дисковое пространство

Стандартный дистрибутив исходного кода Apache занимает приблизительно 5-6 Мбайт. Apache Group рекомендует, чтобы для компиляции выделялось 12 Мбайт свободного дискового пространства. Однако если будет устанавливаться готовый двоичный дистрибутив, исходный код не нужен. Размер двоичного дистрибутива будет меняться в зависимости от операционной системы, но вряд ли он превысит границу в 5-6 Мбайт. В любом случае для самого программного обеспечения Apache понадобится около 5-6 Мбайт дискового пространства. Для установки других модулей независимых поставщиков, таких как mod_fastcgi, mod_perl или mod_php, понадобится дополнительное дисковое пространство. Сервер Apache занимает немного дискового пространства, однако необходимо тщательно рассмотреть требования к дисковому пространству для журналов, если Apache устанавливается на узле с большим трафиком. Например, типичная запись журнала должна занимать приблизительно 80 байт дискового пространства. Если ожидается около ста тысяч посещений в день, то файл журнала доступа сервера Apache может расти со скоростью 8 млн байтов в день. Поэтому заранее планируйте и выделяйте достаточный объем пространства для журналов Apache.

Оперативная память

Достаточный объем оперативной памяти (RAM) — необходимое условие перед установкой. Сервер Apache выполняется в режиме «pool-of-servers» (пул серверов). Это означает, что обслуживание запросов будет выполнять множество экземпляров процесса сервера Apache (httpd). Каждый из этих серверных процессов будет использовать примерно одинаковый объем RAM. Число серверных процессов, которые будут выполняться в системе, конфигурируется с помощью директив Apache, таких как MinSpareServers, MaxSpareServers, StartServers и т.д. Необходимо рассчитать, сколько потребуется оперативной памяти. Для этого умножьте максимальное число процессов сервера, которое планируется выполнять в любой данный момент времени, на объем оперативной памяти (RAM), требуемый для каждого процесса сервера. Формула выглядит следующим образом: RAM для Apache =

Максимально допустимое число процессов Apache х RAM,

требуемая одному процессу Араспе

Это поможет вам узнать, сколько нужно оперативной памяти (RAM). На нашей системе Red Hat Linux 5.2 для выполнения стандартного сервера Apache

www.books-shop.com

Web-служба

243

(т.е. созданного из дистрибутива исходного кода) требуется примерно 1.5 Мбайт оперативной памяти на процесс сервера Apache. Поэтому, если бы нужно было выполнять не больше десяти процессов Apache (параметр, задаваемый с помощью директивы MaxSpareServers), потребовалось бы 15 Мбайт оперативной памяти только для Apache плюс то, что требуется для операционной системы и других серверных процессов, выполняющихся в системе. Помните, что требования к оперативной памяти для процесса сервера Apache будут меняться от платформы к платформе. Кроме того, вам придется увеличить требования к памяти, когда к процессам Apache добавятся модули независимых поставщиков. Например, mod_perl заведомо увеличит объем процесса Apache. Фактически, каждый, поддерживающий mod_perl процесс Apache, будет иметь внутри себя копию сценариев CGI на Perl, что повысит требования к оперативной памяти. Поэтому, если планируется использовать mod_perl вместе с Apache, проверьте, что для этого будет достаточно оперативной памяти. В этом случае не забудьте вычислить объем памяти, требуемый сценариям CGI, которые планируется использовать вместе с mod_perl. Другие требования Некоторые из поддерживаемых сценариев, такие как dbmmanage и apxs, используют интерпретатор Perl 5. Мы рекомендуем вам загрузить самую последнюю версию интерпретатора Perl со следующего Web-сайта: ht t p: //www. ре rl. com/. Apache 1.3 может использовать механизм динамических совместно используемых объектов (DSO) для загрузки и выгрузки модулей во время выполнения. Хотя в Linux доступна поддержка DSO, мы предпочитаем не использовать параметры DSO при компиляции Apache, так как поддержка DSO замедляет выполнение сервера примерно на 5%. Получение Apache из сети Официальная копия дистрибутива Red Hat Linux поставляется с версией заранее собранного Web-сервера Apache в пакете RPM. При желании вы можете загрузить самую последнюю версию с официального Web-сайта Apache по следующему адресу: http://www.apache.org/. Исходный код Apache и двоичные^файлы можно получить с зеркального сайта Apache. Воспользуйтесь адресом http://www.apache.org/dyn/closer.cgi, чтобы найти ближайший зеркальный сайт. Здесь предполагается, что программное обеспечение будет получено с официального Web-сайта Apache. Программное обеспечение (как исходный код, так и двоичные файлы) можно найти по адресу http://www.apache.org/dist/. Там находится много новых версий дистрибутивов Apache организованных в архивы с помощью различных программ сжатия. Например: Apache_1.3.6.tar.gz Apache_1.3.6.tar.Z Это примеры дистрибутива исходного кода Apache Version 1.3.6. Различие в размере связано с различием в технологии сжатия. Загрузите один из этих файлов. Неважно какой формат выбран для загрузки, все, что вам нужно, это утилита tar и утилита gnuzip или gzip для распаковки файлов. Например, для распаковки файла Apache_l.3.6.tar.gz в нашей системе Red Hat Linux 5.2 используется команда: tar xvzf apache_ 1.3.6.tar.gz Или можно было бы воспользоваться командами: gzip -d apache. 1.3.6.tar.gz tar xvf apache_ 1.3.6.tar Они будут распаковывать и извлекать все файлы в подкаталог, сохраняя без изменения относительный путь каждого из них. Двоичные файлы обычно хранятся в другом каталоге, где каждая операционная система имеет свой собственный подкаталог. Рекомендуется самостоятельная компиляция исходного кода Apache вместо использования чужого

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

244

Глава 12

двоичного кода. Когда используется загруженный двоичный файл, вы позволяете кому-то другому (возможно тому, кого вы не знаете) решать, какие модули и свойства применяет ваш Web-сервер. Иногда загруженные двоичные файлы вообще не работают в системе, так как проявляется несовместимость между библиотечными файлами, требуемыми для двоичных файлов, и тем, что доступно в конкретной системе. Если компиляция невозможна, убедитесь, что двоичные файлы загружены с надежного сайта. В этой главе мы предполагаем, что компилируется собственная копия, поэтому расскажем о процессе создания пользовательского сервера Apache.

Создание пользовательского сервера Apache

После распаковки исходного кода в выбранный каталог можно конфигурировать и компилировать пользовательскую копию Apache. Конфигурировать Apache можно вручную или использовать для этого новый интерфейс в стиле Autoconf, называемый APACI. Рекомендуем вам метод APACI, так как он быстрее. Для выполнения работы вам придется прочитать меньше файлов README и INSTALL.

Конфигурирование исходного кода Apache с помощью APACI

В каталоге верхнего уровня дистрибутива исходного кода находится сценарий configure, который понадобится нам для конфигурирования Apache с помощью APACI. Можно выполнить этот сценарий так: ./configure -help Эта команда позволит увидеть все доступные параметры. Первым шагом в конфигурировании Apache является определение места, где он будет установлен. Например, чтобы установить Apache в каталог с именем /usr/local/apache, можно выполнить конфигурационный сценарий следующим образом: ./configure -prefix=/usr/local/apache Данная команда устанавливает все файлы Apache в указанный каталог. Однако если по какой-то причине нужно установить определенные файлы вне этого каталога, можно использовать параметры --prefix: --exec-prefix=DIR: устанавливает зависимые от архитектуры файлы в каталог DIR --bindir=DIR: устанавливает исполняемые файлы в каталог DIR --Sbindir=DIR: устанавливает исполняемые файлы системного управления (sys-admin) в каталог DIR . --libexecdir=DIR: устанавливает исполняемые файлы программ в каталог DIR --mandir=DIR: устанавливает справочные страницы (man) в каталог DIR --sysconfdir=DIR: устанавливает конфигурационные файлы в каталог DIR --datadir=DIR: устанавливает файлы данных только для чтения в каталог DIR --includedir=DIR: устанавливает подключаемые файлы (include) в каталог DIR --localstatedir=DIR: устанавливает файлы изменяемых данных в каталог DIR --runtirnedir=DIR: устанавливает данные времени выполнения в каталог DIR --logfiledir=DIR: устанавливает данные файла журнала (logfile) в каталог DIR

www.books-shop.com

245

Web-служба

--proxycachedir=DIR: устанавливает данные кэша прокси в каталог DIR --compat: устанавливает согласно структуре каталогов установки Apache 1.2. Например, если журналы находятся в отдельном разделе с именем /logs и нужно, чтобы Apache записывал свои журналы туда же, можно выполнить конфигурационный сценарий следующим образом: ./configure -prefix=/usr/local/ap'ache -logfiledir=/logs Если необходимо знать, какие файлы будут устанавливаться и в какие каталоги, используйте параметр --layout. Например: ./configure -prefix=/usr/local/apache -layout В результате мы получим: Configuring for Apache, Version 1.3.6 Installation paths: prefix: /usr/local/apache exec_prefix: /usr/local/apache bindir: /usr/local/apache/bin sbindir: /usr/local/apache/bin libexecdir: /usr/local/apache/libexec mandir: /usr/local/apache/man sysconfdir: /usr/local/apache/etc datadir: /usr/local/apache/share included!r: /usr/local/apache/include localstatedir: /usr/local/apache/var runtimedir: /usr/local/apache/var/run logfiledir: /usr/local/apache/var/log proxycachedir: /usr/local/apache/var/proxy Compilation paths: HTTPD_ROOT: /usr/local/apache SUEXEC_BIN: /usr/local/apactie/suexec SHARED_CORE_DIR: /usr/local/apache/libexec DEFAULT_PIDLOG: var/run/httpd.pid DEFAULT_SCOREBOARD: var/run/httpd.Scoreboard DEFAULT_LOCKFILE: var/run/httpd.lock DEFAULT_XFERLOG: var/log/access_log DEFAULT_ERRORLOG: var/log/error_log TYPES_CONFIG_FILE: etc/mime.types SERVER_CONFIG_FILE: etc/httpd.conf ACCESS_CONFIG_FILE: etc/access.conf RESOURCE_CONFIG_FILE: etc/srm.coflf

• '

Параметр --layout позволяет проверить структуру каталогов до ее использования. Если обновляется сервер Apache версии 1.2 и нужно сохранить старую структуру каталогов, можно воспользоваться параметром --compat, который пользуется старой структурой каталогов. ЕСЛИ окажется, что постоянно переопределяется используемая по умолчанию структура, можно просто создать собственную структуру в файле configure.layout. Простейшим способом для создания собственной структуры является редактирование файла configure.layout в каталоге верхнего уровня дистрибутива исходного кода Apache. Скопируйте существующую структуру Apache, начиная со строки и кончая . Затем измените пути каталогов, как это требуется. Поменяйте имя структуры с Apache на то, которое нравится. Теперь эту структуру можно использовать с помощью параметра --with-layout=.

www.books-shop.com

Глава 12

246

>

Следующий шаг в конфигурировании Apache состоит в принятии решения, будут ли использоваться стандартная конфигурация модулей, предоставленная разработчиками Apache. Если Apache компилируется в первый раз, можно оставить стандартную конфигурацию, чтобы освоиться со всем процессом. Файл стандартной или используемой по умолчанию конфигурации для настройки на основе APACI хранится в подкаталоге src. Он называется Configuration.apaci и показан на листинге 12.1. Листинг 12.1. EXTRA_CFLAGS=

Используемый по умолчанию конфигурационный файл без комментариев и пустых строк '$(SRCOIR)/apaci'

'

EXTRA_LDFLAGS= EXTRA_LIBS=

EXTRA_INCLUDE= EXTRA_DEPS= Rule SHARED_CORE=default Rule SHARED_CHAIN=default Rule SOCKS4=no Rule SOCKS5=no Rule IRIXNIS=no Rule IRIXN32=yes Rule PARANOID=no Rule WANTHSREGEX=default AddModule modules/standard/mod_env.о AddModule modules/standard/mod_log_config.o AddModule modules/standard/modjnime.o AddModule modules/standard/mod_negotiation.o AddModule modules/standard/mod_status.о AddModule modules/standard/mod_include.o AddModule modules/standard/mod_autoindex.o AddModule modules/standard/mod_dir.о AddModule modules/standard/mod_cgi.o AddModule modules/standard/mod_asis.o AddModule modules/standard/mod_imap.o AddModule modules/standard/mod_actions.o AddModule modules/standard/mod_userdir.o AddModule modules/standard/mod_alias.о AddModule modules/standard/mod_access.o AddModule modules/standard/mod_auth.o AddModule modules/standard/mod_setenvif.о

В этом файле существуют три вида данных. Строки EXTRA_* используются сценарием configure для добавления дополнительных флагов в Makefile. Сценарий же нужен для компиляции Apache. Строки Rule используются сценарием для включения или выключения некоторых функций. Строки AddModule инициируют модули Apache, которые должны быть частью исполняемого файла Apache.

Конфигурационные параметры для makefile

Для большинства систем не нужно изменять ни один из этих дополнительных флагов. Обратите также внимание, что сценарий configure будет пытаться определить, какой компилятор С используется в системе. Используемый компилятор можно указать в явном виде, удаляя символ комментария со строки #СС=. Например, СС = gcc. В этом случае может потребоваться указание дополнительных флагов компилятора в строках: EXTRA_CFLAGS= EXTRA_LDFLAGS=

www.books-shop.com

Web-служба

247

Если система требует специальных библиотек или подключаемых файлов, можно определить их с помощью таких строк: EXTRA,LIBS= EXTRA_INCLUDES=

Обратите внимание, что сценарий configure автоматически устанавливает для кода оптимизации значение -02. Если необходимо использовать другое значение, сначала удалите знак комментария из строки: #ОРТIМ=-02

Затем измените значение на то, которое нужно, если компилятор С его поддерживает. Для большинства установок используемые по умолчанию параметры работают просто прекрасно (например, на нашей системе Red Hat 5.2 Linux).

Параметры конфигурации строк Rule

Строки Rule не нужно изменять. Однако если вам необходимо это сделать, используйте сценарий configure. Чтобы инициировать правило, используйте параметр --enable-rule=NAME, где NAME— это имя правила. Например: ./configure --prefix=/usr/local/apache --enable-rule=SOCKS4 Аналогично можно отключить правило, используя параметр --disable-rule. Первые две строки Rule (SHARED_CORE, SHAREO_CHAIN) связаны с поддержкой динамических совместно используемых объектов (DSO) и должны быть оставлены как есть. _ Система SOCKS4 выключена по умолчанию. SOCKS является системой управления, в которой все данные сетевых приложений TCP/IP проходят через демон SOCKS. Это позволяет SOCKS собирать, проверять, экранировать, фильтровать и управлять сетевыми данными. Большинство людей используют эту службу как программный брандмауэр. Если нужно, чтобы Apache поддерживал SOCKS4, можно включить его за счет установки в значение Yes параметра - -enable- rule=SOCKS4, который находится в командной строке сценария configure. Проверьте также, что изменено значение EXTRA_LIBS в конфигурационной области Makefile, чтобы указать на файл библиотеки SOCKS4. В противном случае сценарий configure задаст для пути —. Если вам нужна поддержка SOCKS5, включите ее, установив значение Yes с помощью параметра --enable-rule=SOCKS5 в командной строке сценария configure. Правило IRIXNIS предназначено для тех, кто хочет использовать Apache в системе Silicon Graphics, выполняющей IRIX и NIS. Параметр IRIX32 имеет значение также для системы, работающей с операционной системой IRIX. Он заставляет Apache использовать библиотеки п32 вместо библиотек 032. Правило PARANOID позволяет увидеть, не выполняет ли какой-то модуль Apache сценарий оболочки во время конфигурирования. Apache 1.3 разрешает модулям выполнять специальные сценарии оболочки при осуществлении сценария configure. Это правило выключено по умолчанию. Если его надо инициировать, задайте его как Yes (Да), используя параметр - -enable- rule= PARANOID в командной строке сценария configure. Параметр WANTHSREGEX автоматически получает значение Default. Это определяет, что будет использоваться поставляемый вместе с Apache пакет регулярных выражении. Если пользователь предпочитает собственный пакет регулярных выражений, можно указать значение No (Нет) параметра --disable-rule= WANTHSREGEX в командной строке сценария configure.

Параметры конфигурации модулей

Используемый по умолчанию набор модулей добавляется к стандартному серверу Apache с помощью строк AddModule. Модули перечислены в порядке, обратном приоритету. Если планируется добавить другие модули, то не изменяйте этот файл вручную. Рекомендуется использовать сценарий configure для добавления, удаления, инициирования или отключения модулей.

www.books-shop.com

248



ГлавсИ2

Для инициирования модуля, который еще не активизирован по умолчанию, можно использовать параметр --enable-module=NAME. Для отключения модуля используйте параметр --disable-module=NAME. Например, чтобы отключить модуль CGI, можно воспользоваться командой:

./configure -prefix=/usr/local/apache -disable-module=cgi Или, чтобы инициировать модуль usertrack, можно выполнить configure следующим образом: ./configure -prefix=/usr/local/apache -enable-module=usertrack Когда сценарий configure успешно выполнен с помощью одного или нескольких рассмотренных параметров, все готово для компиляции и установки Apache. Компиляция и установка Apache После того, как уже выполнен сценарий configure, компиляция и установка Apache проводится легко. Выполните команду make из каталога верхнего уровня дистрибутива исходного кода Apache. Если все пройдет успешно, никаких сообщений об ошибках не появится. В таком случае можете устанавливать Apache с помощью команды make install. Если будут получены ошибки, проверьте сообщения об ошибках и снова пройдите через шаги конфигурирования. Если проблемы все равно сохраняются, посетите Web-сайт Apache и прочтите FAQ (ЧАсто задаваемые ВОпросы), чтобы попробовать найти в списке этих вопросов причины, препятствующие выполнению Apache. Согласно нашим наблюдениям, стандартный дистрибутив исходного кода Apache компилируется в системе Red Haf Linux без единой заминки. Поэтому, если что-то не работает, дважды проверьте свои действия до обращения за помощью в группы Usenet, такие как comp.infosystems.www.servers.unix и linux.redhat. Когда сервер Apache откомпилирован и установлен, можете выполнить make clean для удаления всех объектных файлов, которые были созданы во время компиляции.

Компиляция и установка инструментов технической поддержки Apache

ЕСЛИ конфигурировать Apache с помощью сценария configure (или config. status), он автоматически устанавливает набор инструментальных средств поддержки. Поэтому для установки инструментальных средств технической поддержки не нужно ничего делать дополнительно. Единственным исключением является сценарий logresolve.pl. Этот сценарий Perl нужно будет установить вручную. Если нет желания устанавливать средства поддержки, при выполнении сценария configure (config.status) используйте параметр --without-support. Мы рекомендуем вам оставить значение по умолчанию, так как средства поддержки очень полезны при управлении различными операциями Apache. В следующем разделе они будут рассмотрены подробно. apachectl С помощью этого сценария можно управлять сервером Apache. Для знакомства с параметрами командной строки, которые он принимает, выполните сценарий без параметров командной строки или воспользуйтесь параметром help: / путь_доступа_к_арасhе/bin/арасhесt help Для запуска сервера выполните сценарий следующим образом: / путь_доступа_к_арасhе/bin/apachectl start Для остановки сервера выполните сценарий так: / путь_доступа_к_арасhе/bin/apachectl stop Для перезапуска сервера выполните сценарий следующим образом: / путь_доступа_к_арасhе/bin/apachectl restart

www.books-shop.com

Web-служба

^

249

Для проведения постепенного (аккуратного) перезапуска выполните сценарий следующим образом: , . / путь_доступа_к_арасhе/bin/apachectl graceful Различие между этими командами в том, что команда restart посылает Apache сигнал SIGHUP, а команда graceful посылает сигнал SIGUSR1. Так как последний сигнал определен пользователем (т.е. разработчиками Apache), он значительно лучше отвечает требованиям выполняющегося сервера. Для получения полного статуса выполняющегося сервера выполните сценарий: /путь_доступа_к_арасhе/bin/арасhесt1 fullstatus Будет выведена страница с информацией, показывающей различные данные о статусе сервера. Рекомендуем перенаправление сведений о статусе в файл, так как они, скорее всего, будет занимать больше одного полного экрана. Вот как можно перенаправить данные в файл с именем /TMP/STATUS /путь_доступа_к_арасhе/sbin/dir/apachectl fullstatus > /tmp/status Для проверки конфигурационных файлов сервера на синтаксические ошибки можно выполнить сценарий apachectl так: /путь_доступа_к_арасhе/sbin/dir/apachectl configtest

ob

Эта утилита позволяет выполнить тесты производительности Web-сервера. Задайте программу без параметров, чтобы узнать о параметрах командной строки, которые она принимает. apxs Данная утилита помогает в компиляции модулей для динамической загрузки. Она бесполезна, если отключена поддержка динамических модулей (DSO) на сервере Apache и операционная система не поддерживает DSO. logresolve.pl Сценарий Perl не устанавливается автоматически, но 'его можно вручную скопировать в подходящее место из каталога src/support дистрибутива исходного кода Apache. Подобный сценарий разрешает IP-адреса, находящиеся в файле журнала Apache, в их имена хостов. Этот сценарий порождает дочерние процессы и использует порождающий процесс, чтобы предоставить поддержку кэширования для ускорения поиска в DNS, который часто бывает очень медленным. logresolve Утилита работает подобно сценарию logresolve.pl. Однако эта исполняемая программа устанавливается по умолчанию. Чтобы увидеть синтаксис командной строки, выполните ее с параметром -h. htpasswd Данная утилита позволяет создавать пары имя пользователя/пароль для схем аутентификации согласно каталогу. Чтобы увидеть синтаксис использования, выполните программу без аргументов. В отличие от ранее упомянутых средств поддержки, такая утилита попадает в каталог bin каталога во время установки сервера Apache. dbmmanage Эта утилита позволяет управлять парами имя пользователя/пароль на основе DBM для схем аутентификации на основе DBM. Чтобы увидеть синтаксис использования, выполните программу без аргументов. Эта утилита попадает в каталог bin каталога для установки сервера Apache. htdigest Эта утилита позволяет создавать пары имя пользователя/пароль для схем аутентификации на основе алгоритма MD5. Чтобы увидеть синтаксис использования, выполните программу без аргументов. Эта утилита также попадает в каталог bin каталога для установки сервера Apache.

www.books-shop.com

250

Глава 12

Модификация Apache с помощью дополнительных модулей

Запустите стандартный сервер Apache до того, как вы будете добавлять какие-либо модули независимых поставщиков. Когда стандартный сервер Apache выполняется в системе, его можно модифицировать как угодно. В этом случае больше не нужно выполнять сценарий configure таким же образом, как это делалось в первый раз. При выполнении сценария configure автоматически создается сценарий с именем config.status. Сценарий config.status поддерживает историю параметров, которые задавались для сценария configure. Например, если сценарий configure однажды был выполнен следующим образом: ./configure

-prefix=/usr/local/apache -disable-module=cgi

то сценарий config.status будет выглядеть так: #!/bin/sh ## ## config.status -- автоматически генерируемый сценарий APACI для восстановления конфигурации ## , ##

## Используйте этот сценарий оболочки для повторного запуска ## сценария конфигурации APACI, когда необходимо восстановить ## конфигурацию

## ## Должны быть указаны дополнительные параметры

## ./configure \ "-prefix=/usr/local/apache" "-disable-module=cgi" \

\

"$@" Давайте предположим, что необходимо инициировать модуль usertrack. Можно снова выполнить configure: ./configure --prefix=/usr/local/apache \ -disable-module=cgi --enablemodule=usertrack Или можно выполнить: ./config.status --enable-module=usertrack

Config.status облегчает работу с configure. Мы рекомендуем использовать его для всех будущих компиляций. Когда нужно начать все сначала, удалите config.status и выполните configure для создания нового сценария config.status.

Поддержка FastCGI

Перед тем как добавить поддержку FastCGI к серверу Apache, необходимо будет загрузить последнюю версию модуля FastCGI (mod_fastcgi.c) с Web-сайта FastCGI, http://www. fastcgi.coni/. Первый шаг состоит в распаковке дистрибутива модуля FastCGI. Затем скопируйте или переместите дистрибутив в каталог SRC/MODULES/ FASTCGI дистрибутива исходного кода Apache. Смените каталог на каталог верхнего уровня дистрибутива исходного кода Apache и выполните конфигурационный сценарий: ./configure \ -activate-module=src/modules/fastcgi/libfastcgi.а Если сервер Apache уже был откомпилирован ранее с помощью APACI и вам необходимо сохранить существующую конфигурацию вместе с новым модулем mod_fastcgi.c, осуществите команду: ./config.status \

,

www.books-shop.com

Web-служба

^

261

-activate-module=src/modules/fastcgi/libfastcgi.a Теперь снова создадим исполняемый файл сервера Apache (httpd) с помощью команды make. Если не будет сообщений об ошибках, выполните команду make еще раз с параметром install для переустановки исполняемого файла Apache. Когда будет создан новый исполняемый файл Apache, необходимо проверить, что в выполняемый файл включен модуль mod_fastcgi.c. Для этого выполните такую команду: /path/to/your/ap'ache/httpd -I Замените только /path/to/your/apache на соответствующий путь. Mod_fastcgi.c должен присутствовать в выведенном списке, задаваемом параметром -1. Если его там нет, видимо, был пропущен один или несколько этапов компиляции Apache. Вернитесь и проверьте свои действия.

Добавление в Apache встроенного интерпретатора Perl Убедитесь, что в системе установлена самая последняя версия Perl. Проверьте номер версии установленного интерпретатора Perl, используя команду perl -v, и сравните с последней версией, доступной на http://www.perl.com/. Если в системе задана не самая последняя версия, рекомендуем вам загрузить ее и установить. В этой книге была использована версия 5.005_002. Когда в системе будет установлена последняя версия Perl, необходимо загрузить самую последнюю версию mod_perl с узла h t t p : / / p e r l . a p a c h e . o r g / . Многие тесты, проверяющие установку mod_perl, используют модули LWP Perl. Поэтому рекомендуется установка модулей LWP вместе с необходимыми для этого модулями. Если язык Perl установлен правильно, можно легко ввести модули LWP с помощью модуля CPAN. Выполните CPAN следующим образом: perl -MCPAN -install LWP

Когда эти предварительные задачи будут завершены, можно устанавливать модуль-mooLperl. При установке поддержки mod_perl в сервере Apache необходимо выполнить два этапа. Сначала обновите дистрибутив Perl с помощью mod_perl, а затем обновите дистрибутив Apache с помощью mod_perl. Чтобы все это упростить, будем предполагать, что дистрибутив исходного кода mod_perl загружен с http: //perl, apache, о rg/, причем-распакован в такой каталог, что исходный код Apache и исходный код mod_perl имеют общий каталог верхнего уровня в качестве своего родительского каталога. Другими словами, дистрибутивы исходного кода Apache и исходного кода mod_perl являются подкаталогами одного родительского каталога. Для примера рассматриваемой здесь установки предположим, что сервер Apache находится в /usr/local/build/ apache-1.3.6, а дистрибутив исходного кода mod_perl — в /usr/local/build/ mod_perl-1.16. (Обратите внимание, что номера версий для Apache и для mod_perl могут отличаться.) Теперь перейдем в каталог дистрибутива исходного кода (/usr/local/build/mod_perl-1.16) и выполним команду:

perl Makefile.PL APACHE_SRC=../apache-l.3.6/src \ DO_HTTPD=1 \ USE_APACI=1 \ PREP_HTTPO=1 \ EVERYTHING=1 Эта команда должна подготовить mod_perl со стороны Perl и со стороны Apache. После выполнения данной команды перейдите к следующим: i make make test make install

www.books-shop.com

252

Глава 12

Установка mod_perl со стороны Apache завершена. Если Apache компилируется в первый раз, можно выполнить следующую команду из каталога дистрибутива исходного кода Apache:

./configure -prefix=/path/to/where/you/want/to/install/apache -activate-module=src/modules/perl/libperl.а

\

Если Apache уже был скомпилирован ранее, нужно использовать вместо этого такую команду:

./config.status -activate-module=src/modules/perl/libperl.a Эта команда сохранит все предыдущие параметры, которые были заданы для configure. Когда будет выполнена любая из двух предыдущих команд, все готово для выполнения представленных ниже команд: make make test make install

Данные команды устанавливают Apache с поддержкой mod_perl. Можно проверить, что mod_perl является частью исполняемого файла Apache (httpd), используя команду httpd -1.

Добавление поддержки РНР До установки поддержки РНР проверьте, что сервер Apache уже откомпилирован, покрайней мере, один раз. Когда все будет готово, загрузите самый последний дистрибутив РНР с узла http: //www. php. net/, распакуйте его в подходящий каталог и войдите в каталог верхнего уровня дистрибутива РНР. Выполните здесь его собственный сценарий configure: ./configure \ --with-apache=/путь доступа/к/каталогу/вашего/дистрибутива/apache

После такого конфигурирования выполните команду make, а затем make install, если не будет никаких ошибок компиляции. Это создаст систему РНР. Затем можно будет продолжить установку со стороны Apache. Перейдите в каталог дистрибутива исходного кода Apache и выполните сценарий configure (или config.status): ./configure

-activate-module=src/modules/php3/libphp3.a

Когда эта команда закончит работу, выполните make, а затем make install для установки в Apache поддержки РНР. Когда Apache откомпилирован и установлен, все готово к его запуску и рабочему использованию. В следующем разделе рассказано, как это сделать.

Запуск и выполнение сервера Apache

Каждый дистрибутив исходного кода Apache поставляется со следующим набором используемых по умолчанию конфигурационных файлов: • access.conf " httpd.cdnf • srm.conf • magic • mime.types

В большинстве случаев не следует изменять два последние файла — magic и mime.types. Файл magic используется для специального модуля с именем mod_mime_magic. Файл mime.types контролирует типы MIME; которые посылаются клиенту для заданного расширения файла. Если по какой-то причине необходимо создать дополнительные типы MIME для сервера, рекомендуется использовать директиву AddType.

www.books-shop.com

253

Web-служба

Необходимо редактировать только файлы httpd.conf, access.conf и srm.conf. Это три разные файла. Однако они имеют одинаковую структуру. Фактически, можно поместить все директивы в файл httpd.conf, оставив остальные пустыми. В будущей версии Apache Group, скорее всего, сократит число конфигурационных файлов до одного. Поскольку традиционно существовало три файла, будем следовать этой традиции. Эти текстовые файлы содержат информацию двух типов: необязательные комментарии и серверные директивы. Строки с первым символом # являются комментариями. Эти комментарии не имеют никакого значения для серверного программного обеспечения, они служат документацией для администратора сервера. Можно добавлять сколько угодно строк комментариев, сервер игнорирует их все, когда проводит синтаксический разбор файлов. За исключением комментариев и пустых строк, сервер рассматривает все остальные строки либо как законченные, либо как частичные директивы. При редактировании этих файлов необходимо выбрать поведение сервера. В следующих разделах будет показано, что означают эти директивы и как их использовать для модификации сервера. Конфигурирование httpd.conf Файл httpd.conf является основным конфигурационным файлом. Он используется для задания методов работы сервера. На листинге 12.2 показан используемый по умолчанию файл httpd.conf Здесь удалены все комментарии, так как конфигурацию легче понять, когда ее можно видеть сразу всю. Листинг 12.2. Используемый по умолчанию httpd.conf без комментариев ServerType standalone Port 80 User nobody Group nobody ServerName wormhole.nitec.com ServerAdmin [email protected] ServerRoot /usr/local/apache



Er ro rLog /usг/local/apache/var/log/error_log LogLevel warn LogFormat "%h %1 %u %t \"%r\" %>s %b \"%{Referer>i\" \"%{UserAgent>i\"" combined Log Format "%h %1 %u %t \ "%r\" %> %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog /usr/local/apache/var/log/access_log common PidFile /usr/local/apache/var/run/httpd.pid ScoreBoardFile /usr/local/apache/var/run/httpd.Scoreboard /HostnameLookups off UseCanonicalName on Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxRequestsPerChild 30 Внимательно рассмотрим каждую из этих директив.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

254

Глава 12

Выполнение Apache как сервера типа standalone или inetd

Первой в используемом по умолчанию - конфигурационном файле httpd:conf стоит директива ServerType, которая определяет, как выполняется Web-сервер. Сервер может выполняться с помощью одного из двух методов: standalone и inetd. Может показаться, что методы standalone и inetd практически идентичны по своей функциональности, но на самом деле существует большое различие, связанное с производительностью сервера. Сервер, выполняемый inetd, перестает функционировать, как только заканчивается обслуживание запроса. В автономном режиме (standalone) порожденные процессы Web-сервера сохраняются в течение некоторого времени, прежде чем полностью прекратят свое существование. Это позволяет повторно использовать их следующими далее запросами. Так как при запуске каждого нового процесса отсутствуют накладные расходы (запросы в автономном режиме), подобный режим более эффективен. Используемое по умолчанию значение (standalone) должно работать для большинства узлов. Если решено сохранить это используемое по умолчанию значение, можно пропустить оставшуюся часть данного раздела. Однако если сервер Apache будет выполняться как сервер inetd, то задайте для этой директивы значение inetd. Отредактируйте файл /etc/inetd.conf для добавления новой записи для Apache. Этот текстовый файл имеет специальный формат записей, который можно определить, просматривая существующие в файле записи. Для системы Red Hat Linux синтаксис записи inetd.conf имеет следующий вид: service_name sock_type proto flags user server_path args

Вы видите, что служба выполняется от имени конкретного пользователя (user). Необходимо решить, в качестве какого пользователя будет выполняться сервер Apache. Самым простым методом является использование пользователя nobody (никто) или создание специального пользователя с именем httpd для осуществления серверного процесса. Если пользователь nobody используется для других служб, то не применяйте его еще раз для Apache. Повторное использование nobody для Web-службы может воздействовать на доступ к Web-серверу, если с помощью учетной записи nobody изменяются параметры настройки каталога/файла для другой службы. Рекомендуется создать специальную учетную запись httpd и использовать ее следующим образом: httpd stream top nowait httpd /путь_доступа_к/1Шрй -f /nyTb_K/httpd.conf



При изменении файла inetd.conf необходимо изменить также файл /etc/services. Его строка записей: service_name port_number/protocol_name service_entry_in_inetd.conf

Поэтому строка для добавления в /etc/services следующая:

httpd 80/tcp httpd Эта запись описывает, что служба httpd доступна и используется сервером inetd. Она определяет, что служба HTTP доступна на порте 80. Если для Web-службы (HTTP) нужно- использовать другой порт, замените 80 номером порта, который в настоящее время не занят другой службой. Так как все номера портов меньше 1024 зарезервированы для стандартных служб, то потребуется использовать адрес порта больше 1024 (например, 8080) и меньше 65535. Теперь необходимо перезапустить процесс inetd. Прежде всего, нужен его идентификатор (PID), который можно получить с помощью команды: ps auxw | grep inetd

Вывод по конвейеру результатов ps в утилиту grep позволяет grep найти строку, которая содержит слово inetd, и вывести строку на экран (стандартное устройство вывода). Хотя форматы вывода ps различаются на разных системах, обычно первым цифровым столбцом является идентификатор процесса для указанного в этой строке процесса. Воспользуемся утилитой kill:

www.books-shop.com

Web-служба

255

kill -HUP

He забудьте заменить часть «PID для inetd» на идентификатор реального процесса. Утилита kill посылает сигнал SIGHUP (HUP является сокращенным именем) упомянутому PID. Эта операция перезапускает сервер inetd и позволяет ему снова прочитать измененные конфигурационные файлы. Теперь конфигурирование inetd завершено. В том случае, когда директиве Apache ServerType присвоено значение inetd, а также сконфигурировали файлы /etc/inetd.conf и /etc/services, директивы User и Group в файле httpd.conf теряют смысл. Однако убедитесь, что имя пользователя, которое используется в файле /etc/inetd.conf, имеет привилегии доступа как к каталогам Web, так и к тому каталогу, где хранятся файлы журнала сервера. Вам следует выполнять Apache как сервер inetd только в тех случаях, если система имеет очень мало свободной оперативной памяти или если на Web-сайте не ожидается большого трафика. Директива Port для автономного сервера Директива Port не влияет на сервер Apache, если он выполняется как процесс inetd. С другой стороны, если сохранить используемые по умолчанию параметры ServerType (standalone), можно с помощью этой директивы сообщить Apache, какой следует прослушивать адрес порта. По умолчанию используется порт HTTP 80 и он же применяется для стандартных Web-сайтов. Пользователь, не являющийся пользователем root системы, который хочет выполнять Web-сервер, должен применять номер порта больше 1023 и меньше 65525. Все порты меньше 1024 считаются стандартными зарезервированными портами и требуют доступа на уровне inetd (уровень root) для запуска службы на этих портах. Во время экспериментов с Web-сервером с помощью учетной записи, отличной от root, можно использовать номер порта больше 1023. Если попробовать адрес порта, который уже используется другим сервером, то при попытке запустить сервер появится сообщение об ошибке. Обратите также внимание, что если используется порт, отличный от стандартного HTTP порта 80, необходимо будет посылать номер порта вместе со всеми запросами URL на сервер. Например, если задать эту директиву как Port 8080, то ресурсы (такие как страница с именем MYPAGE.HTML) на этом сервере придется запрашивать следующим образом: http://www.domain.tld:8080/mypage.html

Директивы User и Group для автономного сервера Подобно директиве Port, директивы User и Group в файле httpd.conf имеют смысл только для автономного сервера. Представим синтаксис этих директив: User Group

[имя_пользователя | #UID ] [имя_группы | #GID ]

Данные директивы являются очень важными с точки зрения безопасности. Когда основной процесс Web-сервера порождает дочерний серверный процесс для выполнения запроса, он изменяет дочерние UID и GID согласно значениям, заданным в этих директивах. Если дочерние процессы выполняются как процессы пользователя root, то для атак хакеров будет открыта потенциальная дыра в защите. Взаимодействие с процессом пользователя root увеличивает риск взлома защиты системы, следовательно, лучше не пользоваться этой возможностью. Вместо этого, мы рекомендуем вам выполнять дочерние серверные процессы с правами наименее привилегированного пользователя, принадлежащего наименее привилегированной группе; Пользователь с именем nobody (обычно UID = -1) и группа с именем nogroup (обычно GID = -1) имеют низкие привилегии.;Узнать эти значения можно в файлах /etc/group и /etc/passwd. Если планируется выполнять основной Web-сервер от лица обыкновенного пользователя (не root), то сервер не сможет изменить UID и GID дочернего процесса, так как трлько процессы пользователя root могут менять UID и GID других процессов. Поэтому, если основной сервер выполняется

www.books-shop.com

256

Глава 12

пользователем с именем foobar, тогда все дочерние процессы будут иметь те же самые привилегии, что и foobar. Аналогично, идентификатор (ID) группы и идентификатор (ID) группы для дочерних процессов будут одинаковыми. Обратите внимание, что если планируется использовать цифровой формат для идентификатора (ID) пользователя и/или группы, необходимо будет вставлять символ # перед цифровым значением. Подобное можно встретить в файлах /etc/passwd и /etc/group.

Общие директивы для серверов inetd и standalone

Автономные серверы (standalone) и серверы на основе inetd используют следующие общие директивы:

CustomLog путь_доступа к_файлу_журнала

Эта директива задает путь доступа к файлу журнала для записи успешных запросов доступа. Она также создает формат журнала, который необходимо использовать при записи журналов запросов доступа. Например, используемое по умолчанию значение определяет общий формат журнала, указанный ранее с помощью директивы LogFormat. Если нужно использовать другой формат журнала, например комбинированный, то не забудьте изменить используемое по умолчанию значение с common на combined. ErrorLog путь_доступа_к_файлу_журнала

Подобная директива определяет файл журнала, используемый для записи сообщений об ошибках. Если задать в ней относительный путь (т.е. путь, который не начинается со знака «/»), то путь отсчитывается от каталога ServerRoot. Например, если каталог ServerRoot задан как /usr/local/apache и ErrorLog задан как var/logs/error_log, то это эквивалентно: ErrorLog

/usr/local/apache/var/logs/error_log

В каком бы каталоге не хранились журналы, проверьте, что только процесс первичного сервера имеет право записи в этот каталог. Этот основной вопрос защиты — разрешение другим пользователям или процессам писать в каталог журнала — позволит неавторизованному пользователю получить UID процесса первичного Web-сервера. Он обычно исполняется под учетной записью root. HostnameLookups on

|

off

Когда эта директива задана как off, она приказывает Apache не искать в DNS имена хостов запрашивающих клиентов. Так как поиск в DNS весьма трудоемок, то лучше сохранить значение по умолчанию off. Задание on может вызвать отказ обслуживания клиентов в связи с истечением времени ожидания, если провайдер Интернета неправильно ввел данные настройки обратного просмотра для клиента DNS. LogFormat format

LogFormat определяет формат файлов журналов сервера и присваивает также имя для этого формата. Используемый по умолчанию файл httpd.conf содержит множество директив LogFormat, но использует только одну с помощью директивы CustomLog. Например: LogFormat "%h %1 %u %t \ "%r\" %>s %b \"%{Referer}i\" \"%{UserAgent}i\"" combined Этот формат журнала с именем «combined» определяет все поля Общего формата журнала (CLF — Common Log Format) и добавляет поля referer и user-agent. Следующим форматом в используемой по умолчанию конфигурации является: LogFormat "%h 961 %u %t \"%r\" %>s %b" common

www.books-shop.com

Web-служба

257

Он описывает общий фермат журнала и, следовательно, имеет имя «common». Последние две директивы LogFormat в используемом по умолчанию файле httpd.conf следующие: LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent

Эти две записи создают имена для форматов журнала, который хранит информацию только referer и user-agent. По умолчанию с директивой CustomLog используется формат «common». Поскольку большинство программ анализа журнала допускают формат combined, можно задать его используемым по умолчанию. Лучше всегда иметь дополнительную информацию в журнале для определения того, кто и каким образом получает доступ к сайту. LogLevel [emerg | alert | crit | errors | warn | debug ] Эта директива определяет уровень ведения журнала для директивы ErrorLog. Обычно бывает достаточно используемого по умолчанию значения warn. Оно прикажет Apache заносить в журнал все аварийные (emerg) сбойные ситуации, непредвиденные ситуации (alert), критические ошибки ( crit) и все предупреждения (warn). Если ожидается большой объем отладки, можете при желании задать это значение как debug, что будет перехватывать практически все типы ошибок, предупреждений и информационных сообщений сервера. Помните также, что чем больше операций ввода/вывода с диском выполняет сервер, тем медленнее он работает. Поэтому значение LogLevel, определенное как debug, не совсем подходит для рабочих серверов. ServerAdmin

.

Данная директива задает адрес электронной почты администратора сервера. Адрес e-mail выводится, когда сервер создает страницу с сообщением об ошибке. Обычно он задается следующим образом: ServerAdmin [email protected] ServerName hostname

Директива задает имя хоста Интернета для сервера. Обычно вводится имя хоста типа www. yourcompany. com. Проверьте, что вводимое имя хоста имеет соответствующие записи DNS, которые указывают на компьютер сервера. ServerRoot

Директива определяет каталог верхнего уровня, где хранится конфигурация сервера, файлы ошибок и журналов. Это родительский каталог для всех связанных с сервером файлов. Если сервер Apache был скомпилирован и установлен с помощью интерфейса APACI, используемый по умолчанию Server Root задается значением PREFIX, которое определено в качестве параметра для сценария configure. Например, если сценарий configure выполняется из каталога дистрибутива Apache следующим образом: ./configure

--PREFlX=/usr/local/apache

то ServerRoot будет задан по умолчанию как /usr/local/apache. Однако если Apache компилируется вручную, возможно, придется изменить используемое по умолчанию значение для указания соответствующего каталога. Timeout

.



Эта директива описывает секунды, в течение которых сервер будет ожидать клиента. Используемого по умолчанию значения должно быть вполне достаточно. UseCanonicalName on | off

Если директива задана значением on, то она приказывает Apache использовать определенные директивами ServerName и Port значения при создании самоссылающегося URL. С другой стороны, когда она задана как off, сервер будет создавать самоссылающийся адрес URL с помощью имени сервера и

www.books-shop.com

Глава 12

258

информации о порте, которые предоставляет клиент. Если клиент не дает подобных сведений, сервер использует значения, определенные ServerName и Port. Большинство сайтов не использует самоссылающиеся адреса URL, поэтому эта директива может оказаться неважной для многих пользователей.

Директивы автономного сервера

Следующие директивы в используемом по умолчанию файле httpd.conf имеют смысл только для сервера Apache, выполняющегося в автономном режиме, KeepAlive on | off

'

Директива разрешает или запрещает свойство KeepAlive, встроенное в Apache. KeepAlive — это свойство, которое разрешает постоянное соединение между сервером и клиентом. Наличие постоянного соединения помогает ускорить доставку содержимого, так как нет потери времени на установление нового соединения для каждого запроса. Сохраните значение по умолчанию без изменений, так как оно является частью спецификации HTTP \.\. KeepAliveTimeout

.

I

Эта директива определяет максимальное время (в секундах), в течение которого сервер будет ожидать последующего соединения до отключения клиента. Сохраните значение по умолчанию без изменений.

v

MaxClients

С помощью подобной директивы задается ограничение на число одновременно поддерживаемых запросов. Максимально возможное значение равно 256. Если необходимо обрабатывать более 256 одновременных соединений, отредактируйте заголовочный файл src/include/httpd.h и задайте константу HARD_SERVER_LIMIT, равной требуемому значению. Когда новый сервер будет откомпилирован, задайте эту директиву, равной требуемому значению. MaxKeepAliveRequests

Данная директива определяет максимальное число запросов, которые будут обслуживаться каждым соединением типа KeepAlive. Нужно сохранить значение по умолчанию без изменений. Обратите внимание, что задание значения равным нулю отключит свойство KeepAlive. MaxRequestsPerChild

Эта директива задает ограничение на число запросов, которое дочерний серверный процесс будет обслуживать до прекращения своего существования. Если указать нулевое значение, дочерние серверные процессы никогда не будут уничтожаться. Сохраните значение по умолчанию без изменений. MaxSpareServers

Эта директива задает максимальное число резервных (ожидающих) серверов, которые будет поддерживать первичный сервер. Необходимо изменять эту директиву, только если сервер Apache выполняется для обслуживания очень загруженных Web-сайтов. Apache может автоматически подстраиваться под нагрузку, поэтому не рекомендуется устанавливать большое число. Такая директива бесполезна в версии Apache для MS Windows. MinSpareServers

Устанавливает минимальное число ожидающих серверов. Их сохраняет первичный сервер. Со значением директивы можно экспериментировать только на серверах Apache очень загруженных Web-сайтов. Apache автоматически подстраивается под нагрузку, поэтому лучше не указывать в директиве большие числа. Такая директива бесполезна в версии Apache для MS Windows, поскольку эта версия не пользуется пулом серверов во время обслуживания запросов. PidFile

www.books-shop.com

Web-служба

2^, Эта директива используется для определения имени файла хранения информации об идентификаторе процесса (PID) первичного сервера. Подобный файл может использоваться сценариями, чтобы упростить определение того, какой идентификатор процесса имеет первичный сервер. Например, если PidFile задан следующим образом: PidFile /usr/local/apacne/var/run/httpd.pid

.

можно перезапустить сервер Apache, используя такую команду kill: kill -HUP 'cat /usr/local/apache/var/run/httpd.pid' В каком бы каталоге не хранился этот файл, убедитесь, что только процесс первичного сервера имеет доступ для записи в каталог. Это основной вопрос защиты. Разрешение другим пользователям или процессам записи в этот каталог позволит неавторизованным пользователям получить UID процесса первичного Web-сервера, который обычно исполняется по учетной записи root. ScoreBoardFile '

Эта директива задает имя файла, который первичный сервер использует для коммуникации со своими дочерними серверными процессами. Подобное необходимо только для нескольких платформ операционных систем. Если вам нужно использовать ScoreBoardFile, то можно улучшить производительность, поместив файл на RAM-диск. Проконсультируйтесь в руководстве операционной системы. StartServers Такая директива задает начальное число дочерних серверных процессов, которые Apache будет создавать при запуске. Apache может автоматически регулировать нагрузку, поэтому нет реальной необходимости изменять значение по умолчанию. Эта директива бесполезна в версии Apache для MS Windows.

Конфигурирование

srm.conf

Файл srm.conf является конфигурационным файлом ресурсов. Он используется для сообщения серверу о том, какие ресурсы предлагаются на Web-сайте. На листинге 12.3 показан используемый по умолчанию файл srm.conf с удаленными комментариями. Листинг 12.3. Используемый по умолчанию srm.conf без комментариев DocumentRoot /usr/local/apache/share/htdocs UserDir public_html Directorylndex index.html Fancylndexing on AddlconByEncoding (CMP, /icons/compressed.gif) x-compress x-gzip AddlconByType (TXT, /icons/text.gif) text/* AddlconByType (IMG, /icons/image2.gif) image/* AddlconByType (SND, /icons/sound2.gif) audio/* AddlconByType (VID, /icons/movie.gif) video/* Addlcon /icons/binary.gif .bin .exe Addlcon /icons/binhex.gif .hqx Addlcon /icons/tar.gif .tar Addlcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv Addlcon /icons/compressed.gif .2 .z .tgz .gz .zip Addlcon /icons/a.gif .ps .ai .eps Addlcon /icons/layout, gif .html .shtml .htm .pdf Addlcon /icons/text.gif ,txt . Addlcon /icons/c.gif .c Addlcon /icons/p.gif .pi .py Addlcon /icons/f.gif .for

www.books-shop.com

260

Глава 12

Addlcon Addlcon Addlcon Addlcon Addlcon Addlcon Addlcon Addlcon Addlcon

/icons/dvi.gif .dvi /icons/uuencoded.gif . uu /icons/script.gif .conf .sh .shar .csh /icons/tex.gif .tex /icons/bomb.gif core /icons/back.gif .. /icons/hand.right.gif README /icons/folder.gif ""DIRECTORY"" /icons/blank, gif ""BLANKICON"

.ksh

.tcl

Defaultlcon /icons/unknown.gif ReadmeName README HeaderName HEADER Indexlgnore .??* *' *# HEADER* README* RCS AccessFileName .htaccess TypesConfig /usr/local/apache/etc/mome.types DefaultType text/plain AddEncoding x-compress Z AddEncoding x-gzip gz AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage

en .en fr.fr de .de da .da el .el it .it

Language Priority en fr de Alias /icons/ /usr/local/apache/share/icons/ BrowserMatch BrowserMatch response-1.0 BrowserMatch BrowserMatch BrowserMatch

"Mozilla/2" nokeepalive "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force"RealPlayer 4\.0" force-response-1.0 "Java/1\.0" force-response-1.0 "JDK/1\.0" force-response-1.0

Директивы в srm.conf рассматриваются в следующих разделах. AccessFileName .

.

.

Эта директива задает имена файлов управления доступом к каталогам. Некоторые администраторы Web изменяют значение по умолчанию (.htaccess), чтобы усилить безопасность, так как широко известно имя .htaccess. Если планируется изменить это имя, выбирайте имя, которое начинается с точки, чтобы оно не появлялось в листингах каталога. Обратите также внимание, что используемый по умолчанию файл access.conf запрещает Apache просматривать любой файл управления доступом на уровне каталога. Если планируется использовать такие файлы управления доступом, то не забудьте изменить соответственно файл access.conf. Например, используемый по умолчанию файл access.conf имеет следующий конфигурационный сегмент:

Options FollowSymLinks AllowOverride None

Такая конфигурация использует директиву AllowOverride для запрещения Apache просматривать файл, определенный в AccessFileName. Если необходимо разрешить Apache просматривать файл управления доступом в некотором подразделе сайта, используйте конфигурацию:

www.books-shop.com

Web-служба

261

..

Option FollowSymLinks AllowOverride All

Эта конфигурация позволяет иметь файл управления доступом, такой как .htaccess в каталоге /путъ_к_каталогу или любом подкаталоге внутри него. Она также позволяет переопределять все разрешенные директивы. Если требуется конфигурация с более строгими ограничениями, можно задать AllowOverride как: • AuthConfig: Разрешает директивы авторизации, такие как AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile и require. • Filelnfo: Разрешает директивы типа документов, такие как AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument и LanguagePriority. • Indexes: Разрешает директивы индексирования каталогов, такие как AddDescription, Addlcon, AddlconByEncoding, AddlconByType, Defaultlcon, Directorylndex, Fancylndexing, HeaderName, Indexlgnore, IndexOptions и ReadmeName. • Limit: Разрешает директивы доступа к хосту, такие как allow, deny и order. • Options: Разрешает директивы для параметров каталогов, такие как Options и XbitHack. AddEncoding





. . .

Эта директива связывает информацию о кодировке MIME с расширениями файлов. Сохраняйте значения по умолчанию без изменений. Addlcon





. . .

Подобная директива задает имя файла значка для определенного расширения файла. Когда Fancylndexing включено (on), Apache будет показывать этот значок рядом с каждым определенным в данной директиве файлом, имеющим соответствующее расширение. Сохраните значение по умолчанию. AddIc6nByEncoding . . . Эта директива задает значок для Fancylndexing для показа рядом с файлами кодировки MIME. Сохраните значение по умолчанию как есть. AddlconByType . . .

Представленный каталог также задает значок для Fancylndexing для показа рядом с файлами в кодировке MIME. Сохраните значение по умолчанию без изменений. AddLanguage < язык_МIМЕ> < расширение_файла>

.

.

.

Эта директива связывает специальную информацию о языке для кодирования MIME с расширениями файлов. Сохраните значение по умолчанию как есть. Alias

www.books-shop.com

Web-служба

265

Например, если имя пользователя joe, а группа Apache называется httpd, причем в директиве UserDir определен каталог public_html, предыдущие команды будут выглядеть так: chown -R joe.httpd -joe/puplic_html chmod -R 2770 ~joe/public_html Первая команда chown изменяет владельца каталога ~joe/public_html (также как и всех файлов и подкаталогов внутри него) на joe.hhtpd. Другими словами, она .дает пользователю joe и группе httpd полное право владения всеми файлами и каталогами в каталоге public_html. Следующая команда (chmod) задает полномочия доступа как 2770; т.е. только пользователь (joe) и группа (httpd) имеют полные привилегии чтения, записи и выполнения в каталоге public_html для всех файлов и подкаталогов внутри него. Кроме того, когда в каталоге public_html создается новый файл или подкаталог, он получает идентификатор (ID) группы с помощью названной выше команды. Это открывает Web-серверу доступ, к новому файлу без вмешательства пользователя. Если учетные записи пользователей в системе задаются с помощью сценария (такого как /usr/bin/useradd в системах Linux), можно попробовать встроить в него процесс создания Web-сайта: Добавьте команду mkdir для введения используемого по умолчанию каталога public_html (если именно он задается в директиве UserDir), необходимого для создания Web-каталога. Добавьте команды chmod и chown, чтобы дать Web-серверу полномочия пользователя для чтения и выполнения файлов/каталогов в этом общем каталоге.

Конфигурирование access.conf

Access.conf — это последний конфигурационный файл, который необходимо изменить. Файл access.conf используется для задания полномочий доступа к таким объектам как файлы, каталоги и сценарии Web-сайта. На листинге 12.4 показан используемый по умолчанию файл access.conf с удаленными комментариями. Листинг 12.4. Используемый по умолчанию access.conf

Options FollowSymLinks AllowOverride None

Options Indexes FollowSymLinks AllowOverride None order allow, deny allow from all

AllowOverride None' Options None

Это единственный конфигурационный файл, в котором нужно изменить несколько строк директив. Первая подобная директива имеет следующий синтаксис: . . . и используются как скобки для выделения группы директив. Область действия вложенных директив ограничена указанным путем доступа каталога (вместе с подкаталогами); однако можно использовать только те директивы, которые допустимы в контексте каталога. Указанный каталог является либо полным путем к каталогу, либо строкой метасимволов. Первый конфигурационный контейнер . . . строго ограничивает действия. Он позволяет серверу следовать только по символьным ссылкам и отключает файлы управления доступом каждого каталога (.htaccess) для всех каталогов, начинающихся с корневого каталога

www.books-shop.com

Глава 12

266

системы. Сохраните этот конфигурационный сегмент без изменений. Откройте все, что необходимо, а остальное — заблокируйте. Например, следующий конфигурационный сегмент . . . разрешает индексирование каталбга и устанавливает свойство FollowSymLinks для каталога DocumentRoot. Может понадобится изменение каталога /usr/local/etc/hupd/htdocs на каталог, который был задан ранее в качестве аргумента директивы DocumentRoot в файле httpd.conf. Используемые по умолчанию параметры, которые указаны несколькими директивами (например, Options и AllowOverride), сообщают серверу: • Названный каталог и все подкаталоги, которые в нем могут индексироваться. Если существует индексный файл, он будет показан. В противном случае сервер создаст для каталога динамический индекс. Это определяет директива Options. • Названный каталог и все подкаталоги в нем могут иметь символьные ссылки, по которым будет следовать сервер (т.е. использовать как путь доступа) для получения доступа к информации. Это также определяет директива Options. \

• Ни один из параметров, определенных в контейнере каталога, не может быть переопределен локальным файлом управления доступом (определенным директивой AccessFileName в srm.conf, по умолчанию используется .htaccess). Это задается с помощью директивы AllowOverride. • Доступ разрешен для всех. Первое время вам будет достаточно используемых по умолчанию значений. Однако если сервер будет присутствовать в Интернете, то, возможно, вам придется удалить параметр FollowSymLinks из строки директивы Options. Его присутствие создает потенциальный риск нарушения защиты. Например, если каталог Web-сайта не имеет индексной страницы, сервер покажет автоматический индекс, который выведет все возможные в этом каталоге символьные ссылки. Это может привести к тому, что будет показана конфиденциальная информация или откроется доступ к исполняемому файлу, который находится в ставшем доступным каталоге. Последний конфигурационный сегмент на листинге 12.4 отключает для специального каталога с именем /usr/local/apache/share/cgi-bin все параметры и переопределения для каталога (.htaccess). Это каталог, где хранятся сценарии CGI. Поскольку содержимое сценариев CGI невозможно просмотреть или сделать доступным с помощью индексирования каталога, нет необходимости разрешать какой-либо управление каждым подкаталогом в этом каталоге. Следовательно, значения по умолчанию предписывают удаление всех параметров.

Управление сервером Apache

Apache 1.3.«поставляется с хорошим сценарием оболочки apachectl, который может использоваться для управления сервером различным образом. Этот сценарий подробно рассматривается в данном разделе. Однако прежде чем можно будет управлять Apache, необходимо стать суперпользователем в системе, если только сервер Apache не сконфигурирован для выполнения на порту с номером больше 1023. Обратите внимание, что если правильно задать конфигурацию inetd для httpd, не нужно ничего делать для запуска и остановки сервера Apache. Inetd запускает его, когда получает на порт HTTP запрос доступа.

Запуск сервера

Для запуска сервера выполните сценарий apachectl следующим образом:

/путь_к_каталогу_арасhе/sbin/ apachectl start

Если необходимо, чтобы сервер запускался автоматически после перезагрузки системы, надо добавить показанную строку в файл /etc/re.local или

www.books-shop.com

267

Web-служба

аналогичный файл в каталоге rc.d. Мы используем сценарий (см. листинг 12.5) для автоматического запуска и остановки при начальной загрузке и перезагрузке системы. Листинг 12.5. Сценарий httpd.sh #!/bin/sh

#

# httpd Этот сценарий оболочки запускает и останавливает сервер Apache # Он получает аргумент 'start' или 'stop' для запуска и остановки # процесса сервера, соответственно. # # Примечание: Вам может быть придется изменить информацию о пути # доступа, использованном в сценарии, чтобы отразить конфигурацию # своей системы. # [ -f /usr/local/apache/sbin/apachectl ] || exit О # Смотрите, как вызывался сценарий, case "$1" in start) и Запуск демона. echo -n "Starting httpd:" /usr/local/apache/sbin/apachectl start touch /var/lock/subsys/httpd echo stop) и Остановка демона. echo -n "Shutting down httpd:" /usr/local/apache/sbin/apachectl stop echo "done" rm -f /var/lock/subsys/httpd \ \

*)

echo "Usage: httpd {start | stop}" ' - exit 1 ' esac exit 0

.

Мы поместили сценарий в каталог /etc/rc.d/init.d/ и сделали символьные ссылки: /etc/re.d/rc3.d/S80httpd -> /etc/rc.d/init.d/httpd.sh /etc/re.d/rc3.d/K80httpd -> /etc/rc.d/init.d/httpd.sh Во время запуска системы автоматически загружается сервер Apache. Сценарий также останавливает сервер Apache при выключении или перезагрузке системы.

Остановка сервера

Для остановки сервера выполните сценарий apachectl так:

/путь_к_каталогу_арасhе/sbin/арасhесt1 stop

Перезапуск сервера

Для перезапуска сервера выполните сценарий apachectl следующим образом:

/путь_к_каталогу_apache/sbin/apachectl restart Для выполнения постепенного перезапуска введите сценарий apachectl следующим образом: /путь/к/вашему/каталогу/apache/sbin/apachectl graceful

www.books-shop.com

268

.

Глава

Команда перезапуска посылает Apache сигнал SIGHUP, а команда постепенного перезапуска отправляет Apache сигнал SIGUSR1. Поскольку последний определен пользователем (т.е. разработчиками Apache), он больше подходит для выполняющегося сервера.

Получение полного статуса сервера

Для получения полнрго статуса сервера сначала необходимо убедиться, что в системе установлен текстовый Web-браузер Lynx. Этот удобный Web-браузер можно найти на сайте: h t t p : / / l y n x . b r o w s e r . o r g / . Когда Lynx установлен, можно получить полную информацию о статусе выполняющегося сервера, если выполнить сценарий apachectl следующим образом: /путь_к_каталогу_арасhе/sbin/арасhесt1 fullstatus На экран будет выведена информация, показывающая различные данные о статусе сервера. Вероятно, лучше перенаправить этот вывод в файл, так как, скорее всего, информация будет занимать больше одного экрана. Вот как можно перенаправить данные в файл с именем /tmp/status: /путь_к_каталогу_арасhe/sbin/арасhесt1 fullstatus > /tmp/status

Проверка конфигурационных файлов сервера

Чтобы протестировать конфигурационные файлы сервера на наличие синтаксических ошибок, выполните сценарий apachectl так: /путь_к_каталогу_apache/sbin/apachectl configtest

Тестирование сервера Apache

Запустите Web-браузер и укажите ему адрес Web-сайта, выполняющего вновь сконфигурированный сервер Apache. Если Web-браузер выполняется на той же машине, где и сервер Apache, можно использовать следующий URL-адрес: http://localhost/. Однако во всех остальных случаях необходимо определить точное имя хоста (такое как www. yourcompany. com). Если не введены никакие изменения в используемом по умолчанию каталоге htdocs, то будет выведена страница, которая сообщает «It Works!» Она поставляется с дистрибутивом Apache и ее можно изменить по собственному усмотрению. Убедитесь, что файлы журналов заполнены правильно. Для проверки файлов журналов войдите в каталог журналов и выполните команду: tail

-f

[/путь_доступа_к_ассеss_lод]

С помощью этой команды можно просматривать увеличивающийся файл журнала доступа access_log (когда определен параметр -f). Для получения доступа к сайту воспользуйтесь Web-браузером. А если вы уже находитесь на этой странице, перезагрузите страницу, которая в данный момент загружена в браузере. Появится запись, добавленная к списку на экране. Щелкните на кнопке Reload (Перезагрузить) еще несколько раз, чтобы убедиться, что обновляется файл журнала доступа. Если записи обновляются, файл журнала доступа работает. Нажмите Ctrl+C для выхода из сеанса команды tail. Если не видно никаких новых записей в файле, необходимо проверить параметры полномочий для файлов журналов и каталога, в котором они хранятся. Другой журнал, который также нужно проверить — это файл журнала ошибок error_log. Для того чтобы увидеть записи в журнале ошибок, воспользуйтесь: : tail -f [/путь_доступа_к_еггог_lод] Запросите несуществующий ресурс (такой как несуществующий файл) в Web-браузере — должны появиться записи, добавляющиеся в журнал ошибок. Если это происходит, то журнал ошибок сконфигурирован правильно.

Если все эти тесты прошли успешно, то сервер Apache сконфигурирован правильно.

www.books-shop.com

Web-служба

269

Управление сервером Apache

В этом разделе мы узнаем о типичных проблемах управления Web-сервером.

Конфигурирование Apache для сценариев CGI В начальный период WWW существовали только статичные страницы HTML, но теперь каждый Web-сайт использует сценарии CGI для предоставления динамичных, создаваемых во время работы Web-страниц. Поэтому средства CGI требуются практически для любой установки Web-сервера. Apache существенно упрощает поддержку сценариев CGI. Конфигурирование Apache для обработки запросов CGI включает информирование Apache о том, где хранятся программы CGI, настройку обработчиков (handler) для определенных расширений файлов и указание того, какие расширения файлов должны считаться программами CGI. Рекомендуем хранение программ CGI в одном центральном каталоге. Это позволяет лучше их контролировать. Рассредоточение программ CGI по всему Web-пространству сделает сайт неуправляемым и создаст дыры в системе защиты, которые будет трудно выявить.

Создание каталога программ CGI Создание центрального каталога программ CGI станет началом настройки защиты среды CGI. Хранить этот центральный каталог программ CGI лучше всего вне каталога DocumentRoot (корня документов), чтобы программы CGI не могли быть доступны непосредственно. Дело в том, что когда речь идет о программах CGI, необходимо предоставить внешнему миру о них как можно меньше информации. Сайт будет надежно защищен. Сначала создайте каталог вне каталога DocumentRoot. Например, если /www/mycompany/public/htdocs является каталогом DocumentRoot Web-сайта, то /www/mycompany/public/cgi-bin считается хорошим кандидатом для каталога программ CGI. Для создания псевдонима каталога программ CGI можно использовать директиву ScriptAlias. Если поддержка CGI устанавливается для первичного Web-сервера, отредактируйте файл httpd.conf и вставьте строку ScriptAlias со следующим синтаксисом: ScriptAlias /alias/ /путь_к_каталогу _программ_СС1_заканчивающийся_/

Например: ScriptAlias /cgi-bin/ /www/mycompany/public/cgi-bin/ Если поддержка CGI задается для виртуального сайта, добавьте строку ScriptAlias в контейнер , который определяет виртуальный хост. Например: NameVirtualHost 206.171.50.60

ServerName blackhole.nitec.com ScriptAlias /apps/ /www/nitec/blackhole/public/cgi-bin/

Здесь псевдоним /apps/ используется для создания псевдонима каталога программ CGI. Если в каталоге /www/nitec/blackhole/public/cgi-bin существует программа CGI с именем feedback.cgi, к ней можно получить доступ следующим способом: http://blackhole.nitec.com/apps/feedback.cgi После того как будет задана директива ScriptAlias, проверьте, что полномочия каталога разрешают Apache читать и выполнять находящиеся в каталоге файлы.

www.books-shop.com

270

Глава 12

Каталог, указанный в ScriptAIias, должен иметь очень строгие ограничения полномочий. Никто, кроме разработчика программы CGI или администратора сервера, не должен иметь всех полномочий доступа (читать, писать и выполнять). Обратите внимание, что можно определить несколько псевдонимов каталога программ CGI, но определенный в ScriptAIias каталог не станет доступен для просмотра (по умолчанию) из-за действия системы защиты. При запросе Apache пытается выполнить любой исполняемый файл (согласно полномочиям файла), находящийся в каталоге, определенном в SrciptAlias. Например: http://blackhole.nitec.com/apps/foo.cgi http://blackhole.nitec.com/apps/foo.pi http://blackhole.nitec.com/apps/foo.bak http://blackhole.nitec.com/apps/foo.dat Все эти запросы URL побуждают Apache выполнить различные файлы foo.

Нам не нравится идея выполнения в качестве программы CGI любого файла из определенного в ScriptAIias каталога. Надо ограничить имена программ CGI, чтобы только файлы с определенными расширениями считались программами CGI. Это осуществляется с помощью программ обработки, заданных в AddHandler. Например: Alias

/cgi-bin/

/путь_к_каталогу_сgi_вне_корня_документов/

Options ExecCGI -Indexes AddHandler cgi-script .pi .cgi

Строка директивы Alias приказывает Apache создать псевдоним cgi-bin для каталога /путь_к_каталогу_сgi_вне_корня_документов/. Строка Options ExecCGI 1 -Indexes дает команду Apache разрешить выполнение программы CGI из это го каталога и позволить каждому пользователю просматривать содержимое каталога. Строка AddHandler cgi-script .pl . cgi приказывает Apache использовать список указанных расширений в качестве расширений программ CGI (другими словами, когда Apache встречает URL запрашиваемого файла с одним из указанных расширений, сервер должен выполнять файл как программу CGI).

Разрешение доступа к cgi-bin для пользователей Многие провайдеры услуг Интернета (ISP — Internet Service Provider) предлагают Web-сайты с учетными записями пользователей. Эти Web-сайты обычно имеют URL, типа http://www.isp.net/~username. Они часто получают от пользователей заявку на обеспечение доступа к cgibin. Термин «доступ cgi-bin» используется для указания на возможность введения CGI на Web-сервере. Каталог программ CGI имеет псевдоним /cgi-bin/, отсюда и появилось это название. Другим общим термином, который стал очень популярным, является «домашняя страница». Он относится к индексной странице верхнего уровня каталога Web-пользователя. В этом разделе рассматриваются два способа предоставления доступа cgi-bin для пользователей на Web-сервере Apache. Реализовать нужно только один из этих методов. Использование контейнеров Directory или DirectoryMatch Когда в директиве UserDir задается каталог, Apache рассматривает его как каталог верхнего уровня для Web-сайта пользователя, например: ServerName www.yourcompany.com

UserDir

public_html

www.books-shop.com

Web-служба

271

Теперь, когда приходит запрос к www. yourcompany. com/username, Apache находит домашний каталог указанного пользователя (обычно проверяя файл /etc/passwd). Затем Apache присоединяет указанный в UserDir каталог для создания имени пути доступа к каталогу верхнего уровня Web-пользователя. Например: www.yourcompany.com/joe

Это заставляет Apache искать /home/joe/public_html (предполагая, что /home/joe является домашним каталогом joe). Если этот каталог существует, его индексная страница будет послана запрашивающему клиенту. Для того чтобы добавить поддержку CGI для каждого пользователя необходимо создать следующую конфигурацию в одном из конфигурационных файлов сервера Apache: , который применяет регулярные выражения, например: Directory " proxy:http://[~:/]+/- *>

Теперь посмотрим на часто используемые конфигурации прокси-сервера.

Кэширование удаленных Web-сайтов

В Интернете и в интранете большая часть Web-содержимого статична, поэтому кэширование на локальном прокси-сервере позволит сэкономить ценную полосу пропускания сети. Поддерживающий кэширование прокси-сервер будет извлекать запрошенный документ из сети, когда кэш содержит документ с истекшим сроком хранения или когда запрошенный документ отсутствует в кэше. Чтобы включить кэширование на прокси-сервере, необходимо определить директивы кэширования внутри специального контейнера каталога, например:

CacheRoot /www/cache CacheSize 1024 CacheMaxExpire 24

Эта конфигурация определяет кэширующий прокси-сервер, который записывает кэшируемые файлы в каталог /www/cache. Он разрешает записать 1024 Кбайт данных (1 Мбайт). Кэш должен хранить данные в течение суток. Если не нужно, чтобы внешние пользователи перегружали прокси-сервер, можно ограничить к нему доступ по хосту, либо аутентификацией именем пользователя и паролем. Чтобы контролировать, какие хосты имеют доступ к прокси-серверу, можно создать конфигурацию:

AuthType Basic AuthName Proxy order deny.allow ' deny from all allow from myhost.nitec.com

Эта конфигурация запрещает доступ всем, кроме myhost .nitec. com. Если не требуется аутентификация по имени пользователя и паролю, можно использовать такую конфигурацию:

www.books-shop.com

Web-служба

289

Возможные значения{ Значение директивы allow Все (All)

Пример Это зарезервированное слово разрешает доступ всем хостам. Пример показывает, как использовать это значение.

allow from all

Полностью квалифи- allow from цированное имя до- wormhole. nit ее. com мена (FQDN) хоста

Доступ разрешен только хосту, который имеет указанное FQON. Директива allow в примере разрешает доступ только wormhole.nitec.com. Обратите внимание, что при этом сравниваются целые компоненты, tbys.com не будет соответствовать etoys.com.

Частичное имя домена хоста

allow from .mainoffice. nitec.com

Доступ разрешен всем хостам, которые соответствуют частичному имени хоста. Пример разрешает получить доступ к сайту всем хостам в сети .mainoffice.njtec.com. Например, developer!. mainoffice.nitec.com и developer2.mainoffice. nitec.com получат доступ к сайту. Однако хосту developer3.baoffice.nitec.com доступ запрещен.

Полный IP-адрес хоста

allow from 206.171.50.50

Доступ разрешен только указанному IP-адресу. Пример показывает полный IP-адрес (все четыре байта IP-адреса присутствуют), 206.171.50.50, которому разрешен доступ.

Частичный IP-адрес

Пример 1: allow from 206.171.50 Пример 2: allow from 130.86

Когда в директиве allow присутствуют не все четыре байта IP-адреса, частичный IP-адрес сравнивается слева направо, причем разрешается доступ хостам, которые имеют подходящие образцы IP-адресов (т.е. являются частью той же самой подсети). 6 первом примере имеют доступ все хосты с IP-адресами в диапазоне от 206.171.50.1 до 206.171.50.255. Во втором примере доступ разрешен всем хостам из сети 130.86.

Пара сеть/сетевая маска

allow from 206.171.50.0 /255.255.255.0

Этот параметр позволяет определить диапазон IP-адресов, используя адрес сети и сетевую маску. Пример разрешает иметь доступ только хостам с адресами в диапазоне от 206.171.50.1 до 206.171.50.255. Подобное свойство доступно в Apache 1.3 и более поздних версиях.

Спецификация сеть/nnn CIDR

allow 206.171. 50.0/24

Похоже на предыдущий параметр, за исключением того, что сетевая маска состоит из nnn старших битов со значением 1. Пример означает разрешение для 206.171.50.0/255.255.255.0. Это свойство доступно в Apache 1.3 и более поздних версиях.

,

i

Здесь сервер Apache будет задавать переменную окружения msjbrowser для всех браузеров, которые предоставляют строку MSIE как часть заголовка User-Agent. Директива allow будет допускать только браузеры, для которых задана переменная ms_browser. deny from еnv= Эта директива (вариант директивы deny) отказывает в доступе всем хостам, для которых задана переменная. Например: BrowserMatch "MSIE" ms_browser Directory /path/to/Vbscript_directory> order deny, allow allow from all deny from env=ms_browser

Здесь доступ блокируется для всех Web-браузеров, которые посылают строку MSIE как часть заголовка User-Agent в запросе.

www.books-shop.com

290

Глава 12

Использование базовой аутентификации, определенной HTTP

Поддержка базовой аутентификации, определенной протоколом HTTP, присутствует в Apache уже давно. По умолчанию Apache предоставляет ее с помощью модуля mod_auth.c.

Использование стандартного mod_auth

Этот модуль компилируется по умолчанию в стандартном дистрибутиве. Стандартная базовая аутентификации HTTP на основе модуля mod_auth использует для подтверждения аутентификации имена пользователей, имена групп и пароли, хранящиеся в текстовых файлах. Это успешно работает, когда пользователей немного. Но если пользователей тысячи, применение mod_auth создает проблемы с производительностью. В таком случае можно использовать файлы DBM, DB Berkeley или даже базу данных SQL. Используемый по умолчанию модуль аутентификации предлагает следующие директивы. AuthUserFile

Эта директива задает имя текстового файла, который содержит имена пользователей и пароли, использованные в базовой аутентификации HTTP. Необходимо предоставить полностью квалифицированный путь доступа к используемому файлу. Например:

AuthUserFile /www/nitec/secrets/.htpasswd Данный файл обычно создается с помощью утилиты поддержки, называемой hppasswd. Формат этого файла простой. Каждая строка содержит имя одного пользователя и зашифрованный пароль. Чтобы улучшить защиту, храните определенный в AuthUserFile файл вне дерева документов Web- сайта. AuthGroupFile

Директива определяет текстовый файл, который будет использоваться как список групп пользователей для базовой аутентификации HTTP. Имя файла является абсолютным путем доступа к файлу группы. Этот файл можно создать с помощью любого, текстового редактора. Формат файла: groupname:

имя_пользователя_1

имя_пользователя_2 имя пользователя_3

. . .

Чтобы- усилить защиту, убедитесь, что определенный в AuthGroupFile файл находится вне дерева документов Web-сайта. AuthAuthoritative on | off Если для одного и того же каталога используется несколько схем аутентификации, задайте для директивы значение on. Тогда, если в первой схеме паре имя пользователя/пароль откажут в проверке, она сможет осуществить ее в схеме более низкого уровня. Посмотрим на пример базовой аутентификации. Он показывает, как создавать каталог с ограниченным доступом, который требует ввода имени пользователя и пароля. Чтобы упростить пример, предположим для Web-сайта с именем a p a c h e . n i t e c . c o m следующие параметры настройки:

DocumentRoot /data/web/apache/public/htdocs AccessFileName .htaccess AllowOverride All Предположим, что нужно ограничить доступ так, чтобы только пользователь с именем «reader» и паролем «bought-it» мог обращаться к каталогу /www/IDGbooks/readers. Выполните следующие действия для ограничения доступа. Шаг 1: Создайте файл пользователей с помощью htpasswd Стандартный дистрибутив Apache поставляется с утилитой htpasswd, которая создает файл пользователей, необходимый директиве AuthUserFile. Используйте программу так: htpasswd -с /data/web/apache/secrets/.htpasswd reader

www.books-shop.com

Web-служба

^

291

Утилита htpasswd запрашивает пароль для «reader». Введите «bought-it», затем введите пароль еще раз для подтверждения отсутствия опечаток. После повторного ввода пароля утилита создает в каталоге /data/web/apache/secrets файл с именем .htpasswd. При этом: • Используйте параметр -с для сообщения htpasswd, что необходимо создать новый файл пользователей. Если файл паролей уже существует и надо добавить новый пользователь, этот параметр не нужен. • Поместите файл пользователей вне корневого каталога документов сайта apache. nitec. com, если нужно запретить его неавторизированную загрузку через Web. • Используйте в имени файла в качестве первого символа точку (.), чтобы он не появлялся в выводе Is, если не указан параметр -а. Выполните команду:

cat /data/web/apache/secrets/.htpasswd С помощью этой команды вы можете вывести строку, похожую на следующую (пароль будет иным, чем в показанном примере): reader :hulR6FFh1sxK6

Это подтверждает, что в файле .htpasswd определен пользователь с именем «reader». Пароль «bougth-it» зашифрован программой htpasswd с помощью стандартной функции crypt(). Шаг 2: Создание файла .htaccess Используя текстовый редактор, добавьте следующие строки к файлу /www/IDGbooks/readers/.htaccess: AuthName "IDG Readers Only" AuthType Basic AuthUserFile /data/web/apache/secrets/.htpasswd require user reader

Первая директива AuthName задает область аутентификации. В действительности это просто метка, которая посылается Web-браузеру как подсказка того, к чему он собирается получить доступ. Строка «IDG Readers Only» указывает, что только читатели IDG могут получить доступ к нашему каталогу. AuthType определяет тип используемой аутентификации. Так как поддерживается только базовая аутентификация, AuthType всегда имеет значение «Basic». Следующая директива, AuthUserFile, определяет имя файла для файла пользователей. Здесь обозначается путь доступа к файлу пользователей. Последняя директива require указывает, что пользователю с именем «reader» разрешен доступ к каталогу. Шаг 3: Задание полномочий файлов После того как будут созданы файлы .htaccess и .htpasswd, важно убедиться, что читать их может только Apache. Никто из пользователей, за исключением владельца файла и Apache, не должен иметь к ним доступ. Шаг 4: Тестирование Воспользуйтесь Web-браузером для доступа к следующему URL: http://apache.nitec.com/chapter 12. Apache пошлет браузеру заголовок статуса 401 и заголовок ответа WWW-Authenticate вместе с областью аутентификации (заданной в AuthName), а также информацию о типе аутентификации (заданную в AuthType). Браузер выведет диалоговое окно, которое попросит ввести имя пользователя и пароль. Рекомендуем проверить, нельзя ли войти в систему без имени пользователя и пароля. Не вводите ничего в поля ввода в диалоговом окне и нажмите кнопку ОК. Это должно привести к ошибке аутентификации. Браузер снова получает тот же самый запрос аутентификации, поэтому выводит новое диалоговое окно. Если вы щелкните на кнопке Cancel, то браузер покажет стандартное сообщение Apache об ошибке — «Authentication Required». При нажатии кнопки Reload браузер запрашивает тот же URL и получает с сервера тот же

www.books-shop.com

292

Глава 12

запрос аутентификации. В этот раз введите «reader» в качестве имени пользователя и «bought-it» в качестве пароля, затем щелкните на кнопке ОК. Теперь сервер Apache разрешит доступ к каталогу. Можно изменить сообщение «Authentication Required», используя директиву ErrorDocument: , ErrorDocument 401 /nice_40lmrssage.html Вставьте эту строку в файл srm.conf и создайте собственное сообщение в файле nice_401message.html. Вместо того, чтобы позволить одному пользователю с именем «reader» получить доступ к ограниченной области (как показано в предыдущем примере), в этом примере каждому пользователю, принадлежащему к группе с именем «asb_readers», разрешается доступ к тому же каталогу. Предположим, что эта группа состоит из двух пользователей: pikejb и bcaridad. Для предоставления пользователям доступа к каталогу из группы asb_readers выполните: Шаг 1: Создайте файл пользователей с помощью htpasswd Используя утилиту htpasswd создайте пользователей pikejb и bcaridad. Шаг 2: Задайте файл группы Используя текстовый редактор, такой как vi, создайте файл с именем /data/web/apache/secrets/.htgroup. Он имеет одну строку: asb_readers: pikejb bcaridad Шаг 3: Создайте файл .htaccess в /data/web/apache/public/htdocs/ chapter_10 Используя текстовый редактор, добавьте следующие строки к файлу с именем /www/IDGbooks/readers/.htaccess: AuthName, "IDG Readers Only" AuthType Basic AuthUserFile /data/web/apache/secrets/.htpasswd AuthGroupFile /data/web/apaChe/secrets/.htgroup require group asb_readers Это почти такая же конфигурация, как и в предыдущем примере, но с двумя изменениями. Во-первых, здесь добавлена новая директива AuthGroupFile, указывающая на созданный перед этим файл группы .htgroup. Во-вторых, строка директивы require требует группу с именем «asb_readers». Другими словами, Apache разрешит доступ любому, кто принадлежит к этой группе. Обратите внимание на то, что можно было бы использовать строку: require user pikejb bcaridad вместо require group asb_readers Однако перечисление всех пользователей в строке require может стать утомительным и вызывать ненужные проблемы. Используя группу, можно добавлять или удалять множество пользователей. Как и в предыдущем примере, важно убедиться, что файлы .htaccess, .htpasswd и .htgroup может читать только сервер Apache и что никто, кроме владельца, не имеет права записи в эти файлы. Для Apache используйте управление доступом на основе хоста и базовой схемы аутентификации HTTP. Например: AuthName "IDG Readers Only" AuthType Basic AuthUserFile /data/web/apache/secrets/.htpasswd AuthGroupFile /data/web/apache/secrets/.htgroup require group asb_readers order deny, allow deny from all allow from .nitec.com

www.books-shop.com

Web-служба

29& Это то же самое, что и в предыдущем примере, но добавлены три директивы управления доступом на основе хоста (см. выше). Первая из них, директива order, приказывает Apache оценить директиву deny до выполнения директивы allow. Директива deny приказывает Apache отказать в доступе всем хостам. Директива allow предписывает Apache разрешить доступ из домена . nitec. com. Это сообщает Apache, что любой хост в домене . nitec. com может получить доступ к этому каталогу. Обратите внимание, здесь Apache будет предполагать, что для каталога требуется аутентификация как на основе хоста, так и базовая аутентификация HTTP. Если нужно разрешить доступ, когда пользователь вводит реальную пару имя пользователя/пароль или делает запрос из домена nitec. com, необходимо в конце предыдущей конфигурации добавить satisfy any.

Мониторинг статуса сервера

. Модуль mod_status.c позволяет администраторам Apache осуществлять мониторинг сервера через Web. Создается страница HTML со статистикой сервера. Кроме того, формируется другая страница, предназначенная для чтения компьютером. Информация на обеих страницах содержит: версию сервера и дату/время компиляции; текущее время серверной системы; время, когда сервер был последний раз перезапущен; рабочий период сервера; общее число обслуженных обращений; общее число переданных байтов; число неработающих серверов и их статусы; средние значения, определяющие число запросов в секунду; число байтов, обработанных в секунду, и среднее число байтов на запрос; процент использования центрального процессора каждым из дочерних серверов; общая нагрузка на сервер процессами Apache и список виртуальных хостов и запросов, обрабатываемых в настоящее время. Этот модуль не компилируется по умолчанию в стандартном дистрибутиве Apache. Его необходимо компилировать в исполняемый файл Apache (httpd) самостоятельно. После компиляции модуля mod_status и компоновки с сервером Apache, необходимо определить местоположение для URL-адреса , который Apache должен использовать при выводе информации. Другими словами, надо сообщить Apache, какой URL будет предоставлять статистику сервера Web-браузеру. Предположим, что имя домена yourdomain.com и использован URL: www.mydomain.com/apache-status. В контейнере можно сообщить серверу, что этот URL необходимо обрабатывать с помощью программы обработки server-status, находящейся в модуле mod_status:

SetHandler server-status

Здесь директива SetHandler задает программу обработки (server-status) для ранее упомянутого URL. Этот сегмент конфигурации находится в файле access.conf. Однако он может быть в любом из трех конфигурационных файлов. Когда эта конфигурация будет добавлена в один из трех файлов, можно перезапустить сервер и получить доступ к указанному URL из браузера. Обратите внимание, что в примере контейнер позволяет каждому увидеть статус сервера с помощью указанного URL, что может быть нежелательно с точки зрения безопасности. Чтобы гарантировать, что только машины из внутреннего домена могут получить доступ к странице статуса, можно заменить предыдущую конфигурацию следующей:

SetHandler server-status order deny, allow deny from all

allow from .yourdomain.com

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

294

Глава 12

Yourdomain.com нужно заменить именем собственного домена. Если необходимо, чтобы к этой странице имели доступ только один или несколько избранных хостов, можно просто перечислить имена хостов в строке директивы allow. Вы можете иметь страницу статуса, которая обновляется автоматически, если браузер поддерживает команду refresh (обновить). Обращение к странице http://www.yourdomain.com/ server-status?refresh=N будет обновлять страницу каждые N секунд. Чтобы упростить изображение статуса, добавьте ?auto в конце URL. Эта строка запроса прикажет Apache предоставлять упрощенный вывод.

Ведение журналов посещений и ошибок

Знание текущего статуса сервера полезно при управлении сервером. Кроме того, важно и интересно иметь представление о том, кто посещает Web-сайт. На рынке одновременно появились программное обеспечение Web-серверов и программы анализа серверных журналов. Эти программы стали частью повседневной работы многих Web-администраторов. Вместе со всем этим началась эра несовместимости файлов журналов, что сделало анализ журналов трудным и обременительным. Нет такой программы анализа, которая работает со всеми файлами журналов. Затем появилась спецификация CLF (Common Log Format — Общий формат журнала). Это позволило всем Web-серверам записывать журналы сходным образом, делая тем самым проще анализ журналов различных серверов. По умолчанию стандартный дистрибутив Apache содержит модуль mod_log_config, который отвечает за базовое создание журналов и записывает файлы журналов CLF. Можно изменить это, используя директиву LogFormat. Однако CLF удовлетворяет требования к журналам, предъявляемым в большинстве компьютерных сред. Файл CLF содержит отдельную строку для каждого запроса. Строка состоит из нескольких маркеров, разделенных пробелами: host ident authuser date request status bytes Если маркер не нужен, то она представляется с помощью дефиса (—). Маркеры имеют следующий смысл: • Host: Это полностью квалифицированное имя домена клиента или его IP- адрес • Ident: Если директива IdentifyCheck включена и клиентская машина выполняет identd, то это сообщенная клиентом информация об идентичности • Authuser: Если запрошенный URL требует успешной базовой аутентификации HTTP, то значением является имя пользователя • Date: Дата и время запроса " Request: Строка запроса от клиента, заключенная в двойные кавычки ("") • Status: Код статуса HTTP из трех цифр, возвращаемый клиенту • Bytes: Число байтов в объекте, возвращенном клиенту, исключая все заголовки HTTP Поле даты может иметь следующий формат: date = [день/месяц/год:час:минута:секунда часовой_пояс] Например: [02/Jan/1998:00:22:01 -0800]

В модуле mod_log_config доступны четыре директивы: TransferLog filename | " | /path/to/external/program"

www.books-shop.com

Web-служба

^

295

Эта директива задает имя файла журнала или программы, куда будет послана журнальная информация. По умолчанию журнальная информация представлена в формате CLF (общем формате журнала). Он может быть модифицирован с помощью директивы LogFormat. Когда директива TransferLog находится внутри контейнера виртуального хоста, журнальная информация форматируется с помощью находящейся в этом контексте директивы LogFormat. Если в том же контексте нет директивы LogFormat, используется формат журнала сервера. Директива TransferLog получает в качестве аргумента либо путь доступа к файлу журнала, либо конвейер к внешней программе. Имя файла журнала предполагается относительно ServerRoot, если нет ведущего символа /. Например, если ServerRoot равен /etc/httpd, то следующая директива прикажет Apache послать журнальную информацию в файл /etc/httpd/logs/ access.log: TransferLog logs/access.log

Когда аргументом является конвейер к внешней программе, журнальная информация посылается на стандартный вход внешней программы (STDIN). Обратите внимание, что для VirtualHost не запускается новая программа, если виртуальный хост наследует TransferLog от основного сервера. Если используется программа, то она выполняется под именем пользователя, который запустил httpd. Это будет root, если сервер был запущен суперпользователем root. Проверьте безопасность программы. LogFormat [псевдоним]

Эта директива определяет формат используемого по умолчанию файла журнала, указанного в директиве TransferLog. По умолчанию установлено значение "%h %1 %u %t \"%r\" %s %b". Если в строку директивы для формата включен псевдоним, можно использовать его в других директивах LogFormat и CustomLog, а не повторять всю строку формата. Директива LogFormat только определяет псевдоним. В действительности она даже не применяет формат. CustomLog Как и директива TransferLog, эта директива позволяет посылать журнальную информацию в файл журнала или внешней программе. Однако, в отличие от директивы TransferLog, использован модифицированный формат журнала, который может быть определен в качестве аргумента. . Аргумент формата задает формат для каждой строки файла журнала. Для формата доступны в точности те же параметры, что и для аргумента директивы LogFormat. Если формат включает какие-то пробелы (что будет в большинстве случаев), он должен быть заключен в Двойные кавычки (« »). Вместо строки реального формата можно использовать псевдоним формата, определенный в директиве LogFormat. Псевдонимы доступны только для Apache 1.3 или более поздних версий. Кроме того, директивы TransferLog и CustomLog могут использоваться несколько раз для каждого сервера, что приведет к записи отдельного запроса в несколько файлов журналов. CookieLog

Директива CookieLog задает имя файла для записи журнала cookie (текстовые файлы идентификации браузера сервером. — Прим. ред.). Имя файла определяется относительно ServerRoot. Эта директива включается только для совместимости с mod_cookies и не приветствуется. Поэтому ее использование не рекомендуется. Применяйте вместо нее директиву модуля отслеживания пользователей. Модуль отслеживания пользователей mod_usertrack рассматривается далее в этой главе.

www.books-shop.com

296

Глава 12

Модификация файлов журналов сервера

Хотя CLF удовлетворяет большинству требований к журналу, иногда полезно изменить записываемые в него данные. Например, может потребоваться записать в журнал тип браузера, который получает доступ к сайту, чтобы Web-группа по проектированию могла определить, какой использовать тип HTML в зависимости от вида браузера. А иногда необходимо узнать, какие Web-сайты посылают (т.е. ссылаются на вас) посетителей на ваши сайты. Все это достаточно легко реализуется в Apache. Используемый по умолчанию модуль создания журналов, mod_log_config, поддерживает модифицированные журналы. Модифицированные форматы задаются с помощью директив модуля LogFormat и CustomLog. Аргумент формата в LogFormat и CustomLog является строкой. Она может иметь как буквенные символы, так и особые спецификаторы формата типа %. Когда в этой строке используются буквенные символы, они копируются в файл журнала для каждого запроса. Спецификатор % заменяется соответствующим значением. Спецификаторами типа % являются: %b: Число посланных байтов, исключая заголовки HTTP %f: Имя файла запроса %{variable}e: Содержимое переменной окружения VARIABLE %h: Удаленный хост, который сделал запрос %{ IncomingHeader }i: Содержимое IncomingHeader — т.е. строк заголовка в запросе, посланном серверу. Символ i в конце означает, что это клиентский (входящий — in) заголовок %1: Если включена директива IdentityCheck и клиентская машина выполняет identd, то это является информацией идентичности, которую сообщил клиент %{ MODULE_NOTE }n: Содержимое примечания MODULE_NOTE из другого модуля %{ OutgoingHeader }o: Содержимое OutgoingHeader — т.е. строк заголовка в ответе. Символ о в конце означает, что этот серверный (исходящий — out) заголовок %р: Порт, на котором обслужен запрос %Р: Идентификатор (PID) дочернего процесса, который обслужил запрос %r: Первая строка запроса %s: Статус, который сервер вернул в ответ на запрос. Обратите внимание, что когда запрос переадресуется, значение этого спецификатора формата все еще является статусом первоначального запроса. Если необходимо сохранять статус переадресованного запроса, используйте вместо этого %..>s %t: Время запроса. Формат времени тот же самый, что и в формате CLF %{format}t: Время в форме заданной форматом format (см. man-страницу strftime) %t: Время в секундах, потребовавшееся для обслуживания запроса %и: Если запрошенный URL требует успешной базовой аутентификации HTTP, то имя пользователя является значением этого спецификатора формата. Значение может быть фиктивным, если сервер после попытки аутентификации возвращает статус 401 (Authentication Required — Требуется аутентификация) %u: Путь доступа запрошенного URL %v: Имя сервера или виртуального хоста, на который приходит запрос

www.books-shop.com

Web-служба

297

Условную информацию можно включить в каждый из предыдущих спецификаторов. Условиями могут быть присутствие (или отсутствие) некоторых кодов статуса HTTP. Предположим, что требуется записывать в журнал все ссылающиеся URL, которые направляют пользователя на несуществующую страницу. В этом случае сервер создает заголовок статуса 404 (Not Found — не найден). Поэтому для записи в журнал ссылающегося URL можно использовать спецификатор формата: '%404{Referer}i'

Аналогично, чтобы записывать в журнал URL, которые приводят к необычному статусу, можно использовать: '%!200,304,302{Referer}i'

Обратите внимание на использование символа «!» для обозначения отсутствия списка статуса сервера. Аналогично, чтобы включить дополнительную информацию в конец спецификатора формата CLF, можно расширить формат CLF, который определяется строкой формата: "%h %1 %u %t \»%r\" %s %b" Например: "%h %1 %u %t \»%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""

Эта спецификация формата записывает в журнал данные в формате CLF и в каждую запись журнала добавляет информацию Referer и User-agent, находящуюся в предоставляемых клиентом заголовках.

Использование журналов ошибок

Без записи в журналы ошибок невозможно определить, что происходит неправильно и где появилась ошибка. Интересно то, что запись журнала ошибок поддерживается ядром Apache. Директива Error Log позволяет записывать в журнал все типы ошибок, которые встречает Apache. Можно определить либо имя файла, либо использовать демон syslog (syslogd) для записи в , журнал всех ошибок. Например: ErrorLog

/logs/error_log

Здесь Apache будет записывать сообщения об ошибках в файл /logs/error_log. Чтобы записывать журнал, используя средство syslog, укажите: ErrorLog syslog

С помощью директивы LogLevel можно определить сообщения, которые Apache посылает в syslog. Например: ErrorLog syslog LogLevel debug Здесь серверу Apache предложено посылать сообщения отладки в syslog. Если требуется сохранять сообщения отладки в другом файле с помощью syslog, тогда нужно изменить /etc/syslog.conf. Например: *.debug

/var/log/debug

Добавьте эту строку в /etc/syslog.conf, перезапустите syslogd (killall -HUP syslogd) и Apache разрешит записывать все сообщения отладки Apache в файл /var/log/debug. Обратите также внимание, что можно задать для LogLevel любое из следующих значений: • emerg: Сообщения об аварии • alert: Тревожное сообщение • crit: Критически важное сообщение • • error: Сообщение об ошибке

www.books-shop.com

298

Глава 12

• warn: Предостережения • notice: Уведомляющие сообщения • info: Информационные сообщения • debug: Сообщения, записываемые в журнал на уровне отладки, которые будут также включать файл исходного кода и номер строки, где создается сообщение Если необходимо видеть обновления в syslog или любых других файлах журналов по мере их появления, используйте утилиту tail с параметром -f /путь доступа/к/журналу.

Анализ серверных файлов журналов

Существует много утилит независимых поставщиков для анализа журналов Web-серверов. Большинство из них предполагает, что файлы журналов будут в формате CLF. Проверьте, что в ваших журналах используется форматирование CLF. Вот некоторые из этих утилит и адреса URL, где их можно найти: • " WebTrends: http://www.webtrends.com/ • Wusage: http://www.boutell.com/wusage/ • wwwstat: http://www.ics.uci.edu/pub/websoft/wwwstat/ • http-analyze: http://www.netstore.de/Supply/http-analyze/ • pwebstats: http://www.unimelb.edu.au/pwebstats.html • WebStat Explorer: http://www.webstat.com/ • AccessWatch: http://netpressence.com/accesswatch/ Лучший способ узнать, какой из них подойдет для конкретной системы, — это попробовать или, по крайней мере, посетить Web-сайты для сравнения свойств. Мы считаем полезными две утилиты: Wusage и wwwstat. Wusage является нашими предпочтительным коммерческим приложением анализа журналов. Утилита легко конфигурируется и создает графические отчеты с помощью хорошо известной графической библиотеки компании GD. Удобна и бесплатная программа wwwstat: Она написана на Perl, поэтому нужно иметь в системе установленный интерпретатор Perl, с помощью которого можно будет выполнить утилиту.

Сопровождение файлов журналов сервера

На сайтах Apache с огромным числом посещений или большим количеством виртуальных доменов файлы журналов могут увеличиться до размеров, вызывающих проблемы с дисковой памятью. Если файлы журналов становятся очень большими, их необходимо заменить. Существуют два варианта замены журналов: можно использовать поставляемую вместе с Apache утилиту rotatelog или применить утилиту logrotate. Использование rotatelog Apache поставляется с утилитой поддержки журналов rotatelog. Используйте эту программу следующим образом: Transferlog " | /путь_доступ/K/rotatelog "

Например, если требуется менять журнал доступа каждые 86400 с (т.е. 24 часа), используйте строку: _ TransferLog "| /путь доступа/к/rotatelog /var/logs/httpd 86400" Информация журнала доступа за каждый день будет сохранена в файле с именем /var/logs/httpd. nnnn, где nnnn — длинное целое число. Использование logrotate Утилита logrotate заменяет, сжимает и отправляет по почте файлы журналов. Она облегчает администрирование файлов

www.books-shop.com

Web-служба

-

299

журналов. Утилита поддерживает автоматическую замену, сжатие, удаление и отправку почтой файлов журналов ежедневно, еженедельно, ежемесячно или в зависимости от размера. Обычно logrotate выполняется как ежедневное задание сгоп. Можно создать файл с именем /etc/logrotate.d/apache следующим образом: /путь_доступа_к_арасhе/ассеss_lод { compress rotate 5 main [email protected] errors/ [email protected] size=1024K post rotate kill -HUP 'cat /nyть_доступа_k/httpd. pid' endscript >

Эта конфигурация определяет, что файл /путь_доступа_к_арасНе/ъ.сcess_log будет заменяться, когда станет больше одного Мбайта (1024 Кбайт). Причем старые файлы журналов будут сжиматься и отправляться почтой по адресу [email protected] после прохождения через пять циклических замен, вместо обычного удаления. Любые ошибки, которые возникают во время обработки файла журнала, посылаются почтой по адресу root@you rdomain.com.

Усиление безопасности Web-сервера

В тот момент, когда Web-сервер открывается для общего доступа остальному миру, появляется лазейка для входа в систему. Большинство людей будут использовать то, что предоставляется на Web-сайте, но некоторые попытаются найти дыры в этом окне для получения информации, которая для них не предназначается. Злоумышленники хотят создать затруднительные ситуации, а некоторые из них пытаются украсть информацию. Если кому-то удается обнаружить дыру в защите, Web-сайты могут быть изуродованы непристойными материалами или потеряют секретные данные. Иногда атакующие не действуют на сайт непосредственно. Во время нелегального вторжения могут использоваться чужие серверы и ресурсы, что послужит поводом для юридического преследования. Нежелателен любой из этих сценариев. Чтобы уменьшить риск нарушения защиты, необходимо все время быть начеку. Сейчас не существует решения, которое можно было использовать на Web-сервере, чтобы сделать его безопасным на 100%. Поддержка высокой степени защищенности — это постоянно продолжающийся процесс, а администратор сайта должен быть в курсе того, что происходит в области компьютерной безопасности, и предпринимать предупреждающие меры, когда это необходимо. Самым первым шагом в создании системы защиты Web-сервера будет изучение и реализация технологии безопасности, рассмотренной в главе 18 («Безопасность») и в главе 19 («Сетевая безопасность»). Когда будут реализованы все возможные превентивные меры, рассмотренные в этих главах, мы подготовимся к изучению вопросов защиты Web-сервера.

Установка Apache, а не троянской программы Apache является свободно распространяемым программным обеспечением, поэтому важно получить его из надежного источника. Никогда не загружайте двоичные файлы Apache или исходный код с произвольного Web-узла или FTP. Сначала обращайтесь на официальный узел www.apache.org. В будущем исходный код Apache будет подписан PGP (Pretty Good Privacy, «прекрасная частная собственность» — технология защиты, поддерживающая целостность распространяемого программного обеспечения. — Прим.ред.}.

www.books-shop.com

300

Глава 12

Использование для Apache выделенных пользователя и группы

Если Apache выполняется как автономный сервер, создайте выделенного пользователя и группу для Apache. He используйте пользователя nobody или группу nogroup, особенно если они уже определены в системе. Есть вероятность, что существуют другие службы, где они используются системой. Это может привести к проблемам управления и безопасности. Вместо этого создайте новый пользователь и группу для Apache и вводите их с упомянутыми выше директивами.

Защита каталогов ServerRoot и журналов

Убедитесь, что каталоги ServerRoot (особенно каталоги журналов и файлы) недоступны для записи никому, кроме пользователя root. He нужно предоставлять пользователю/группе Apache полномочия для чтения или записи в каталоги журналов. Разрешение кому-то еще, кроме пользователя root, записывать файлы в каталоги журналов может привести к серьезной дыре в защите.

Отключение используемого по умолчанию доступа

Строгая модель защиты диктует, что не следует применять доступ по умолчанию, поэтому необходимо использовать выборочное запрещение доступа. Разрешайте определенный доступ только в определенных местоположениях. Чтобы блокировать используемый по умолчанию доступ, можно применить в одном из конфигурационных файлов Apache следующий конфигурационный сегмент: Directory /> Order deny, allow Deny from all

Сначала отключается весь доступ. Затем нужно включить доступ к определенному каталогу с помощью контейнера , чтобы открыть этот каталог. Например, если необходимо разрешить доступ к /www/mysite/ public/htdocs, добавьте конфигурацию:

Order deny, allow Allow from all

Этот метод — открытия только того, что нужно — является превентивной мерой безопасности. Мы рекомендуем его использовать.

Отключение переопределения пользователей

ЕСЛИ нужно запретить пользователям переопределение параметров настройки конфигурации сервера с помощью конфигурационного файла каталога (.htaccess), отключите это свойство следующим образом:

AllowOverride None Options None allow from all

Это запрещает пользователям делать 'переопределения и, фактически, ускоряет работу сервера. Скорость сервера увеличивается, так как он больше не ищет для каждого запроса файлы управления доступом согласно каталогу (.htaccerss).

Сокращение рисков CGI Наибольший риск для безопасности в Web создают приложения CGI. CGI (Common Gateway Interface — интерфейс общего шлюза) не опасен по своей природе. Однако плохо написанные приложения CGI являются основным

www.books-shop.com

Web-служба

~

301

источником дыр в системах Web-защиты. В действительности простота спецификации CGI облегчает многим неопытным программистам написание приложений CGI. Такие программисты, не зная о требованиях защиты межсетевого обмена, разрабатывают приложения, которые работают, но одновременно создают скрытые «черные ходы» и «дыры» в защите системы, на которой выполняются. Укажем три наиболее распространенных риска безопасности, которые могут создать приложения CGI: • Утечки информации: Они помогают хакерам проникнуть в систему. Чем больше информации получит хакер о системе, тем проще ему будет туда внедриться. • Выполнение системных команд с помощью приложений CGI: Во многих случаях удаленным пользователям удается обмануть сценарий почтовой системы, выводящей форму HTML, чтобы выполнить системную команду или получить конфиденциальную системную информацию. • Потребление системных ресурсов: Плохо написанное приложение CGI может использовать так много системных ресурсов, что сервер становится практически недоступным. При разработке и установке приложений CGI необходимо быть внимательным. Поскольку даже отлично написанные приложения могут создавать риск нарушения безопасности. Большинство дыр в защите, созданных приложениями CGI, связаны с введенной пользователем информацией.

Ограничения рисков CGI с помощью оболочек

Лучший способ ограничения рисков, связанных с CGI, состоит в полном отказе от приложений CGI. Однако в наши дни динамического Web-содержимого это нереально. Возможно, удастся централизовать все приложения CGI и тщательно следить за качеством их разработки. Во многих случаях, особенно в системах провайдеров услуг Интернета, для всех имеющихся Web-сайтов пользователи хотят применять CGI. В этом случае рекомендуем выполнение приложения CGI с идентификатором пользователя (UID), который владеет приложением CGI. По умолчанию выполняемые Apache приложения CGI применяют идентификатор пользователя Apache. Плохое приложение CGI, выполняемое с идентификатором пользователя, отличным от идентификатора пользователя сервера Apache, может повредить только файлы пользователя. Пользователь, отвечающий за приложение CGI, будет осторожнее, так как повреждено может быть только его собственное содержимое. Таким образом мы повысили ответственность и осведомленность пользователей и ограничили область потенциального повреждения. Для выполнения приложения CGI с помощью идентификатора пользователя, отличного от сервера Apache, нужен специальный тип программы, называемый оболочкой (wrapper). Программа оболочки будет разрешать выполнять приложение CGI от имени пользователя, который владеет файлом, а не по учетной записи пользователя сервера Apache. Некоторые оболочки CGI проводят дополнительные проверки безопасности, прежде чем выполнить запрошенные приложения CGI. В следующих разделах рассматриваются две популярные оболочки CGI. suEXEC Apache поставляется с приложением suEXEC, которое предоставляет пользователям Apache возможность выполнять программы CGI и SSI с идентификатором пользователя, отличным от идентификатора пользователя Apache. suEXEC является программой оболочки setuid. Она вызывается, когда поступает запрос HTTP к программе CGI или SSI, которую администратор определил для выполнения с идентификатором пользователя, отличным от идентификатора пользователя сервера Apache. При появлении такого запроса Apache предоставляет оболочке suEXEC имя программы, идентификатор

www.books-shop.com

302

Глава 12

пользователя и идентификатор группы. suEXEC выполняет программу, используя заданные идентификатор пользователя ,и идентификатор группы. До выполнения команды CGI или SSI оболочка suEXEC проходит ряд тестов для проверки корректности запроса. Подобная процедура тестирования проверяет, что владельцем сценария CGI является пользователь, которому разрешено выполнять оболочку, и что только владелец может использовать для записи каталог CGI или сценарий CGI. Если проверка безопасности прошла успешно, то оболочка suEXEC изменяет идентификатор пользователя и идентификатор группы на идентификатор пользователя и идентификатор группы рассматриваемого пользователя с помощью вызовов setuid и setgid. Также инициализируется список группового доступа со всеми группами, в которых состоит пользователь. suEXEC очищает среду процесса, создавая PATH безопасного выполнения (определенный во время конфигурирования), а также использует только те переменные, имена которых перечислены в списке безопасной среды (также созданного во время конфигурирования). Процесс suEXEC становится приложением CGI или командой SSI и выполняется. Это может показаться слишком трудоемким, .однако, позволяет усилить защиту. Конфигурирование и установка suEXEC Для установки поддержки suEXEC в Apache надо выполнить сценарий configure (или config.status): ./configure

-prefix=/nyrb/K/apache \ -enable-suexec \ -suexec-caller=httpd \ -suexec-userdir=public_html -suexec-uidmin=100 \ -suexec-gidmin=100 -suexec-safepath="/usr/local/bin:/usr/bin:/bin"

Далее представлено подробное объяснение этой конфигурации. -enable-suexec

Этот параметр включает поддержку suEXEG. -suexec-caller=httpd

Измените httpd на идентификатор пользователя, который используется в директиве User конфигурационного файла Apache. Это единственный пользователь, которому будет разрешено выполнять программу suEXEC. -suexec-userdir=public_html

Этот параметр определяет подкаталог в домашних каталогах пользователей, где будут храниться исполняемые файлы suEXEC. Измените pubKc_html на то значение, которое использовалось в директиве UserDir, определяющей корневой каталог документов для Web-сайта пользователя. -suexec-uidmin=100

Подобный параметр определяет наименьший идентификатор пользователя (UID), которому разрешено выполнение сценариев CGI на основе suEXEC. Другими словами, пользователи с меньшими идентификаторами не смогут выполнить команды CGI или SSI с помощью suEXEC. Необходимо просмотреть файл /etc/passwd и проверить, что выбранный диапазон не включает системные учетные записи, которые обычно меньше 100. -suexec-gidmin=100

, Такой параметр определяет наименьший идентификатор группы (UID), которой разрешено быть выполняющей. Другими словами, идентификатор группы (меньше этого числа) не позволит выполнить команды CGI или SSI с помощью suEXEC. Необходимо просмотреть файл /etc/group и проверить, что выбранный диапазон не включает группы системных учетных записей, которые обычно меньше 100.

www.books-shop.com

Web-служба

303

-suexec-safepath="/usr/local/bin:/usr/bin:/bin" Параметр определяет переменную окружения PATH, которая выполняется suEXEC для приложений CGI и команд SSI. Инициализация и тестирование suEXEC Когда оболочка suexec и новый исполняемый файл Apache установлены в подходящее место, перезапустите Apache. При запуске сервер Apache выведет сообщение: [notice] suEXEC mechanism enabled (wrapper: /usr/local/sbin/suexec)

Указано, что suEXEC стала активной. Протестируем работу suEXEC. Добавьте следующие строки-в файл srm.conf . UserDir public_html AddHandler cgi-script .pi

*

Первая директива (UserDir) задает корень документов Web-сайта пользователя как ~username/public_html, где username может быть любым пользователем системы. Вторая директива ассоциирует программу обработки cgi-script с файлами .pi. Это делается для выполнения сценариев Perl с расширениями .р! в качестве сценариев CGI. Для этого теста понадобится учетная запись пользователя. В данном примере мы будем использовать хост worrahole. nitec. con и пользователя с именем kabir. Скопируйте сценарий, показанный на листинге 12.6, в файл с именем test.pl и поместите его в каталог пользователя public_ html. Мы поместили файл в каталог ~kabir/public_html. Листинг 12.6. Сценарий CGI для тестирования поддержки suEXEC #!/usr/bin/perl #

# Проверьте, что предыдущая строка указывает на # правильное местоположение. Некоторые люди # хранят perl в /usr/local/bin. my ($key, $value); print "Content-type: text/html\n\n"; print "Test of suEXEC";

foreach $key (sort keys %ENV) { Rvalue = $ENV{$key} ;

print "$key = Svalue
" > exit 0; Для получения доступа к сценарию с помощью Web-браузера запрашивается следующий URL: http://wormhole.nitec.com/~kabir/test.pl. Сценарий CGI выполняется только после того, как пройдет все проверки безопасности, осуществляемые suEXEC. Оболочка suEXEC будет записывать запросы сценария в свой файл журнала. Запись в журнале для нашего запроса: [1998-12-23 16:00:22]: uid: (kabir/kabir) - gid: (kabir/kabir) cmd: test.pl Если вам необходимо знать, что сценарий выполняется с UID пользователя, можно вставить команду sleep, например sleep(lO), в цикл foreach. С ее помощью можно обрабатывать такие команды, как top или ps, на консоли Web-сервера, чтобы найти UID процесса, выполняющего test.pl. Можно также изменить владельца сценария с помощью команды chown. Затем с помощью Web-браузера попробуйте получить доступ к сценарию. Появится сообщение об ошибке, которое записывает в журнал suEXEC. Например, когда мы изменяем владельца сценария test.pl в каталоге ~kabir/public_html: chown root test.pl

мы получаем ошибку сервера, и в файл журнала записывается следующая строка:

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

304

Глава 12

[1998-12-23 16:00:22]: uid/gid (500/500) mismatch with directory (500/500) or program (0/500)

\ Здесь программа принадлежит пользователю с идентификатором 0, а группа по-прежнему определена как kabir (500), поэтому suEXEC отказывается ее выполнять. Как можно видеть, suEXEC делает то, что должна была делать. Чтобы гарантировать, что suEXEC будет выполнять программу test.pl в других каталогах, мы создали каталог cgi-bin в ~kabir/public_html и поместили в него test.cgi. После определения того, что новый каталог/файл принад- , лежит пользователю kabir и группе kabir, мы получаем доступ к сценарию, используя:

http://wormhole.nitec.com/"kabi r/cgi-bin/test.pi Если в системе существуют виртуальные хосты и требуется выполнять программы CGI и/или команды SSI с помощью suEXEC, необходимо применить директивы User и Group внутри контейнера . Задайте в этих директивах идентификаторы пользователя и группы, отличные от тех, которые в данный момент использует Apache. Если определена только одна (или ни одна) директива, то для контейнера подразумевается идентификатор пользователя или идентификатор группы сервер^.. В целях безопасности и эффективности все запросы suexec должны оставаться либо внутри корня документов верхнего уровня для запросов виртуальных хостов, либо внутри одного личного корня документов верхнего уровня для запросов userdir. Например, если существуют четыре сконфигурированных виртуальных хоста, нужно будет структурировать корни документов всех виртуальных хостов. Начинайте с одной основной иерархии документов Apache, чтобы воспользоваться suEXEC для виртуальных хостов.

CGIWrap

Утилита CGIWrap похожа на программу suEXEC в том, что позволяет пользователям использовать приложения CGI, не нарушая безопасности Web-сервера. Программы CGI выполняются с полномочиями владельца файла. Кроме того, CGIWrap выполняет несколько проверок приложения CGI и не будет работать, если какие-то проверки терпят неудачу. Утилита CGIWrap написана Натаном Нелингером (Nathan Neulinger); последняя версия CGIWrap доступна с первичного узла FTP на f t p : / / f t p . c c . u m r . e d u / p u b / c g i / c g i w r a p / . CGIWrap используется с помощью URL в документе HTML. В том виде, в котором она распространяется, утилита CGIWrap сконфигурирована для выполнения сценариев пользователей. Они находятся в каталоге ~/public_html/cgi-bin/. Конфигурирование и установка CGIWrap CGIWrap распространяется как tar-файл, сжатый с помощью gzip. Используя gzip, можно распаковать архив и извлечь его содержимое утилитой tar. Запустите'на выполнение сценарий Configure. Он попросит ответить на несколько вопросов. Большинство из них понятно без дополнительных объяснений, однако в этой оболочке есть свойство, отличающее ее от suEXEC. Наша новая оболочка позволяет создавать файлы allow (разрешения) и deny (запрета), которые могут ограничивать доступ к приложениям CGI. Оба эти файла имеют один и тот же формат (см. ниже): User ID mailto:Username@subnet1/mask1,subnet2/mask2 . . .

Разрешено иметь либо одно имя пользователя (нечисловой идентификатор пользователя), либо строку пользователя mailto:ID@subnet/mask, где могут быть определены одна или несколько пар subnet/mask (подсеть/маска), например: mailto:[email protected]/255.255.255.255

www.books-shop.com

Web-служба

^

305

ЕСЛИ эта строка находится в файле allow (определено имя файла), то приложения CGI пользователя kabir могут выполнять хосты, тсоторые принадлежат сети 206.171.50.0 с маской сети 255.255.255.0. После выполнения сценария Configure, необходимо запустить утилиту make для создания исполняемого файла CGIWrap. Приведение CGIWrap в рабочее состояние Для применения нашего приложения оболочки скопируйте исполняемый файл CGIWrap в каталог пользователя cgi-bin. Обратите внимание, что этот каталог должен соответствовать тому, что было определено в процессе конфигурирования. Самый простой способ заставить все заработать — это сохранить тип структуры каталога ~username/public_html/cgi-bin для каталога приложений CGI. Во время копирования исполняемого файла CGIWrap измените владельца и биты полномочий: chown root CGIWrap chmod 4755 CGIWrap Создайте в каталоге cgi-bin жесткие или символьные связи nph-cgiwrap, nph-cgiwrapd или cgiwrapd с CGIWrap: In [-s] CGIWrap cgiwrapd In [-s] CGIWrap, nph-cgiwrap In [-s] CGIWrap nph-cgiwrapd На нашем сервере Apache мы определяем для приложений CGI только расширение cgi. Поэтому мы переименовали исполняемый файл CGIWrap в cgiwrap.cgi, чтобы он стал работоспособным. Если существуют аналогичные ограничения, можно сделать так же, либо сформировать ссылку. Теперь можно выполнить приложение CGI следующим образом: http://www.yourdomain.com/cgi-bin/cgiwrap/usernarae/scriptname Теперь для получения доступа к приложению CGI test.cgi пользователя kabir на узле wormhole. nitec. com используйте: http://wormhole.nitec.com/cgi-bin/cgiwrap/kabir/test.cgi Если вы захотите увидеть отладочный вывод CGI, укажите cgiwrapd вместо CGIWrap, как в следующем URL: http://www.yourdomain.com/cgi-bin/cgiwrapd/username/scriptname Если это сценарий типа nph, нужно выполнить его с помощью такого URL: http://www.yourdomain.com/cgi-bin/nph-cgiwrap/username/scriptname

Уменьшение рисков, связанных с серверными дополнительными модулями

ЕСЛИ внешние приложения выполняются с помощью команды SSI (например, exec) риск нарушения защиты практически такой же, как и для приложений CGI. Однако в Apache можно отключить эту команду, используя директиву Options:

Options IncludesNOEXEC

Это отключает команды SSI exec и includes по всему Web-пространству; однако при необходимости их можно включить, определяя меньшую область действия контейнера каталога. Рассмотрим пример:

Options IncludesNOEXEC

www.books-shop.com

306

Глава 12

Options +Include

Конфигурационный сегмент отключает команду exec везде, кроме каталога /ssi.

Использование SSL для проведения безопасных транзакций

Электронная коммерция в Web развивается с необыкновенной быстротой. Многие компании создают Web-сайты электронной коммерции для организации деловой деятельности в Интернете. Одним из необходимых требований к такому сайту является наличие средств реализации безопасных транзакций, которые обеспечиваются протоколом SSL (Secure Sockets Layer Уровень безопасных сокетов). В связи с юридическими ограничениями, введенными в США на экспорт криптографических систем, Apache с поддержкой SSL получить нелегко. Однако в настоящее время для Apache доступно множество вариантов программного обеспечения SSL независимых поставщиков. Таблица 12.2 поможет вам выбрать то, что нужно. Модуль mod_ssl проработан лучше, чем Apache-SSL, и распространяется бесплатно. Частично он основывается на Apache-SSL. Однако это другой хорошо документированный модуль Ральфа Энгелыыелла (Ralf S. Engelschall). Мы рекомендуем использовать его при применении последней версии Apache.

Получение mod.ssl

Модуль mod_ssl не распространяется со стандартным дистрибутивом исходного кода Apache. Его нужно будет загрузить со следующего Web-узла: http: //www. engelschall. com/sw/mod_ssl/. Так как этот модуль зависит от пакета SSLeay (как и Apache-SSL), необходимо будет получить пакет SSLeay с узла FTP: ftp: //ftp. psy. uq. oz. au/pub/Crypto/SSL/. Американским гражданам, собирающимся использовать поддержку SSL в США, необходимо будет получить пакет RSA Reference Implementation (Эталонная реализация RSA) со следующего узла FTP: f t p : / / f t p . r s a . c o m / r s a r e f / . Таблица 12.2. Решения на основе SSL для Apache

Программное обеспечение

Распространение

Ограничение

Комментарии

Apache-SSL

Бесплатно

mod_ssl

Бесплатно

Red Hat Secure Server

Коммерческое

Raven SSL module

Коммерческое

Stronghold Web Server

Коммерческое

Коммерческое. Исполь- Не рекомендуется, так как это не законченное решение. зование в США может быть ограничено закона- Apache-SSL является множестми об авторских правах вом не очень хорошо документированных заплаток для и патентах Apache Коммерческое. Исполь- Завершенное решение. Хотя частично основывается зование в США может быть ограничено закона- на Apache-SSL, гораздо лучми об авторских правах ше разработано и документии патентах ровано Экспортные ограничения Самое дешевое коммерческое США, связанные с крип- решение. Основывается на тографией, Ограничива- mod ssl ют экспорт вне США и Канады Решение среднего уровня с Нет разумной ценой Нет Автор считает это решение SSL наиболее подходящим для серьезных узлов электронной коммерции. Самое дорогое среди коммерческих вариантов

www.books-shop.com

Web-служба

307

Просмотрите файл README на узле FTP, чтобы выбрать каталог для граждан США, где находится пакет rsaref20.tar.Z. Кроме того, вам понадобится работающий интерпретатор Perl 5 и необходимо- будет проверить на Web-сайте Apache или одном из его зеркал, что в системе используется самая последняя версия исходного кода Apache.

Компиляция и установка mod_ssl

Распакуйте все пакеты в подходящий каталог. Для подобных целей мы используем /usr/local/src. Когда все упомянутые ранее пакеты будут распакованы, приступайте к их компиляции и установке. Предположим, что необходимые пакеты попали в следующие каталоги: • /usr/local/src/apache_1.3.6 для дистрибутива исходного кода Apache • /usr/local/src/mod_ssl-2.0.13-1.3.6 для дистрибутива исходного кода mod_ssl " /usr/local/src/SSLeay-0.9.0b для дистрибутива исходного кода SSLeay • /usr/local/src/rsaref-2.0/ для пакета RSAref (только для граждан США) Номера версий могут отличаться, так как это программное обеспечение постоянно обновляется.

Построение библиотеки RSAREF

Пакет RSAref для mod_ssl не нужен, если вы не находитесь в США. Гражда«е США, не имеющие модуль библиотеки librsaref.a, должны выполнить: 1. Перейдите в каталог /usr/local/src/rsaref-2.0. 2. Выполните команды: ср -rp install/unix local cd local make mv rsaref.a librsaref.a Когда будет создан файл библиотеки libsaref.a, можно компилировать SSLeay. '

Построение SSLeay

Перейдите в каталог /usr/local/src/SSLeay-0.9.0b и выполните команду:

make -f Makefile, ssl links Гражданам CIIIA понадобиться сообщить SSLeay о пакете библиотеки RSAref. Поэтому выполните команды: perl ./Configure gcc -DNO_IDEA -DRSAref -IRSAglue \ -L 'pwd'/../rsaref- 2.0/local/ -Irsaref cp rsaref/rsaref,h include/ Все остальные должны выполнить команду, которая не определяет пакет библиотеки RSAref: perl ./Configure gcc -DNO_IDEA

Теперь необходимо откомпилировать и протестировать пакет, используя следующие команды: make make test

Построение mod.ssl и Apache

Перейдите в каталог /usr/local/src/mod_ssl-2.0.13-1.3.6 и проработайте сценарий configure: ./configure \ -with-apache=../apache_1.3.6 \ -with-ssleay=../SSLeay-О.9.Оb \

www.books-shop.com

Глава 12ч

308 -with-rsaref=../rsaref-2.0/local -prefix=/usr/local/apache

\

Параметр —with-rsaref не нужен вне США. Также проверьте, что используется подходящее значение —prefix для выбранного размещения Apache. Если уже есть рабочий серверный сертификат и личный ключ, можно подставить следующие параметры в сценарий configure: -with-key=/path/to/your/server.key -with-crt=/path/to/your/server.crt Теперь скомпилируйте Apache. Перейдите в каталог /usr/local/src/apache_1.3.6 и выполните команду make Если нет настоящего серверного сертификата и личного ключа, можно сделать тестовый сертификат с помощью команды: make certificate Для установки сервера Apache выполните: make install Установленный сервер Apache поддерживает SSL. Осталось сконфигурировать Apache.

Конфигурирование Apache для mod.ssl

Пакет mod_ssl устанавливает копию используемого по умолчанию файла httpd.conf в подкаталог etc каталога установки Apache. Этот файл можно использовать для тестирования и конфигурации сервера Apache. Пример файла показан на листинге 12.7. Листинг 12.7. Используемый по умолчанию httpd.conf, установленный вместе с mod_ssl ##

## httpd.conf - Конфигурационный файл сервера HTTP Apache ## ServerType standalone Port 80

Listen 80 Listen 443

HostnameLookups off User nobody Group nobody ServerAdmin [email protected] ServerRoot "/usr/local/apache" ErrorLog /usr/local/apache/var/log/error_log Log Level .warn LogFormat "%h %1 96u %t \"%r\" %>s %b \"%{Referer}i\" \"96{UserAgent}i\"" combined LogFormat "%h %1 %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i --> %U" referej LogFormat "%{User-agent}i" agent CustomLog /usr/local/apache/var/log/access_log common PidFile /usr/local/apache/var/run/httpd.pid ScoreBoardFile /usr/local/apache/var/run/httpd.Scoreboard ServerSignature on UseCanonicalName on

www.books-shop.com

309

Web-служба

Timeout 300 KeepAlive on MaxKeepAliveRequests 100 KeepAliveTimeout 15 MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxrequestsPerChild 30

ft Мы отключаем SSL глобально. SSLDisable SSLCacheServerPath /usr/local/apache/sbin/ssl_gcache SSLCacheServerPort /usr/local/apache/var/run/ssl_gcache_port SSLSessionCacheTimeout 300

# Настройка конфигурации общего виртуального сервера. DocumentRoot /usr/local/apache/share/ntdocs ServerName picaso.nitec.com ServerAdmin [email protected] ErrorLog /usr/local/apache/var/log/error_log TransferLog /usr/local/apache/var/log/access_log # Включить SSL для этого виртуального хоста. SSLEnable SSLRequireSSL SSLCertificateFile /usr/local/apache/etc/ssl.crt/server.crt SSLCertificateKeyFile /usr/local/apache/etc/ssl.key/server.key SSLVerifyClient none MD5:DES-CBC3-SHA

SSLLogFile /usr/local/apache/var/log/ssl_misc_log CustomLog /usr/local/apache/var/log/ssl_log "%t %h %{version}c \ %{cipher}c %{sub]ectdn}c %{issuerdn}c \"%r\" %b"

Первый конфигурационный сегмент в этом файле выглядит так:

Listen 80 Listen 443

Здесь задается, что Apache должен слушать порты 80 и 443 только, если в командной строке исполняемого файла Apache (httpd) определена метка с именем «SSL». Метку при выполнении Apache можно определить следующим образом: httpd -DSSL

или используя сценарий apachectl из подкаталога sbin каталога установки Apache: apachectrl -sslstart Если эта метка не определена, Apache слушает только порт 80, который уже указан в конфигурации директивой Port.

www.books-shop.com

310

'

Глава 12

Связанные с mod_ssl директивы, которые находятся в используемом по умолчанию файле httpd.conf, заключены в контейнер . . . . Этот контейнер гарантирует, что вложенные директивы принимаются во внимание, только если модуль mod_ssl.c скомпилирован в исполняемый файл Apache. SSLDisable Подобная директива используется для отключения поддержки SSL повсюду, чтобы позже включить ее SSL там, где нужно. В этом примере поддержка SSL включена для почтового сервера, слушающего порт 443, а не порт 80. SSLCacheServerPath /usr/local/apache/sbin/ssl_gcache SSLCacheServerPort /usr/local/apache/var/run/ssl_gcache_port SSLSessionCacheTimeout 300

' .

Перечисленные директивы используются для задания значений пути доступа, порта и времени ожидания для сеанса SSL сервера кэширования. Затем снова применяется контейнер для проверки того, что сервер предназначен для выполнения в режиме SSL с помощью параметра командной строки _DSSL или sslstart. После этого идет конфигурация виртуального хоста для используемого по умолчанию сервера, выполняющегося на порту 443. Это сервер поддерживает SSL. После обычных директив ServerName, ServerAdmin, ErrorLog и TransferLog, используется директива SSLEnable для включения поддержки SSL этого виртуального хоста. Затем применена директива SSLRequireSSL для обеспечения доступа виртуальному хосту только на основе SSL. SSLCertificateFile \ /us r/local/apache/etc/ssl.с rt/se rve r. с rt SSLCertificateKeyFile \ /usr/local/apache/etc/ssl.key/server, key

'

Эти две директивы задают пути доступа файлов сертификата и личного ключа сервера. Если у сервера уже есть действующий сертификат и личный ключ, то их нужно использовать. Следующая директива SSLVerifyClient задается как «попе», чтобы позволить любому поддерживающему SSL клиенту получить доступ к узлу. Если требуется допускать только клиентов, которые имеют клиентские сертификаты, можно задать это значение как «require». Директивы SSLLogFile и CustomLog используются для записи связанных с SSL данных журнала в специальный файл. На самом деле в этом нет необходимости, так как большая часть данных SSL автоматически записывается в файл журнала ошибок виртуального хоста. Если планируется использовать основной сервер в режиме поддержки SSL, поместите следующие директивы вне конфигурации всех виртуальных хостов: Listen 443 SSLEnable SSLRequireSSL SSLCertificateFile /usr/local/apache/etc/ssl.сrt/serveг.сrt SSLCertificateKeyFile /usr/local/apache/etc/ssl.key/server.key SSLVerifyClient none Директивы, использованные в mod_ssl, подобны директивам Apache-SSL.

Тестирование Apache построенного вместе с mod_ssl

Тестирование сервера, поддерживающего mod_ssl, достаточно просто. Нужно перезапустить его с помощью сценария apchectl с параметром «sslstart» или «startssl» и получить к нему доступ через https://yourserver.domain, tld. Введите «https», а не «http», чтобы получить доступ к поддерживающему сайту SSL. Если применяется сертификат, созданный с помощью команды make

www.books-shop.com

Web-служба

311

certificate, Web-браузер выведет предупреждающее диалоговое окно. Оно констатирует, что сервер использует SSL, но сертификат не был выпущен никаким известным уполномоченным по сертификатам (Certificate Authority). В таком случае необходимо использовать действующий сертификат известного уполномоченного по сертификатам, такого как Verisign или Thawte.

Получение сертификата, подписанного уполномоченным по сертификатам

Все, что вам нужно сделать, это получить опознаваемый браузером сертификат от одного из хорошо известных уполномоченных по сертификатам. Вот несколько уполномоченных по сертификатам, которые, скорее всего, предоставят сертификат для Apache-SSL: • VeriSign, http://www.verisign.com/ • Thawte Consulting, http://www.thawte.com/certs/server/request.html • CertiSign Certificacao Digital Ltda., http://www.certisign.com.br/ " IKS GmbH, http://www.iks-jena.de/produkte/ca/ . Процесс сертификации требует оформления документов, доказывающих аутентичность деятельности организации. Такие бумаги отсылаются вместе с письмом, подписанным одним из руководителей корпорации. Можно получить сертификат для личного Web-сервера. Вам не обязательно работать в компании, где все бумаги оформлены юридически. Большинство уполномоченных по сертификатам требуют только доказательства существования банковского счета.

Коммерческие решения SSL

Если есть сомнения о юридической допустимости применения SSL на основе mod_ssl и оправданы некоторые расходы, мы рекомендуем использовать либо Stronghold, либо Red Hat Secure Server. Мы проверяли сервер Stronghold. Считаем его надежным продуктом. Red Hat Secure Server пока не удалось проверить.

www.books-shop.com

www.books-shop.com

Глава 13 Служба FTP

В этой главе: " Конфигурирование wu-ftpd для стандартной службы FTP • Конфигурирование wu-ftpd для анонимной службы FTP • Конфигурирование wu-ftpd для гостевой службы FTP • Конфигурирование wu-ftpd для виртуальной службы FTP • Другие серверы FTP

ересылка файлов с одного компьютера на другой является стандартной операцией практически в любой сети. Для пересылки файлов в сетях TCP/IP, таких как Интернет, существуют различные методы, но наиболее часто используется FTP (File Transfer Protocol — Протокол передачи файлов). В этой главе обсуждается преобразование сервера Red Hat Linux в сервер FTP.

Wu-ftpd: используемый по умолчанию сервер FTP

Дистрибутив Red Hat Linux поставляется с пакетом Wuarchive-ftpd. Это сервер FTP (известный как wu-ftpd), разработан в Вашингтонском университете. Он является популярным сервером FTP в Интернете, wu-ftpd используется на тысячах узлов FTP во всем мире. Если во время установки Red Hat Linux задается установка службы FTP, по умолчанию будет задан сервер wu-ftpd. Однако если нужно проверить установлен сервер wu-ftpd или нет, можно запросить базу данных RPM об установленных пакетах следующим образом: rpm -qa | grep wu-ftpd

Команда rpm -qa перечислит все установленные пакеты RPM, а команда grep wu-ftpd найдет все имена, соответствующие шаблону wu-ftpd, в именах

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

314

Глава 13

пакетов выведенных командой rpm. Таким образом можно увидеть, имеет ли какой-нибудь пакет строковый шаблон «wu-ftpd» в имени. Например, предыдущая команда показывает «wu-ftpd-2.4.2vr!7-3» на нашей машине Red Hat Linux. На другой системе номер версии будет иным. Поскольку с новыми ' версиями Red Hat Linux поставляется новая версия wu-ftpd. Если эта команда ничего не выведет, то в системе в настоящее время нет установленного сервера wu-ftpd. Вам необходимо выполнить установку (см. следующий раздел). Если же будет выведена версия установленного wu-ftpd, можно пропустить раздел об установке и перейти к разделу о конфигурировании службы FTP.

Установка сервера wu-ftpd

Когда речь идет об установке сервера wu-ftpd, есть две возможности: ввести уже откомпилированную версию wu-ftpd из пакета RPM или получить исходный код по адресу f t p : / / f t p . a c a d e m . c o m / p u b / w u - - f t p d / p r i v a t e / и компилировать его самостоятельно. Так как предоставляемый Red Hat Linux пакет RPM wu-ftpd является вполне подходящим для большинства людей, мы не будем рассматривать второй процесс, который требует самостоятельной компиляции. Рекомендуем вам использовать пакет RPM wu-ftpd, если только нет специальных причин для компиляции и установки из исходного кода. В этом случае очень внимательно ознакомьтесь с приложенной документацией. Установка wu-ftpd из пакета RPM описана ниже.

Установка с компакт-диска Red Hat Linux

Для установки сервера wu-ftpd с компакт-диска Red Hat Linux:

1. Зарегистрируйтесь на сервере Red Hat Linux с именем root.

*

2. Смонтируйте- компакт-диск Red Hat Linux и перейдите в каталог RedHat/RPMS. Выполните команду:

'

Is

| grep wu--ftpd

Вы найдете пакет RPM сервера wu-gtpd. 3. Когда имя файла пакета RPM для wu-ftpd будет найдено, выполните следующую команду для установки пакета: rpm

-ivh

Например: rpm -ivh wu-ftpd-2.4.2vr17-3.i386.rpm

Эта команда устанавливает wu-ftpd версии 2.4.2vrl7—3 для компьютеров с процессором типа х86. Номер вашей версии и архитектура системы могут отличаться.

Установка с сервера FTP компании Red Hat

Если нет компакт-диска Red Hat Linux или нужно установить самую новую версию через Интернет, можно выполнить команду: rpm

-ivh

;

Например, когда мы захотели установить пакет wu-ftpd-2.4.2vr!73.i386.rpm с анонимного сервера FTP с адресом ftp://ftp.cdrom.com/, который является зеркалом дистрибутива Red Hat Linux, то выполнили такую команду: rpm -ivh ftp://ftp.cdrom.com/pub/linux/redhat/redhat-\ 5.2/i386/RedHat/RPMS/wu-ftpd-2.4.2vr17-3.i386.rpm

При установке с такого сервера, сначала убедитесь, что указан правильный адрес URL. Для этого просмотрите узел с помощью Web-браузера. Адрес URL будет меняться в зависимости от архитектуры системы (i386, Alpha, Spare и т.д.), а также в зависимости от версии Red Hat Linux и программного обеспечения wu-ftpd. Отметьте, что, если устанавливается новая версия wu-ftpd с сохранением старой, необходимо будет указать в предыдущей строке параметр —force.

www.books-shop.com

315

Служба FTP

Если сервер wu-ftpd установлен в системе Red Hat Linux, переходите к конфигурированию нового сервера FTP.

Конфигурирование службы RP

Конфигурация сервера FTP состоит из следующих файлов в каталоге /etc: • services • inetd.conf • ftpaccess • ftpconversions • ftpgroups

• ftphosts • ftpusers Сервер wu-ftpd, как и многие другие серверы на основе TCP/IP, выполняется с помощью суперсервера Интернета, называемого «inetd», который ожидает соединение FTP на порту 21. Когда обнаруживается запрос на такое соединение, inetd запускает сервер wu-ftpd. В это время inetd просматривает два файла для определения службы (порта), ассоциированной с сервером. Этими двумя файлами являются /etc/services и /etc/inetd.conf.

Файл /etc/services

Файл /etc/services описывает службы TCP/IP, которые доступны на сервере Linux. К конфигурации сервера FTP имеют отношение строки: ftp—data 20/tcp ftp 21/tcp Эти две строки сообщают inetd, какие порты будут использоваться для данных и команд службы FTP соответственно. Объявления портов по умолчанию являются стандартными и не должны изменяться. Спецификация FTP (RFC 765) определяет порт данных FTP (20) на J единицу меньше, чем порт команд (21). Значение порта данных в действительности получают не из объявления в /etc/services; Однако размещение объявления порта данных в файле /etc/services предотвращает от случайного использования этого порта другой службой. Кроме того, данные строки сообщают серверу inetd, какие порты принадлежат службе FTP. Однако ему необходимо знать, какое программное обеспечение отвечает за подобную службу. Это определяется в файле /etc/inetd.conf. Файл /etc/inetd.conf Строка, которая имеет отношение к конфигурации FTP, показана ниже: ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd --1 --a Здесь служба «ftp» связывается с серверной программой in.ftpd, которая является именем исполняемого файла wu-ftpd. Вот как сервер inetd интерпретирует строку: service name (имя службы): ftp socket type (тип сокета): stream protocol (протокол): tcp wait/nowait[.max] (ждать/не ждать[.тах]): nowait userf.group] (пользователь];, группа]): root server program (серверная программа): /usr/sbin/tcpd server program arguments (аргументы серверной программы): in.ftpd —1 --a Обратите внимание, inetd получает сообщение о том, что имя серверной программы есть /usr/sbin/tcpd и что она получает аргументы «in.ftpd -I -a», a

www.books-shop.com

316

Глава 13

не просто выполняет серверную программу in.ftpd. Это сделано, чтобы заставить inetd выполнить программу оболочки TCP /usr/sbin/tcpd, которая в свою очередь работает над программой in.tcpd с аргументами -I и -а. Программа оболочки TCP используется для защиты (см. главу 18). Параметры -1 и -а определяются по умолчанию. Параметр -1 указывает, что каждый сеанс FTP будет записываться в журнал с помощью средства syslog. Параметр -а определяет, что будет инициирована конфигурация управления доступом, заданная в /etc/ftpaccess. Эти два аргумента полезны, поэтому не следует их удалять. Значения других аргументов можно увидеть на man-странице ftpd. Обратите внимание, что сервер FTP можно выполнять и без оболочки TCP. Однако мы настоятельно рекомендуем этого не делать. Правда, если есть серьезные причины для выполнения его без оболочки TCP, нужно изменить используемую по умолчанию строку в /etc/inetd.conf для службы FTP так: ftp stream tcp nowait root /usr/sbin/in.ftpd -1 -a Предполагается, что исполняемый файл in.ftpd находится в каталоге /usr/sbin. Если в /etc/inetd.conf или /etc/services были сделаны какие-либо изменения, не забудьте приказать inetd перезагрузить конфигурацию, посылая сигнал SIGHUP следующим образом: kill -HUP t

или

killall -HUP inetd

Файл /etc/ftpaccess

Это основной конфигурационный файл сервера FTP. Он содержит информацию о конфигурации в формате: Используемый по умолчанию файл /etc/ftpaccess показан на листин

ге 13.1. Листинг 13.1. Используемый по умолчанию файл /etc/ftpaccess class all real, guest, anonymous * email

root@localhost

loginfails 5 readme README* login readme README* cwd=* message /welcome.msg message .message compress

tar chmod delete overwrite rename

login cwd=*

yes

all

yes no no no no

all guest, anonymous guest, anonymous guest, anonymous guest, anonymous

log transfers anonymous, real inbound, outbound shutdown

/etc/shutmsg

passwd—check rfc822 warn Это самый важный конфигурационный файл сервера. Рассмотрим его подробнее. В таком файле можно определить пять типов конфигурационной информации.

www.books-shop.com

317

Служба FTP

Конфигурация доступа Конфигурация доступа может определяться с помощью ключевых слов class, deny, limit, noretrieve, loginfails, private, autogroup и guestgroup. class Синтаксис: class classname typelist addrglob Значение по умолчанию: class all real, guest,

anonymous *

Ключевое слово class используется для определетнишени класса и задает типы пользователей, которые принадлежат этому классу. Оно также определяет IP-адреса имен доменов, из которых члены класса могут получить доступ к серверу FTP. Существуют следующие аргументы: • classname считается произвольным именем для класса • typelist является разделенным запятыми списком типов пользователей. Доступны три типа пользователей: real, anonymous и guest (реальные, анонимные и гости). Реальный пользователь имеет действительное имя пользователя и пароль в файле /etc/passwd или /etc/shadow. Анонимная и гостевая учетные записи подробно обсуждаются в этой главе ниже • adrglob может быть IP-адресом хоста, частичным IP-адресом с метасимволами (такой как 206.171.50.*), именем хоста, таким как blackhole. nitec. com или частичным именем домена с метасимволами (*. ni tec. com). Используемый по умолчанию файл /etc/ftpaccess содержит определение класса, названное «all». Оно показывает, что пользователи типов real, guest и anonymous могут получить доступ к серверу FTP из любого места. Метасимвол «*» используется для определения «произвольного места». Рассмотрим пример: class all real 206.171.50.* Здесь доступ FTP предоставляется только реальным пользователям, которые получают доступ к серверу из сети 206.171.50.0. Обратите внимание, что имена доменов можно использовать вместо IP-адресов. Например, class all real «nitec.com *.ad—engine.com Предыдущее определение класса позволяет реальным пользователям зарегистрироваться с любой машины в доменах nitec. com и ad-engine, com. Если не планируется вводить анонимные или гостевые учетные записи на сервере FTP, можно удалить ключевые слова «guest» и «anonymous» из typelist, который используется по умолчанию для класса «all». deny Синтаксис: deny addrglob message_file Значение по умолчанию: нет

Это ключевое слово запрещает обслуживание хостов FTP, которые соответствуют заданным IP-адресам или именам доменов (addrglob). При отказе выводится файл message_file. Например: deny *.edu

Это заставит сервер FTP отказывать в доступе любому, кто попытается получить доступ к серверу из университета в США. Вот еще один пример: deny «.com /etc/goaway.msg

Подобная конфигурация будет отказывать в доступе FTP любому в домене . com и выведет файл-сообщение /etc/goaway.msg. limit

Синтаксис: limit class n times message_file Значение по умолчанию: нет

www.books-shop.com

318

Глава 13

Это ключевое слово ограничивает число одновременных регистрации пользователей для указанного класса class. При отказе выводится файл-сообщение message_file. Аргументы определены следующим образом: • п является числом пользователей, которым будет разрешен доступ. • times определяет время, когда должно действовать ограничение. Время может определяться в 24-часовом формате. Например, 0700-1700 является интервалом времени от 7 часов утра до 5 часов вечера. Формат времени может также включать дни (см. таблицу 13.1). Формат времени для Ключевое слово limit Any Wk Sa Su Mo Tu We

Th Fr

Значение Любое время Любой рабочий день Суббота Воскресенье Понедельник Вторник Среда Четверг Пятница

Можно объединять дни недели. Например, SaSu07-17 охватывает выходные дни с 7 утра до 5 вечера. Далее приведен пример конфигурации, которая задает ограничения на доступ: class local real *.nitec.com class remote anonymous * limit local 200 Any /etc/msgs/msg.toomany limit remote 100 Any /etc/msgs/msg.toomany Предыдущая конфигурация допускает для регистрации до 200 пользователей из домена nitec. com в любое время. В то же самое время она допускает только 100 анонимных пользователей к системе в любое время. noretrieve

Синтаксис: noretrieve filename filename ... Значение по умолчанию: нет Это ключевое слово запрещает пользователям FTP извлекать файлы с указанными именами filename. Например: noretrieve /etc/passwd Предыдущая строка запрещает кому-либо извлекать файл /etc/passwd. Выводится сообщение типа «/etc/passwd отмечен как не извлекаемый». Обратите внимание, что если имя файла не содержит полностью квалифицированное имя пути доступа, то все файлы с подобными именами отмечены как не извлекаемые. Например: noretrieve passwd core Такая строка запрещает извлекать все файлы с именами passwd и core из любого каталога. Обратите внимание, что в имени файла нельзя использовать метасимволы. loginfails Синтаксис: loginfails Значение по умолчанию: loginfails 5 Это ключевое слово определяет, сколько раз пользователь может попыгаться зарегистрироваться в системе, прежде чем он будет отсоединен. Били

www.books-shop.com

Служба FTP

^

319

пользователь за определенное число попыток не может ввести действующую пару имя_ пользователя/пароль для регистрации в системе, в журнал записывается сообщение об ошибке. Пользователь отсоединяется. private Синтаксис: private Значение по умолчанию: нет

Сервер wu-ftpd предоставляет нестандартное расширение множества команд ftp. Одна из таких команд называется SITE. Считается, что она создает угрозу безопасности. Поэтому использование ключевого слова private не рекомендуется. Фактически команда SITE отключена в используемой по умолчанию версии wu-ftpd, которая поставляется с Red Hat Linux. Нужно будет самостоятельно откомпилировать wu-ftpd, чтобы ее инициировать. Делать это не рекомендуется. guestgroup Синтаксис: guestgroup groupname groupname . Значение по умолчанию: нет

.

.

Это ключевое слово определяет группы пользователей groupname, которые должны рассматриваться как пользователи гостевой учетной записи. За дополнительными сведениями обращайтесь в раздел «Создание гостевой учетной записи FTP». autogroup Синтаксис: autogroup groupname class [class ... ] Значение по умолчанию: нет

Это ключевое слово позволяет изменить эффективный идентификатор группы (GID) для анонимного пользователя, если groupname принадлежит одному или большему числу определенных классов. Информационная конфигурация Информационная конфигурация может быть определена с помощью ключевых слов banner, email, message и readme. banner Синтаксис: banner filename Значение по умолчанию; нет

Такое ключевое слово используется для вывода содержимого указанного файла filename. Обычно многие системы используют баннеры для своей идентификации, а также для уведомления о пользовательской политике и контактной информации. Обратите внимание, что если используется ключевое слово banner для вывода файла перед регистрацией в системе, некоторые нестандартные клиенты FTP не зарегистрируются в системе. Поскольку они не смогут обработать многострочные ответы сервера. email Синтаксис: email user@host Значение по умолчанию: email root@localhost

Это ключевое слово определяет адрес электронной почты администратора FTP-сайта. message Синтаксис: message path {when {class ... }} Значение по .умолчанию: message /welcome.msg login .message .message cwd=*

Данное ключевое слово используется для задания имени файла. Он будет выводиться при регистрации пользователя в системе или при введении команды для перехода в другой каталог. Например, первый из показанных параметров по умолчанию выводит содержимое файла /welcom.msg при успешной регистрации пользователя. Второй параметр по умолчанию

www.books-shop.com

320

Глава 13

определяет содержимое файла .message, когда пользователь меняет каталог. Ничего не выводится, когда подобный файл отсутствует. Файл, который должен выводиться, может содержать одну или несколько метастрок подстановки (cookie), показанных в таблице 13.2. м

Метастроки подстановки для файлов сообщений

Метастрока

Заменяемый текст



Текущий рабочий каталог



Адрес службы сопровождения, как определено в ftpaccess

%F

Свободное пространство в разделе CWD (Кбайт)

%L

Имя локального хоста



Максимально допустимое число пользователей в этом классе

%N

Текущее число пользователей в этом классе

%R

Имя удаленного хоста



Локальное время (в формате Thu Nov 15 17:12:42 1990")

%u

Имя пользователя, как определено с помощью аутентификации RFC 931 Имя пользователя, представленное во время регистрации в системе

WJ

• f

-

На листинге 13.2 представлен пример файла /welcome.msg, который мы использовали для своей системы Red Hat. Листинг 13.2. Пример файла /welcome.msg Hello %U

\

Welcome to %L. You are user %N of possible %M users. You are logging in' from %R.

*

Local time is %T Feel free to email (%E) if you have any questions or comments. Your current directory is %C (Free %F KB) Или в переводе на русский язык Привет, %U. Добро пожаловать в %L. Вы являетесь пользователем %N из возможного числа пользователей %М. Вы вошли из %R. Локальное время %Т Не стесняйтесь послать сообщение по адресу (%Е), вопросы или замечания.

если у вас есть какие-то

Ваш текущий каталог %С (Свободно %F KB)

Обратите внимание, что файл сообщения выводится только один раз в каждом каталоге. Также учтите, что если планируется выводить файлы сообщений для анонимного доступа, используйте относительные пути доступа к базе дерева каталогов анонимного FTP. readme Синтаксис:

readme path

Значение по умолчанию:

{when {class

...

}

}

readme README* login readme README* cwd=*

Это ключевое слово похоже на message. Однако вместо вывода содержимого указанного файла, оно заставляет сервер FTP уведомить пользователя о существовании файла, а также сообщает ему о дате и времени изменения файла.

www.books-shop.com

Служба FTP

_

321

Конфигурация записи в журнал Конфигурация записи в журнал может быть определена с помощью ключевых слов log commands и log transfers. log commands Синтаксис: log commands typelist Значение по умолчанию: нет "

/•'

Такое ключевое слово позволяет записывать в журнал команды FTP для одного или нескольких типов пользователей. Например: log commands anonymous

Эта конфигурация будет записывать в журнал команды FTP, выполняемые всеми анонимными пользователями. log transfers Синтаксис: log transfers typelist directions Значение по умолчанию: log transfers anonymous.real inbound,

outbound

Данное ключевое слово позволяет записывать в файл журнала пересылки файлов в систему и из нее. Настройка по умолчанию заставляет сервер отмечать в журнале как входящие, так и выходящие пересылки файлов для анонимных и реальных пользователей. Конфигурация прав доступа Следующие ключевые слова позволяют контролировать настройку полномочий файлов/каталогов для пользователей. chmod Синтаксис: chmod yes|no typelist Значение по умолчанию: chmod no guest,

anonymous

Это ключевое слово включает или отключает команду chmod (site chmod) для типов пользователей, определенных в списке. Например, значение по умолчанию отключает эту команду как для гостевых, так и для анонимных пользователей. Обратите внимание, что команда chmod по умолчанию не доступна. delete Синтаксис: delete yes|no typelist Значение по умолчанию: delete no guest, anonymous

Это ключевое слово включает или отключает команду delete (del) для пользователей, определенных в списке типов. Например, настройка по умолчанию отключает команду delete как для гостевых, так и для анонимных пользователей. overwrite Синтаксис: overwrite yes|no typelist Значение по умолчанию: overwrite no guest, anonymous

Данное ключевое слово включает или отключает перезапись пользователями файлов, определенных в списке типов. Например, настройка по умолчанию отключает перезапись файлов как для гостевых, так и для анонимных пользователей. rename Синтаксис: rename yes|no typelist Значение по умолчанию: rename no guest, anonymous

Подобное ключевое слово включает или отключает команду rename для пользователей, определенных в списке типов. Например, настройка по умолчанию отключает команду rename как для гостевых, так и для анонимных пользователей. umask

Синтаксис: umask yes|no typelist Значение по умолчанию: нет

www.books-shop.com

322

Глава 13

Это ключевое слово включает или отключает команду umask (site umask) для пользователей, определенных в списке типов. Обратите внимание, что команда umask не доступна по умолчанию.

passwd—- check Синтаксис: passwd--check none|trivial|rfc822 (enforce|warn) Значение по умолчанию: passwd--check rfc822 warn Такое ключевое слово определяет тип паролей, необходимый для анонимных пользователей. Настройка по умолчанию требует, чтобы паролем для анонимного доступа был адрес электронной почты. Однако она не навязывает это правило, если пользователь не смог ввести реальный почтовый адрес. Сервер просто предупреждает пользователя о недействительном пароле. Когда проверка пароля не нужна, задайте passwd—check следующим образом: passwd—check none

Если указать проверку как «trivial», сервер будет обращать внимание в пароле только на символ @. path—filter Синтаксис: path--fliter typelist mesg allowed_charset {disallowed regexp ...} Значение по умолчанию: нет Это ключевое слово позволяет ограничить набор имен файлов, которые будут использоваться при загрузке файлов на удаленные компьютеры. Загрузка файлов выполняется пользователями, определенными в списке типов. upload Синтаксис: upload root-dir dirglob yes|no owner group Значение по умолчанию: нет Такое ключевое слово позволяет включить или отключить каталог загрузки на удаленный компьютер. Например: upload /home/ftp /dropbox yes root ftp 0600 Указанная строка задает каталог /dropbox в качестве каталога для загрузки на удаленный компьютер, где владельцем файлов является root и групповая принадлежность задана как «ftp». Файлы, загружаемые на удаленный компьютер, имеют настройку полномочий со значением 0600. Обратите внимание, что /home/ftp должен быть домашним каталогом пользователя «ftp». Если загружающему на удаленный компьютер пользователю запрещено создание новых подкаталогов в каталоге /dropbox, тогда эту строку загрузки необходимо изменить:

upload /home/ftp /dropbox yes root ftp 0600 nodirs С другой стороны, если бы загружающему пользователю разрешалось создание подкаталогов, то «nodirs» можно было бы заменить на «dirs». Дополнительная настройка Следующие ключевые слова позволяют контролировать дополнительные параметры настройки. alias Синтаксис: alias string dir Значение по умолчанию: нет Это ключевое слово позволяет создавать псевдоним (синоним) для каталога. Например: alias redhat /pub/linux/distributions/redhat разрешает пользователю вводить команду cd redhat для перехода в каталог /pub/linux/distributions/redhat. cdpath

www.books-shop.com

323

Служба FTP

Синтаксис: cdpath dir Значение по умолчанию: нет

Данное ключевое слово добавляет указанный каталог к пути поиска команды смены каталога (cd). Например: cdpath /pub/linux/redhat Если пользователь вводит команду cd RPMS, то сервер будет сначала искать каталог с именем RPMS в текущем каталоге пользователя. Если он ничего не найдет, сервер будет искать псевдоним с именем «RPMS». Если он опять ничего не найдет, тогда сервер попробует сменить каталог на «/pub/linux/ redhat/RPMS». compress Синтаксис: compress yes|no class [class . Значение по умолчанию: compress yes all

.

. ]

Подобное ключевое слово включает или отключает средство сжатия для определенных классов. Настройка по умолчанию разрешает средство сжатия для класса, называемого «all», который по умолчанию охватывает всех реальных, анонимных и гостевых пользователей. Когда оставлено значение по умолчанию и файл ftpconversions не изменен, все пользователи, которые используют службу FTP, могут на ходу сжимать файлы. Например, пользователь, который хочет получить все содержимое каталога directoryname в виде сжатого файла, может ввести команду «get directoryname.tar.gz». В этом случае сжатый tar-файл будет загружен на удаленный компьютер. tar Синтаксис: tar yes|no classg [class . Значение по умолчанию: tar yes all

.

.

]

Это ключевое слово включает или выключает средство tar (tape archive file - файл ленточного архива) для указанных классов. Настройка по умолчанию допускает средство сжатия для класса называемого «all», который по умолчанию охватывает всех реальных, анонимных и гостевых пользователей. Когда оставлено значение по умолчанию и файл ftpconversions не изменен, все пользователи, которые используют службу FTP,, могут на ходу использовать tar для сжатия файлов. Например, пользователь, который хочет получить все содержимое каталога directoryname в виде сжатого файла, может ввести команду «get directoryname.tar». В этом случае tar файл будет загружен на удаленный компьютер. shutdown Синтаксис: shutdown path Значение по умолчанию: shutdown /etc/shutmsg

Это ключевое слово определяет файл, который сервер FTP время от времени проверяет, чтобы обнаружить событие shutdown. Такой файл может создаваться с помощью команды ftpshut. Например, чтобы срочно прекратить работу сервера, нужно выполнить команду: ftpshut now

Однако можно спланировать shutdown таким образом, чтобы находящиеся в системе пользователи имели некоторое время до того, как начнется выполнение shutdown. Например, пусть текущая дата — это понедельник, 13 декабря 1999, а время 1600 (в 24 часовом формате). Для завершения работы системы через час можно задать ftpshut -d 30 1700 Это приведет к созданию файла /etc/shutmsg следующего вида: 1999 11 13 17 00 0010 0030 System shutdown at %s

Формат первой строки:

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

324

Глава 13

YYYY ММ DD HH MM HHMM HHMM YYYY- это год, MM- месяц (0-11), DD - день (1-31), HH- час (0-23), a MM — это минуты (0-59). Первая пара ННММ задает время, через которое начнется отказ в новых соединениях. Вторая пара ННММ определяет время, через которое начнется разъединение текущих соединений. Как можно видеть в только что приведенном примере файла, параметр -d 30 задает вторую пару ННММ как 0030. Сдвиг начала отказа для новых соединений по умолчанию равен 10 мин, но можно изменить его значение с помощью параметра -1. Обратите внимание, что можно создать более сложное предупреждающее сообщение, чем «System shutdown at %s» («Система выключается в %s»), используя один или несколько метасимволовов (см.таблицу 13.3). Метасимволы для предупреждающего сообщения ftpshut

Метасимвол %s %г %d

Заменяющий текст Время, когда систему собираются отключить Время, когда новые соединения будут отвергаться Время, когда текущие соединения будут разъединяться

В дополнение к этим метасимволам, можете использовать все метасимволы, показанные в таблице 13.2. Для создания подобного сообщения можно выполнить команду ftpshut: ftpshut -d MM -1 MM HHMM "Shutdown at %s. Be done by %d." He забудьте заменить MM, HHMM и остальные значения. Отметьте также, что перед очередным запуском службы FTP, нужно будет удалить файл /etc/shutmsg. virtual Синтаксис: virtual address root]bannerllogfile path Значение по умолчанию: нет Если существует несколько IP-адресов для системы Linux, можно использовать это ключевое слово, чтобы предложить виртуальные услуги FTP. (Подробности см. в разделе «Создание виртуальных FTP-сайтов»).

Файл /etc/ftpconversions

Файл reconversions хранит базу данных преобразований сервера FTP. Используемая по умолчанию конфигурация этого файла подходит практически для всех вариантов установки. За дополнительной информацией обращайтесь на man-страницу ftpconversions.

Файл /etc/ftpgroups

Файл /etc/ftpgroups имеет смысл только при использовании нестандартных команд SITE. Пакет wu-ftpd, поставляемый вместе с Red Hat Linux, приходит с отключенными командами SITE. Это сделано для того, чтобы улучшить безопасность, так как известно, что команды SITE создавали дыры в защите в предыдущих версиях сервера. Когда не очень осведомленный в вопросах безопасности администратор FTP включает команды SITE, ему необходимо задать файл /etc/ftpgroups следующим образом: groupname:encrypted password:realgroup

Обычно команды SITE GROUP и SITE GPASS используются, чтобы позволить уже зарегистрированным пользователям FTP изменить привилегии своей группы. Файл /etc/ftpgroups обеспечивает необходимое отображение для пользователя из groupname, который переходит в realgroup, когда вводится действующий пароль с помощью команды SITE GPASS. Обратите внимание, что realgroup должна быть группой в файле /etc/group.

www.books-shop.com

325

Служба FTP

Файл /etc/ftphosts

Файл /etc/hosts используется для управления доступом FTP к определенным учетным записям из различных хостов. Чтобы позволить пользователю зарегистрироваться с одного или нескольких хостов, используйте такую строку: allow username addrglob [addrglob .

. . ]

Это позволит определенным пользователям зарегистрироваться с указанных хостов. Например: allow joegunchy «.nitec.com

Здесь пользователю joegunchy разрешается регистрация с любой машины в домене nitec. com. Чтобы запретить ему регистрироваться на сервере из одного или нескольких хостов, можно использовать строку: deny username addrglob [addrglob . . . ]

Например, чтобы запретить joegunchy регистрацию на сервере Из сети 206.171.50.0, можно использовать: deny joegunchy 206.171.50.*

Файл /etc/ftpusers

Файл /etc/ftpusers определяет список пользователей, которым запрещен доступ к серверу FTP. Файл /etc/ftpusers, используемый по умолчанию, содержит следующих пользователей: • root • bin • daemon • adm •IP • sync

• shutdown • halt • mail • news • uucp ! • operator • games • nobody Подобным учетным записям не разрешается регистрироваться, так как они не являются учетными записями реальных пользователей. Если необходимо запретить реальному пользователю действия с FTP на сервере, можно поместить в список имя этого пользователя. В данный момент мы познакомились со всеми конфигурационными файлами, необходимыми для выполнения сервера FTP. В следующих разделах рассмотрим распространенные вопросы конфигурирования сервера FTP. I Так как для правильного функционирования службы FTP требуется J выполнение большого объема работ по конфигурированию, хотелось бы иметь способ периодической проверки конфигурационных файлов. Для этого используйте утилиту ftpck, которую можно получить на следующем РТР-сайте: ftp://ftp.landfield.com/wu-ftpd/ftpck/.

www.books-shop.com

326

Глава 13

Создание анонимного РТР-сайта

Наличие анонимного FTP-сайта может вызывать двойственные чувства. С одной стороны, он становится прекрасным средством широкого распространения файлов. Все бесплатные программные пакеты (включая дистрибутив Red Hat Linux), которые можно загрузить из Интернета, хранятся на множестве анонимных узлах FTP по всему миру. Подумайте только, какой бы это был кошмар, если бы вам была нужна учетная запись на каждом из серверов FTP в Интернете, чтобы получить доступ к бесплатному программному обеспечению. Это очень неудобно. Проблема была решена введением анонимной службы FTP. Однако с другой стороны, анонимная служба FTP является типичным входом хакеров в систему. Поэтому подумайте дважды, прежде чем решиться на создание анонимного сервера FTP. Предполагая, что анонимный сервер FTP необходим, опишем процесс его создания. Компания Red Hat упростила процедуру создания анонимного сервера FTP. Все, что вам нужно, это пакет RPM anonftp. Сначала запросите свою базу данных RPM, чтобы определить, установлен ли пакет anonftp или нет. Можно выполнить: rpm -qa | grep anonftp

Эта команда покажет имя пакета, вида anonftp-2.8-1, если пакет anonftp уже установлен при загрузке Red Hat Linux. Если этого не было сделано, то команда ничего не выведет. В таком случае найдите пакет anonftp на компакт-диске Red Hat и выполните: rpm -ivh anonftp-2.8-1.1386.rpm

Если требуется установить самую последнюю версию с зеркального узла Red Hat, нужно выполнить команду: rpm -ivh ftp://ftp.cdrom.com/pub/linux/redhat/redhat—\ 6.0/i386/RedHat/RPMS/anonftp-2.8-1.i386.rpm Обратите внимание, что имя пакета anonftp будет меняться в зависимости от архитектуры системы и версии anonftp. Также учтите, что пакет anonftp не будет устанавливаться, если нет сервера FTP, такого как wu-ftpd. Как только пакет anonftp будет установлен, мы получаем готовый к работе анонимный сервер FTP. | Убедитесь, что существует учетная запись пользователя, ! называемая «ftp» без какого-либо пароля в файле /etc/passwd, до того, как вы будете использовать анонимную службу FTP. Строка учетной записи пользователя FTP в файле /etc/password должна быть похожа на: ftp: *: 14:50: FTP User:/home/ftp:/bin/tptfe. Если требуется узнать, какой пакет установлен, выполните: rpm -qlp anonftp-2.8-1.1386. rpm

Будет выведен список установленных файлов. Они содержатся в каталоге -ftp (т.е. домашнем каталоге учетной записи 'ftp' — смотрите файл /etc/passwd). Рассмотрим файлы подробнее. Перейдите в каталог -ftp и введите Is -1. Будет выведен следующий список каталогов: [kabir@picaso "ftp]# Is total 4 d-x-x-x. 2 root root d-x-x-x 2 root root drwxr-xr-x 2 root root

-1 1024 Nov 5 19:29 bin 1024 Nov 5 19:29 etc 1024 Nov 5 19:29 lib

dr-xr-sr-x 2 root ftp 1024 Sep 10 17:21 pub

www.books-shop.com

Теперь перейдите в подкаталог bin и выполните Is -1. Будет выведен список: [kabir@picaso ~ftp/bin]# Is -1 total 313 — x-x-x 1 root root 15236 Hoy — x-x-x 1 root root 46356 Nov — x-x-x 1 root root 45436 Nov — x-x-x 1 root root 29980 Nov — x-x-x 1 root root 62660 Nov — x-x-x 1 root root 110668 Nov

5 20:02 compress 5 20:02 cpio 5 20:02 gzip 5 20:02 Is 5 20:02 sh 5 20 :02 tar

Irwxrwxrwx 1 root root 4 Nov 5 20:02 zcat - gzip Это утилиты, которые необходимы для обеспечения корректной работы анонимной службы FTP. Утилита Is используется для получения списков каталогов, а утилиты сжатия — для обеспечения средств сжатия/извлечения на ходу. Почему же эти файлы находятся здесь? Когда кто-то получает доступ к анонимному серверу FTP, сервер выполняет chroot в каталоге -ftp и тем самым скрывает реальную файловую систему, показывая только то, что находится в каталоге -ftp. Именно поэтому нужны копии каталогов etc, bin и lib с минимальным числом файлов. Каталог lib содержит файлы системной библиотеки, которые необходимы программам в каталоге bin. Каталог -ftp/pub является тем каталогом, где должны находиться открыто распространяемые файлы. Если нужен каталог incoming или dropbox, куда анонимные пользователи могут загружать файлы, сделайте следующее: 1. Создайте подкаталог в каталоге -ftp, который будет использоваться для загрузки. Fro называют «incoming», поэтому мы не будем использовать именно это имя. 2. Добавьте следующую строку в файл /etc/ftpaccess: upload /home/ftp /incoming yes root ftp 0600 nodirs 3. He забудьте изменить /home/ftp на соответствующий каталог. Например, если -ftp в действительности есть /data/ftp, то замените в этой строке /home/ftp на /data/ftp. Также, если требуется разрешить анонимным пользователям создавать подкаталоги в -ftp/incoming, удалите в этой строке параметр nodirs. 4. Выполните команды: chown -R root.ftp' "ftp/incoming chmod -R 1733 "ftp/incoming Команда chown задаст root в качестве владельца и ftp как группу для каталога incoming. Команда chmod изменит права доступа для каталога incoming, чтобы root имел права на чтение, запись и выполнение (rwx), a группа и все остальные имели права на запись и выполнение (wx). Она также задаст sticky-bit для каталога и всех его файлов. Это защитит файлы- от удаления обычными пользователями. Когда права доступа для записи и выполнения для каталога заданы для всех, любой пользователь этой системы может удалить файл в каталоге. Sticky-bit препятствует этому, разрешая удалять файл только его создателю. Так как сервер FTP будет записывать файл с владельцем root, никому, кроме root, не разрешается удалять загруженные файлы. 5. Проверьте, что указан тип анонимного пользователя, по крайней мере, в одном из определений классов файла /etc/ftpaccess. По умолчанию real, guest и anonymous включены в класс по умолчанию «all». Ничего не делайте, если сохранены определения классов по умолчанию. Когда выполнены все эти действия, создайте соединение FTP с сервером от имени анонимного пользователя и убедитесь, что файлы можно загружать

www.books-shop.com

328

Главе? 13

только в указанный каталог. Так как нет права доступа на чтение каталога -ftp/incoming, нельзя увидеть загруженные файлы с помощью команды Is. Однако по-прежнему можно загружать и выгружать файлы, если указаны правильные имена. Создание узла анонимного FTP связано с риском нарушения безопасности. Наличие каталога для загрузки увеличивает этот риск. Однако многие организации успешно используют анонимные серверы FTP в течение многих лет, поэтому будьте просто осторожны. Ниже представлены некоторые рекомендации для улучшения безопасности анонимного сервера FTP: • Обеспечьте, чтобы учетная запись ftp в /ete/passwd использовала недействительный пароль. Например, строка учетной записи ftp в файле passwd должна выглядеть так: ftp:*:14:50:FTP User:/home/ftp:/bin/true

• Каталог -ftp/bin должен принадлежать root, а не учетной записи ftp. Выполняемые программы, такие как Is, compress и tar, которые находятся в каталоге -ftp/bin, также должны принадлежать пользователю root. Каталог -ftp/bin и его содержимое должны быть только исполняемыми. Можно выполнить: chown -R root.root "ftp/bin; chmod -R 111 "ftp/bin

Таким образом вы сможете гарантировать, что все файлы в каталоге -ftp/bin являются только исполняемыми. • Каталог -ftp/etc должен принадлежать пользователю root, и он должен быть только исполняемым. Это можно сделать, используя команды: chown -R root.root "ftp.etc; chmod 111 "ftp/etc

• Содержимое каталога -ftp/etc должно быть только для чтения и принадлежать root. Можно выполнить: chown -R root,root "ftp.etc; cd "ftp/etc; chmod 444 *

Вы гарантируете, что права доступа заданы корректно.

• Никогда не копируйте файлы /etc/passwd и /etc/group в каталог -ftp/etc. Файлы ~ftp/etc/passwd и --ftp/etc/group являются фиктивными файлами, необходимыми для программ, которые для выполнения ищут их в каталоге -ftp, вместо корневого каталога (поскольку chroot сервера установлена в -ftp). • Убедитесь, что никакие файлы или каталоги в -ftp не принадлежат пользователю ftp.

Создание гостевой учетной записи FTP

Гостевая учетная запись FTP является реальной учетной записью с реальными именем пользователя и паролем. Единственная особенность этой учетной записи состоит в том, что когда пользователь guest (гость) получает доступ к серверу FTP, он не видит ничего другого, кроме своего домашнего каталога. Другими словами, когда пользователь guest регистрируется на сервере FTP, сервер делает операцию chroot в домашний каталог пользователя guest, заставляя тем самым домашний каталог пользователя guest представлять всю файловую систему. Большим достоинством является то, что пользователь не может видеть что-либо еще, например, системные файлы и каталоги других пользователей. Это свойство защиты оправдывает затраты времени на конфигурирование гостевых учетных записей. Помимо дополнительной работы, которая требуется для настройки гостевых учетных записей, другой потерей становится избыточное использование дискового пространства. Подобно анонимному пользователю FTP, каждый гостевой пользователь для выполнения простых операций должен будет иметь собственное подмножество исполняемых файлов, такие как Is, gzip и tar. Однако с учетом того, что с каждым днем стоимость дискового пространства

,

www.books-shop.com

Служба FTP

_

329

становится все меньше, это не создает большую проблему. Рассмотрим, как можно задать гостевую учетную запись. Самым простым способом задания гостевой учетной записи является использование пакета anonftp, даже если впоследствии не планируется предоставлять анонимную службу FTP. Установите пакет временно, с целью создания единственной гостевой учетной записи. Здесь представлены шаги, которые необходимо выполнить для создания гостевой учетной записи.

Шаг 1: Создать учетную запись гостевого пользователя

Зарегистрируйтесь как root. Создайте учетную запись гостевого пользователя. Предположим, что такая учетная запись гостевого пользователя называется «mrfrog» и что она была создана с помощью обычной команды useradd следующим образом: useradd mrfrog

Теперь задайте пароль для mrfrog, используя команду: passwd mrfrog

Шаг 2: Запретить доступ по telnet

Смените оболочку mrfrog, используемую по умолчанию, на /bin/true с помощью команды: chsh mrfrog

Когда будет предложено указать путь новой оболочки, введите /bin/true. Это запретит mrfrog использование Telnet для связи с системой. Обратите внимание, что подобный шаг делается для того, чтобы гарантировать, что mrfrog не сможет использовать Telnet для доступа к серверу и просмотра файлов других пользователей или системных файлов. В конце концов, мы запретим все это, когда пользователь получит доступ к системе через сервер FTP. Измените файл /etc/passwd и добавьте /./ к существующему пути доступа домашнего каталога. Например, если файл /etc/passwd содержит строку, похожую на следующую: mrfrog:ldev33vylewv.:516:519::/home/mrfгод:/bin/true

измените ее на: mrfrog:ldev33vylewv.:516:519::/home/mrfrog/./:/bin/true Последовательность /./ определяет, где выполняется операция chroot(). Теперь измените файл /etc/shells и добавьте /bin/true в конце файла. Таким образом, программа /bin/true становится вариантом действующей оболочки. Обратите внимание, что программа /bin/true ничего не делает и завершается сразу после своего запуска. За счет этого она становится хорошим кандидатом для оболочки, которая нужна для проверки, но запрещает пользователю любые действия при мгновенном завершении собственной работы. Так как при выходе из оболочки пользователь заканчивает работу, он никогда не получит шанса сделать что-либо, когда пытается создать соединение Telnet.

Шаг 3: Установить пакет anonftp

Если пакет anonftp уже установлен в системе, пропустите этот шаг и перейдите к следующему. Или возьмите последнюю версию пакета anonftp и установите ее. Все, что нужно, это выполнить команду rpm: rpm

-ivh

anonftp-2.6-1.1386.rpm

Имя пакета anonftp будет меняться в зависимости от архитектуры системы и версии anonftp. Также обратите внимание, что пакет anonftp не будет устанавливаться, если в системе еще нет сервера FTP, такого как wu-ftpd.

www.books-shop.com

330

Глаза 13

Шаг 4: Скопировать файлы пакета anonftp в домашний каталог гостевого пользователя

Перейдите в каталог -ftp и используйте команду копирования всех файлов и каталогов в -mrfrog: tar cvf - * | (cd "mrfrog ; tar xvf -) Все, что действительно нужно, это каталоги -ftp/bin, -ftp/etc и -ftp/lib. Можно удалить каталог -ftp/pub или любой другой каталог, который уже мог бы находиться в каталоге -ftp.

Шаг 5: Обновить файлы ~mrfrog/etc/passwd и ~mrfrog/etc/group

Измените файл -mrfrog/etc/passwd и удалите строку для пользователя FTP. Добавьте точную копию строки пароля для mrfrog из файла /etc/passwd. Однако удалите пароль mrfrog и замените его на «*», чтобы сделать его недействительным. Например: mrfrog:ldev33vylewv.:516:519::/home/mrfrog/./:/bin/true Эту строку необходимо будет скопировать в -mrfrog/etc/passwd, а пароль заменить так, чтобы строка выглядела следующим образом: '

mrfrog:*:516:519::/home/mrfгод/./:/bin/true Измените файл -mrfrog/etc/group и добавьте строку mrfrog, находящуюся в /etc/group. Обратите внимание на такое обстоятельство: мы предполагаем, что используемое по умолчанию свойство Red Hat (автоматическое создание личной группы с тем же именем, что и новый пользователь), не отключено. Другими словами, когда создается пользователь с помощью программы useradd, она автоматически создает личную группу для этого пользователя с таким же именем. Поэтому, когда задается mrfrog, в /etc/passwd автоматически должна быть создана группа mrfrog. Если используемое по умолчанию поведение программы useradd изменено или пользователь создан вручную, не забудьте указать группу для этого пользователя и добавить ее в файл -mrfrog/etc/group. Удалите также группу ftp из файла -ftp/etc/group.

Шаг 6: Задать права доступа для каталогов и файлов

Измените права доступа каталогов/файлов следующим образом:

chown mrfгод.mrfгод "mrfrog chmod 750 "mrfrog

Команда chown будет задавать для каталога mrfrog владельца mrfrog и группу mrfrog. Вторая команда сделает каталог -mrfrog доступным только для пользователя и группы mrfrog. chown --R root, root "mrf год/etc "mrfrog/birv "mrf год/lib Эта команда будет изменять владельца и группу для подкаталогов etc, bin и lib в каталоге -mrfrog на пользователя и группу root. cd mrfrog chmod — R 111

*

Первая команда осуществляет переход в каталог -mrfrog. Вторая команда делает все файлы и каталоги исполняемыми только для everyone (все). cd

etc;' chmod 444

«

Эти команды делают переход в каталог -mrfrog/etc и задают полномочия чтения файлов только для everyone.

Шаг 7: Задать guestgroup в /etc/ftpaccess Так как мы хотим, чтобы реальный пользователь mrfrog стал гостевым пользователем, нам необходимо добавить группу mrfrog (которая также называется mrfrog) в список групп guestgroup. Например:

www.books-shop.com

Служба FTP

^

331

guestgroup mrfrog

Эта строка позволяет любому члену группы mrfrog (найденному в /etc/group) быть гостевым пользователем. Сервер FTP будет выполнять операцию , chroot. Для пользователя mrfrog сервер FTP будет enroot в /home/mrfrog.

Шаг 8: Тестирование учетной записи

Соединитесь с сервером FTP и зарегистрируйтесь с именем mrfrog. Если все сделано правильно, можно будет увидеть только домашний каталог этого пользователя. Попробуйте загрузить файл или создать каталог. Должны быть разрешены эти операции. Однако разрешат ли пользователю mrfrog удалять, перезаписывать или переименовывать файлы, зависит от того, что задать для этих операций в /etc/ftpaccess. Например, используемый по умолчанию файл /etc/ftpaccess содержит строки: chmod no guest, anonymous deleteno guest, anonymous overwrite no guest, anonymous rename no guest, anonymous

Эти строки запрещают гостевым учетным записям выполнять операции chmod, delete, overwrite или rename. Если требуется разрешить их для гостевых учетных записей, необходимо будет удалить «guest» из списка используемых по умолчанию типов в этих строках и превратить их в строки: chmod no anonymous delete no anonymous overwrite no anonymous rename no anonymous

Если не требуется сохранять пакет anonftp или свойство anonftp у сервера FTP, можно удалить файлы пакета из соответствующего каталога (-ftp) или выполнить: rpm —е anonftp—2.6—1.i386. rpm

Не забудьте использовать подходящее имя файла, так как версия или архитектура могут быть другими.

Создание виртуальных FTР-сайтов

ЕСЛИ создано несколько доменов и необходимо поддерживать отдельные серверы FTP (ftp.domain-1.com, ftp.domain—2.com и т.д.), можете использовать виртуальную службу FTP. Она позволяет вводить одну серверную систему для множества доменов. Сервер wuftpd можно сконфигурировать двумя способами для поддержки виртуальной службы FTP. Покажем оба метода. Для них в системе должны быть заданы псевдонимы IP-адресов, поэтому сначала рассмотрим их создание.

Создание псевдонимов IP-адресов

Для получения виртуальных серверов FTP необходимо иметь соответствующие записи DNS для каждого хоста FTP. Для этого потребуется несколько IP-адресов (один на каждый хост сервера FTP), чтобы можно было создать маршрут на машину сервера FTP. Использование технологии создания псевдонимов IP-адресов обсуждалось в главе 9. Необходимо было задать виртуальные интерфейсы Ethernet для всех IP-адресов. Например, предположим, что надо создать два виртуальных сервера FTP (ftp.client--01.com и f t p . c l i ent—02. com) на сервере FTP, называемом f t p . nitec. com. Допустим, что мы задали записи DNS для каждого домена, так что следующие строки являются правильными: ; В базе данных DNS client-01.com ftp.client-01.cora. IN A .206.171.50.51 ; В базе данных DNS client-02.com

www.books-shop.com

332

Глава 13

ftp.client-02.com. IN A 206.171.50.52

; В базе данных DNS nitec.com ftp.nitec.com. IN A 206.171.50.50 После задания псевдонимов IP-адресов и маршрутов на машине f t p . n l tec.com согласно инструкциям из главы 12, если мы выполнили: cat /proc/net/aliases Появятся следующие псевдонимы IP-адресов: Device family address ethO:0 2 206.171.50.51 ethO:1 2 206.171.50.52 Рассмотрим простейший способ создания виртуальных хостов.

Создание ограниченной виртуальной службы FTP

Этот метод проще, хотя его возможности ограничены. В данном случае будет создана виртуальная служба FTP, но ее нельзя в достаточной степени настроить на собственные требования. Если необходима полностью настраиваемая служба (как первичный сервер FTP), тогда перейдите к разделу «Создание полной виртуальной службы FTP». Чтобы создать эту ограниченную версию виртуальной службы FTP, необходимо сделать множество копий созданной пакетом anon-ftp структуры файлов/каталогов. Установите пакет anonftp и задайте его копии для каждого виртуального хоста. Для предыдущего примера мы создадим два каталога виртуальных узлов FTP — /home/clientl/ftp и /home/clientS/ftp. Затем скопируем все содержимое файлов и каталогов /home/ftp. Одним из самых простых способов сделать точную копию /home/ftp является выполнение команд: cd /home/clientl/ ; cp-a /home/ftp . cd /home/client2/ ; cp-a /home/ftp . Эти команды копируют структуру файлов/каталогов /home/ftp в каталоги виртуального узла. Отредактируем файл /etc/ftpaccess, чтобы добавить ключевое слово virtual: . virtual 206.171.50.51 root /home/clientl/ftp virtual 206.171.50.51 banner /home/client1/ftp/banner.msg virtual 206.171.50.51 logfile /home/clientl/ftp/xferlog virtual 206.171.50.52 root /home/client2/ftp virtual 206.171.50.52 banner /home/client2/ftp/banner.msg virtual 206.171.50.52 logfile /home/client2/ftp/xferlog He забудьте заменить IP-адреса и пути доступа каталогов на выбранные раньше. Измените файл banner.msg для каждого хоста, чтобы отразить любую специфическую для узла информацию, которую требуется выводить. Не нужен подкаталог pub для виртуальных узлов FTP, поэтому его можно удалить на каждом из узлов. Как только будет создана такая конфигурация, виртуальные серверы FTP готовы для тестирования. Сделайте соединение FTP с каждым из виртуальных IP-адресов и обратите внимание на различие файлов banner каждого хоста. Однако эта виртуальная настройка не позволяет полностью управлять возможностями сервера. Например, нельзя использовать ключевое слово email в /etc/ftpaccess, чтобы указать на различные адреса электронной почты, соответствующие виртуальным узлам. Обратите внимание на то, что команда ftpshut, поставляемая со стандартным wu-ftpd, не поддерживает отключение виртуальных узлов. Она записывает файл сообщения о выключении только в одно место, определенное ключевым словом shutdown в файле /etc/ftpaccess. Когда наступает время для перезапуска сервера, вам следует вручную удалить файл сообщения о

www.books-shop.com

333

Служба FTP

выключении. Для преодоления неудобств можно было бы получить замену для утилит ftpshut/ftprestart со следующего Web-сайта: http://www. landfield. com/wu—ft pd/res tart. Нужно будет самостоятельно откомпилировать и собрать эти утилиты. Посмотрим на более совершенный метод создания виртуальных серверов FTP.

Создание полной виртуальной службы FTP

Этот метод требует обновления (за счет установки патча) в исходном тексте wu-ftpd и самостоятельного компилирования. Можно получить исходный код wu-ftpd на следующем узле FTP: ftp://ftp.academ.com/pub/wu—ftpd/private/. Понадобится файл обновления с такого узла FTP: ftp: //f tp. meme. com/pub/software/wu-ftpd-2.4.2/. Прочтите файл README, который поставляется вместе с обновлением. Приложите обновление к исходному коду wu-ftpd, который был загружен раньше. Откомпилируйте и установите измененный wu-ftpd согласно инструкциям, находящимся в пакете исходного кода wu-ftpd. Установите новый сервер FTP в используемое по умолчанию место /usr/sbin/in.ftpd. Новая исправленная программа wu-ftpd (in.ftpd) теперь принимает аргумент для параметра -а. Обычно -а сообщает серверу, чтобы он прочитал файл /etc/ftpaccess. Теперь измененная версия позволяет определить ему другой путь для файла ftpaccess. За счет этого новый сервер может просматривать различные конфигурационные файлы ftpaccess, которые будут нужны для создания виртуальных узлов FTP. Изменим теперь файл /etc/inetd.conf так, чтобы служба FTP имела строку, похожую на:

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd Эта конфигурация будет вызывать сервер FTP через оболочку TCP (tcpd). Изменим файл /etc/hosts.allow так, чтобы в нем были строки, похожие на те, которые характерны для каждого сервера FTP (т.е. для первичного сервера и всех виртуальных серверов FTP): # For the primary server (Для первичного сервера) [email protected] : ALL : twist exec \ /usr/sbin/in.ftpd -1 -a /etc/ftp/ftpaccess

'

# For the virtual FTP server (Для виртуального сервера FTP) [email protected] : ALL : twist exec \ /usr/sbin/in.ftpd -1 -a /etc/ftp/client1.ftpaccess # For the second virtual FTP server (Для второго виртуального сервера FTP) [email protected] : ALL : twist exec \ /usr/sbin/in.ftpd -1 -a /etc/ftp/client2.ftpaccess Создайте каталог /etc/ftp и туда переместите файл /etc/ftpaccess. Сделайте две копии файла /etc/ftp/ftpaccess, так чтобы существовали файлы /etc/ftp/clientl.ftpaccess и /etc/ftp/client2.ftpaccess. Удалите все ключевые слова virtual из файла /etc/ftp/ftpaccess, используемого для главного сервера FTP. Наконец, измените файл clientl.ftpaccess, чтобы он имел строку вида: virtual 206.171.50.51 root /home/client1/ftp Аналогично измените файл client2.ftpaccess, чтобы он имел строку вида: virtual _206.171.50.52 root /home/client2/ftp. Не забудьте заменить IP-адрес и путь доступа каталога на собственные. Теперь скопируйте файлы anonftp в каталоги /home/client I /ftp и /home/client2/ftp. Когда будет создана эта конфигурация, сделайте повторный запуск сервера inetd, используя команду: killall -HUP inetd

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

334

Глава 13

Это все, что необходимо сделать. Теперь есть два виртуальных узла FTP, к которым можно получить доступ по соответствующим именам хостов или IPадресам.

Мониторинг журнала передачи Ведение журнала необходимо для службы FTP, так как важно знать, кто и что делает с файлами. Сервер wu-ftpd ведет журнал передачи в файле xferlog, который обычно находится в каталоге /var/log. Можно настроить запись в журнал, используя ключевые слова «log commands» и «log transfers», обсуждавшиеся ранее. Если необходим постоянный мониторинг xferlog, можно попробовать Dumpxfer. Получить этот пакет можно по следующему адресу FTP: ftp: //ftp. microimages.com/tools/dumpxfeг.1.2.tar.gz.

Использование коммерческого сервера FTP

Сервер wu-ftpd является бесплатным и предоставляет достаточно хорошие возможности конфигурирования, когда речь идет о стандартной службе FTP. Однако он недостаточно производителен при значительной нагрузке и не имеет хороших и настраиваемых решений для виртуальной службы FTP. Если нужен высокопроизводительный сервер FTP, за который можно заплатить, попробуйте пакет NcFTPd. Это коммерческий сервер FTP, который обладает следующими интересными свойствами: • Он не выполняется через inetd и поэтому при запуске имеет лучшую производительность. Процессы на основе inetd никогда не предназначались для достижения высокой производительности. • Он имеет встроенные средства получения списков каталогов, в то время как wu-ftpd должен формировать процесс Is при запросе (чтобы получить список каталога). Поэтому NcFTPd лучше использовать при обработке списков каталогов. Он может даже кэшировать списки каталогов в памяти, чтобы ускорить передачу подобных списков в крупномасштабных узлах FTP. • NcFTPd имеет чрезвычайно гибкие возможности виртуального хостинга. Каждый виртуальный хост может иметь собственное приветственное сообщение, ' дерево каталогов анонимного FTP, схему аутентификации пароля, ограничения пользователей и файлы журналов.

С коммерческим сервером FTP вы можете познакомиться, если загрузите его со следующего Web-сайта: http://www. ncftp. com/download/. Обратите внимание, что NcFTPd является бесплатным для учебных организаций некоторых доменов верхнего уровня, таких как . edu и . us. \

Использование сервера с TFTP

Сервер TFTP уже может присутствовать в системе. Он называется сервером tftpd. В действительности он не является сервером FTP, так как использует упрощенный протокол передачи файлов (Trivial File Transfer Protocol) вместо протокола передачи файлов (File Transfer Protocol). TFTP применяет «UDP поверх IP» — ненадежный метод передачи, ориентированный на пакеты. FTP использует «TCP поверх IP» — надежный метод передачи, ориентированный на поток. TFTP не обеспечивает безопасность. FTP использует для безопасности аутентификацию пользователей. Однако серверы TFTP и FTP работают практически одинаково. Единственное существенное различие состоит в том, что он предназначен только для анонимной передачи файлов похожей на FTP, где не используется аутентификация. Нужно ли его использовать? Многие люди используют TFTP прежде всего в соединение с протоколом bootp для загрузки бездисковых рабочих станций, таких как терминалы X Window. Служба TFTP отключена по умолчанию

www.books-shop.com

Служба FTP

335

в файле /etc/inetd.conf. Можно включить ее, удалив # (знак комментария) в строке, которая выглядит следующим образом: # tftp dgram udp wait root /usr/sbin/tcpd \ in.tftpd- /tftpboot Когда строка станет активной, повторно запустите сервер inetd для внесения изменений. Обратите внимание, что /tftpbook является каталогом, к которому могут получить доступ клиенты TFTP. Убедитесь, что этот каталог не содержит никаких файлов, которые не следует использовать совместно со всеми пользователями. Помните, что для доступа к подобному файлу не требуется никакой аутентификации. Любой, кто сможет получить доступ к серверу, будет иметь доступ к этому каталогу. Можно также разрешить доступ к файлам в этом каталоге только для чтения.

www.books-shop.com

www.books-shop.com

Глава 14 Другие популярные службы

В этой главе: •Настройка сервера IRC • Настройка сервера новостей Usenet

этой главе рассматриваются две важные службы для пользователей, которые стали очень популярными. Они позволяют пользователям системы общаться друг с другом или с кем-либо в мире. Для этого используются два различных протокола. Опишем службу IRC (Internet Relay Chat — Оперативный обмен текстовыми сообщениями в Интернете), которая используется для обеспечения общения в реальном времени множества пользователей. Следующая служба — это служба новостей, которая позволяет пользователям обмениваться информацией на многопоточной доске объявлений, называемой Usenet.

Настройка службы IRC

IRC (Internet Relay Chat — Оперативный обмен текстовыми сообщениями в Интернете) является широко используемой службой общения пользователей. Служба IRC впервые была запущена в Финляндии в 1988 г. и с тех пор распространилась по всему миру. Существует множество общественных серверов IRC. Хотя IRC первоначально использовалась для обеспечения неформального общения, она имеет возможности для формирования службы обмена в коммерческих организациях. Например, используя сервер IRC, компания может в реальном времени поддержать общение персонала технической поддержки с заказчиками во всем мире. Служба может применяться для проведения собраний, участники которого находятся в разных местах. Так как IRC обеспечивает коммуникации на основе текстовых сообщений, она не предъявляет серьезных требований к системам, которые

www.books-shop.com

Глава 14

338

свойственны проведению аудио- и видеоконференций в реальном времени. В этом разделе рассматриваются установка и конфигурирование службы IRC на сервере Red Hat Linux.

Установка сервера IRC

Сервер IRC называется ircd. Установить ircd можно двумя способами. Можно ввести двоичный пакет RPM или компилировать сервер из исходного текста. Однако заметим, что двоичный RPM для ircd не содержит никакой документации, поэтому если нужна справочная информация, придется получить дистрибутив исходного файла. Соответствующий пакет RPM можно загрузить с сайта http: //contrib. redhat . com/ или любого из его зеркальных образов. Мы использовали зеркало сайта Red Hat. В данном случае необходимо ввести сайт зеркала Red Hat, который также отображает сайт h t t p : / / c o n t r i b . r e d h a t . c o m / . Посетите следующий URL, чтобы найти ближайшее зеркало сайта: h t t p : / / w w w . r e d h a t . c o m / mirrors.html. Загрузите пакеты ircd*.rpm. Установите их, используя команду rpm -ivh ircd*.rpm. Задается демон ircd, его конфигурационный файл и программа его проверки в каталог /usr/Iocal/lib/ircd. Пакет RPM с исходным текстом устанавливает файл исходного текста в сжатом формате (.tar) в каталог /usr/src/redhat/SOURCES. Исходный текст можно извлечь, используя команду tar xvzf (имя дистрибутива исходного текста irc).tgz. Если вы хотите компилировать ircd самостоятельно, прочтите файл doc/INSTALL в дистрибутиве исходного текста.

Все готово к конфигурированию демона IRC.

Конфигурирование сервера IRC

Демон ircd использует единственный конфигурационный файл, называемый ircd.conf. На листинге 14.1 показан пример конфигурационного файла ircd, находящийся в дистрибутиве исходного кода. Листинг 14.1. Пример файла ircd.conf (Далее представлен перевод комментариев в этом файле) # IRC - Internet Relay Chat, doc/example.conf № Copyright (C) 1994, Helen Rose #

# # # # #

Эта программа является бесплатным программным обеспечением; вы можете распространять его и/или модифицировать при условии соблюдения Генеральной общественной лицензии GNU, опубликованной Free Software Foundation; либо версии 1, либо (на ваше усмотрение) любой более поздней версии.

# # Эта программа распространяется с надеждой на ее полезность, # но БЕЗ КАКОЙ-ЛИБО ГАРАНТИИ; даже без предполагаемой гарантии и ТОВАРНОГО СОСТОЯНИЯ или СООТВЕТСТВИЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. # Смотрите подробности в Генеральной публичной лицензии GNU. # # Вы должны получить копию Генеральной общественной лицензии GNU # вместе с этой программой; если нет, напишите во Free Software # Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA. # # Это пример конфигурационного файла для сервера IRC. # # Вам нужен ircd.conf (конфигурационный файл сервера IRC), только если # вы выполняете сервер IRC. Если вы выполняете автономного клиента, # этот файл не нужен, #

www.books-shop.com

Другие популярные службы

339

Этот файл объясняет различные строки в конфигурационном файле сервера IRC. Не все строки являются обязательными. Вы можете проверить правильность вашего конфигурационного файла с помощью программы "chkconf", содержащейся в дистрибутиве сервера (когда вы выполняете "make install", эта программа будет установлена в тот же каталог, что и сервер ire). Сведения о том, нужна строка или нет, являются: ОБЯЗАТЕЛЬНАЯ: вы обязательно ДОЛЖНЫ иметь эту строку СЕТЕВАЯ: вы должны иметь эту строку, если вы соединяете этот сервер ire с каким-нибудь другим сервером (серверы могут выполняться автономно). ПРЕДПОЛАГАЕМАЯ: настоятельно рекомендуется, чтобы вы использовали эту строку. ВОЗМОЖНАЯ: полностью зависит от вас, определять эту строку или нет НЕРЕКОМЕНДУЕМАЯ: вы, в действительности, не должны использовать эту строку, если это вообще возможно. НЕНУЖНАЯ: старая или несовременная строка, которая не нужна. ОБЯЗАТЕЛЬНЫЕ строки являются абсолютно «необходимыми», т.е., 1 если у вас нет такой строки, то ваш сервер не будет работать правильно. ПРЕДПОЛАГАЕМЫЕ строки являются близкими к обязательным (т.е. сервер будет без них работать, но вам настоятельно рекомендуется использовать эти строки). Обратите" внимание, что "*" в поле указывает "неиспользуемое" поле. ПРИМЕЧАНИЕ! весь этот конфигурационный файл читается СВЕРХУВНИЗ! Поэтому если вы хотите поместить что-то в определенном порядке (например, линии соединений с клиентами), расположите их в обратном порядке! М: [ОБЯЗАТЕЛЬНАЯ]. Эта строка задает для вашего сервера имя, •описание и номер порта. Полями по порядку являются: М: :*: Y: [ПРЕДПОЛАГАЕМАЯ]. Эти строки определяют классы соединений. Классы соединений позволяют вам тщательно настроить соединения ваших клиентов и серверов. Предполагается, что клиенты и серверы

www.books-shop.com

340

Глава 14

помещаются в различные классы и если у вас есть много серверных и соединений (если вы имеете на самом деле много серверов, вам не нужно читать этот файл :-), каждое множество серверов (произвольно определенное вами) должно иметь свой собственный класс. Если вы имеете клиентов, входящих из множества различных узлов, вы можете разделить их на классы. Например, вы можете поместить локальных пользователей в один класс, а удаленных пользователей в другой класс. Номера классов не являются произвольными. В автоматически соединяющихся серверах - т.е. серверах, у которых вы имеете номер порта (например, 6667) в конце строки С: (смотрите ниже), чем больше число, тем выше приоритет при автоматическом соединении. Поля упорядочены так: номер класса, частота ping (в секундах), частота соединения (в секундах), максимальное числом соединений (используемых для автоматического соединения и для ограничения числа клиентов в этом классе) и sendq (это изменяет любое значение, заданное в include/config.h для define MAXSENDQLENGTH). Обратите внимание, что лучше использовать одинаковую частоту ping на обоих концах соединения. в данном случае частота соединения 0 указывает, что это клиентский класс (серверы никогда не соединяются с клиентами - только клиенты с серверами). Y:1:90:0:20:100000 это нормальное серверное соединение (нормальное для марта 1994 г.) Y:2:'90:300:1:600000 Y:10:90:0:3:100000 I: [ОБЯЗАТЕЛЬНАЯ]. Строки I: являются строками авторизации клиентов. Без них ни один клиент не сможет соединиться с вашим сервером. 'Допускается использование метасимволов ("*"). Пароли также разрешены (можно сконфигурировать клиенты, чтобы они посылали пароли). Ident (дополнительная информация об этом находится в rfc1413) также может использоваться за счет размещения @ в соответствующих полях Существуют следующие поля: I::::: \ (на выбор) С паролем Это позволит любому соединиться откуда угодно, если , он знает пароль ("foobar"). Примечание: Перечислите эти I: строки первыми, это будет прочитано *в последнюю очередь*, означая, что это "пропускается". Т.е. любой, кто не соответствует строкам I: перечисленным ниже, должен знать пароль ("foobar") для соединения. I:*@*:foobar:*@*::1 Это стандартная простая строка I: , которая позволит любому с IPадресом, начинающимся с 128.197, или с именем хоста, оканчивающимся

www.books-shop.com

Другие популярные службы

^.

341

на .bu.edu, соединиться с сервером. Примечание. Ircd сравнивается с «самым правым* совпадающим образцом, поэтому если мы соединяемся как [email protected] (что означает [email protected]), мы будем показаны в ire как [email protected], так как это первое соответствие, которое будет найдено. (Даже если второе совпадение является действительным). 1:128.197.*::*.bu.edu::1 использование ident I:*@128.197.*::*@*.bu.edu::1 и вы можете даже определить только некоторые имена пользователей выполняющих ident (до тех пор пока клиентский узел выполняет демона ident): I:NOMATCH::[email protected]: :1 размещение NOMATCH в первом поле отключит в ircd автоматический поиск соответствия по IP-адресу и будет вынуждать сервер искать соответствие согласно имени хоста, (строка "NOMATCH" не является обязательной, вы можете использовать любой произвольный текст в первом поле). 0: [ВОЗМОЖНАЯ]. Эти строки определяют операторский доступ. Вам не нужно иметь оператора для выполнения сервера. Хорошо сконфигурированный оконечный узел не нуждается в подключенном операторе. Если его соединения надежно определены, администратор ire может использовать kill -HUP ircd для перезагрузки конфигурационного файла. Определены следующие поля: 0: (разрешен ident "@"):: если человек "NickName" приходит не из хоста, определенного в первом поле, тогда он получит сообщение об ошибке "No 0: lines for your host" (No 0: строк для вашего хоста). Примечание. Так как Crypted Password (Зашифрованные пароли) определены по умолчанию в include/config.h, этот текст, вероятно, не будет открытым. Смотрите дополнительную информацию в ircd/crypt/README 0:*.bu.edu:Zaphod:Trillian::10

а эта строка навязывает ident: 0:[email protected]:Zaphod:Trillian::10 Эта строка является "локальным оператором", она определяется с помощью "о" нижнего регистра - это единственный тип в нижнем регистре в файле ircd.conf. такая строка позволяет псевдониму "jhs" с паролем "ITBites" быть только локальным оператором (иметь возможность выполнять локально команды - может /kill и /squit и /connect - но «только* локально) 0*:bu.edu:ITBites:jhs::10 строка зашифрованного пароля (Примечание. Если вы имеете зашифрованные пароли, «все* ваши пароли должны быть зашифрованы!) Если вы получите ошибку "Incorrect Password" ("Неправильный пароль"), причина может быть в определении

www.books-shop.com

Глава 14

342 зашифрованных паролей, но передающихся открытым текстом. Поэтому мой пример строк открытого текста и зашифрованных строк в одном конфигурационном файле сервера IRC не корректен (но он просто теоретический, вот почему мы объясняем оба варианта). 0:[email protected]:TOeiVgHrqeKTQ:Rocker::10 U: [НЕНУЖНАЯ]. Эта строка определяет сервер, используемый по умолчанию для клиента IRC, который поставляется с сервером, клиент по умолчанию находится в irc/irc. Вы не должны использовать строки U:, но вместо этого используйте определение IPHOST в include/config.h U:csa.bu.edu:foobar:csa.bu.edu С: [СЕТЕВАЯ]. Эти строки определяют, с какими серверами пытается соединиться ваш сервер. N: [СЕТЕВАЯ]. Эти строки определяют, каким серверам ваш сервер разрешает инициировать соединения. Строки C/N должны использоваться парами, Вы не можете иметь одну из них без другой. С: строки содержат следующие поля: С:New и создайте новое значение типа DWORD. 5. Редактор реестра вставит новое значение DWORD с именем «New Value #1». Переименуйте новое значение в EnablePlainTextPassword и дважды щелкните на новом имени. 6. Появится диалоговое окно, которое позволит задать значение созданного параметра EnablePlainTextPassword. Введите 1 в качестве значения и закройте обычным способом редактор реестра. .

7. Перезагрузите систему Windows Qx/NT.

www.books-shop.com

Совместное использование файлов и принтеров с помощью Samba

365

Это гарантирует, что система Windows 9x/NT для аутентификации SMB может использовать пароли открытым текстом. По умолчанию socket options в глобальном конфигурационном разделе задается равным TCP_NODELAY, что улучшает производительность Samba на некоторых платформах. Лучше оставить этот параметр без изменения. Последний параметр, используемый по умолчанию в глобальной конфигурации, это dns proxy. Он задается равным «по». Этот параметр влияет на поведение встроенного в пакет Samba сервера имен Интернета Windows (nmbd), когда имя системы Windows (имя NETBIOS) не может быть разрешено в некоторый IP-адрес. В таком случае, если этот параметр задан равным «yes», сервер nmbd будет интерпретировать имя NETBIOS как имя домена Интернета и пытаться разрешить его, используя протокол DNS. Рекомендуем вам оставить без изменения значение по умолчанию. Посмотрим на раздел [homes], используемый в конфигурации по умолчанию.

Конфигурация (homes)

Раздел [homes] является специальным конфигурационным разделом. Он позволяет задать доступ к домашнему каталогу из систем Windows. [homes]

comment = Home Directories browseable = no writable = yes Первый параметр является комментарием. Второй параметр browseable контролирует домашние каталоги в списке браузера (таком как Network Neighborhood) или в команде NET VIEW из командной строки Windows. Параметр writable контролирует возможность пользователя писать в свой собственный домашний каталог. Его необходимо задать равным «yes». Если указать его как «по», пользователь будет иметь доступ только для чтения к собственному домашнему каталогу. Последним действующим конфигурационным разделом в используемом по умолчанию файле /etc/srm.conf является раздел [printers].

Конфигурация (printers)

Раздел [printers] полезен, только если имеется один или несколько принтеров, присоединенных к системе Red Hat Linux. [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes

Параметр comment является комментарием. Параметр path используется для задания каталога, куда будут подкачиваться файлы данных принтера. Параметр browseable позволяет сделать принтеры появляющимися (или не появляющимися) в браузере (таком как Network Neighborhood) или в выводе команды NET VIEW. Параметр guest ok позволяет всем использовать принтеры без пароля. Последний параметр printable является очень важным. Он должен быть задан равным «yes». Тогда сможет выполняться вывод на печать. Конфигурация по умолчанию содержит много закомментированных конфигурационных параметров и дополнительных разделов. Нужно тщательно исследовать эти параметры и инициировать те, которые следует использовать. Однако во время первой установки сервера Samba, мы рекомендуем сначала заставить его работать, используя конфигурацию по умолчанию. В следующем разделе будут рассматриваться некоторые распространенные параметры конфигурации.

www.books-shop.com

366

Глава 15

Использование графических утилит конфигурирования

Распространено мнение, что файлом /etc/smb,conf трудно управлять вручную, поскольку в этом случае приходится рассматривать слишком много параметров. В связи со спросом на более удобный, чем текстовый редактор, интерфейс для управления файлом /etc/smb.conf существует большое количество утилит с графическим интерфейсом пользователя (GUI) для управления этим файлом. Некоторые из них перечислены в таблице 15.1. Из всех вариантов GUI самым удобным является официальное средство SWAT. Его можно полноценно использовать, однако для редактирования мы предпочитаем редактор vi.

Тестирование конфигурации /etc/smb.conf

Каждый раз при изменении конфигурационного файла Samba не забудьте выполнить утилиту testparm, которая входит в состав пакета Samba. Запустив эту утилиту из командной строки, мы сможем проверить синтаксис файла /etc/smb.conf и получить полезные предупреждения или сообщения об ошибках. Так как неправильно сконфигурированный /etc/smb.conf может стать дырой в системе защиты, мы рекомендуем использовать утилиту всякий раз при изменении конфигурационного файла.

Таблица 15.1. Утилиты с графическим интерфейсом для управления /ete/smb.conf

Утилита SWAT-Samba Web

SMBEdit SMB2WWW smbconftool

Комментарии/URL Это официальный GUI для Samba, так как он будет входить в пакет следующей основной версии Samba. Он является конфигурационным инструментом на основе Web. http://anu.samba.org/cgi-bin/swat/ Это редактор smb.conf на основе Window. http://us2.samba.org/sambaysmbedit/intro.htm SMB2WWW является шлюзом к 8MB на базе perl из Web-браузеров. http://us2.samba.org/samba/smb2www/index.html Это инструментальное средство на базе Java для редактирования smb.conf. http://www.eatonweb.com/samba/

Запуск, остановка и повторный запуск службы Samba

Завершив проверку файла /etc/smb.conf на ошибки, мы готовы к запуску Samba. Два демона поставляются вместе с пакетом Samba. Демон smbd является сервером Samba, а демон nmbd — сервером имен NETBIOS. Для запуска демонов выполните команду с правом root: /etc/re.d/init.d/smb start Команда запустит демонов и откроет доступ к серверу Samba из компьютеров на базе Windows. Для остановки сервера Samba можно выполнить ту же самую команду с аргументом stop. KpoMe того, можно повторно запустить демонов, используя подобную команду с аргументом restart. Если нужно запускать службу Samba во время начальной загрузки, создайте символьную ссылку: In -s /etc/rc.d/init.d/smb /etc/re.d/rc3.d/S91smb Это приведет к запуску службы Samba. В этом случае сервер Red Hat Linux входит в уровень выполнения 3, который является используемым по умолчанию уровнем для всех многопользовательских систем. Обратите внимание, что если используется процедура регистрации, основанная на системе X-Window, (с помощью XDM) и требуется запускать Samba автоматически, понадобится создать другую связь следующим образом: In -s /etc/rc.d/init.d/smb /etc/re.d/rc5.d/S91smb Рассмотрим области практического применения службы Samba, которую мы сконфигурировали и запустили на сервере.

www.books-shop.com

Совместное использование файлов и принтеров с помощью Samba

367

Практическое использование Samba

Samba является удобным средством для соединения миров Microsoft и Linux. В этом разделе представлено несколько практических примеров того, как можно получить интересные результаты с помощью Samba.

Использование файлового сервера Linux в Windows

Администраторы Linux в вычислительном центре, использующем Linux — Windows, могут применять Samba. Например, предположим, что необходимо создать раздел Linux (или каталог), называемый /intranet, доступным для группы пользователей Windows (John, тагу и phil) в локальной сети. Вот что нужно сделать: 1. Если параметр security в разделе конфигурации [global] задан как user или share, создайте три учетные записи пользователей (Jennifer, chad и phil) в системе Linux. Их необходимо ввести так, чтобы пароль для каждой из них совпадал со своим аналогом в Windows. Например, если пароль Jennifer в ее системе Windows задан как tsk#tsk, тогда необходимо задать ее учетную запись Linux с таким же паролем. Создайте также группу с именем intranet в /etc/group так, чтобы пользователи Jennifer, chad и phil были единственными членами в этой группе. 2. Измените теперь файл /etc/smb.conf, добавив следующее: [intranet] comment = Intranet Directory path = /intranet public = no writable = yes write list = @intranet printable = no Эта конфигурация [intranet] определяет, что /intranet не является общим. Полномочия для записи даны группе intranet. Если выполнить testparm, чтобы убедиться, что в файле /etc/smb.conf нет синтаксических ошибок, можно снова запустить службу Samba. Теперь пользователи John, тагу и phil будут иметь доступ к разделу или каталогу /intranet из их систем на базе Windows. Если вам потребуется создать файловый сервер только для чтения, можно задать параметр writable, равным «по» и удалить параметр write list из предыдущей конфигурации. Чтобы сохранить права доступа файлов в общем разделе (или каталоге) теми же самыми, можно использовать параметр force create mode. Например: force create mode 0750

Это гарантирует, что все файлы, созданные в общем пространстве, предоставляют полный доступ (чтения, записи и выполнения) для владельца и доступ на чтение и выполнение для любого члена группы. Тот, кто не является членом группы, не сможет обратиться к этим файлам.

Использование файлового сервера Windows в системе Linux

ЕСЛИ есть файловый сервер Windows, который нужно сделать доступным для пользователей Linux, можно использовать smbfs (файловую систему SMB) для монтирования дисков и каталогов Windows в системе Linux. Например, чтобы смонтировать на сервере SAMBA Linux используемый по умолчанию диск (диск С:) сервера Windows NT с именем PLUTO, необходимо выполнить следующие действия: 1. В системе Windows NT дважды щелкните на значке My Computer (Мой компьютер). Откроется окно My Computer. Щелкните один раз на значке диска С: и затем нажмите правую кнопку мыши, чтобы получить контекстное меню (см. рис. 15.1),

www.books-shop.com

368

Глава 15

Рис. 15.1. Выбор совместного использования диска в Windows NT

2. Выберите в списке команду Sharing (Доступ). Откроется диалоговое окно, показанное на рис. 15.2.

Рис. 15.2. Настройка совместного использования диска в Windows NT

3. Выберите вкладку Sharing (как показано на рис.). Установите флажок Shared As и выберите имя для общего использования из раскрывающегося списка Share Name. Здесь именем общего ресурса является С. Напишите строку комментария, чтобы помочь идентифицировать общий ресурс при просмотре с других компьютеров. 4. Нажмите кнопку Apply (Применить) и закройте окно. Установлено совместное использование 8MB для диска С. Теперь вам надо подключить этот общий ресурс к системе Linux. Файловая система smbfs поставляется вместе с командой, называемой smbmount, которая позволяет монтировать общий ресурс SMB. Типичный синтаксис: smbmount //WINDOWS-SERVER/path /mount-point \ -U WindowpUser - P WindowsUserPassword

Здесь //WINDOWS-SERVER является системой Windows с общим ресурсом (path), /mount-point — монтируемым каталогом в системе Linux, WindowsUser — пользователем системы Windows, который имеет доступ для чтения к общему ресурсу, и WindowsUserPassword — паролем для пользователя. Если система Windows NT настроена корректно, только пользователь Administrator (или эквивалентный пользователь) должен иметь полный доступ ко всему диску. Поэтому мы будем использовать пользователя Administrator для

www.books-shop.com

369

Совместное использование файлов и принтеров с помощью Samba

монтирования диска С. Здесь представлен пример команды smbmount, с помощью которой монтируется диск С системы PLUTO: smbmount //PLUTO/c /mnt/pluto-c -U Administrator -P gowent Если во время выполнения конкретной версии этой команды появится сообщение об ошибке, убедитесь, что введен правильный пароль. Можно использовать параметр -I для определения IP-адреса сервера Windows NT в том случае, если он не объявляет свой IP-адрес. Если команда выполнится успешно, /mnt/pluto-c попадет в список df и откроется доступ ко всем файлам диска С системы Windows. Если вам надо смонтировать диск С так, чтобы только определенные пользователи и группы в системе Linux могли получить доступ к диску, можно использовать параметры -u UID и -g GID. Например: submount //PLUTO/c /mnt/pluto-c -U Administrator -P gowent \ -u root -g admin

Здесь только пользователь root и любой из группы admin имеет доступ к диску С системы PLUTO, который смонтирован в системе Linux как /mnt/pluto-c. Для демонтирования или удаления файловой системы 8MB из системы Linux необходимо выполнить команду smbumount. Например: smbumount /mnt/pluto-c

Эта команда демонтирует общий ресурс у/PLUTO/c в системе Linux.

Совместное использование принтеров системами Linux и Windows

Совместное использование принтеров является обычным свойством операционной среды локальной сети. Используя Samba, можно совместно работать как с принтерами Linux, так и с Windows.

Использование принтера Windows совместно с Linux

В соединенной с принтером системе Windows создайте учетную запись, которая может использовать принтер и не требует пароля. Например, на рабочей станции или сервере Windows NT можно выполнить следующие шаги для создания такой учетной записи: 1. Используйте программу User Administrator для создания учетной записи с именем printeruser. He присваивайте никакой пароль для этого пользователя и присоедините пользователя к группе обычных пользователей. 2. Выберите принтер в папке My Computer и щелкните на нем правой кнопкой мыши. Появится окно свойств принтера. Выберите вкладку Security и щелкните на Permissions. Это диалоговое окно представлено на рис. 15.3. Рис. 15.3, Полномочия принтера для пользователей в системе Windows NT

www.books-shop.com

370

Глава 15

Если группа «Everyone» (Все) имеет доступ к печати, вам ничего делать не нужно. Если Everyone не имеет доступа к печати, добавьте printeruser в список пользователей с полномочием печати на этот принтер. Когда сконфигурирована учетная запись Windows NT для печати, ее нужно проверить: Л. В системе Linux воспользуйтесь программой smbclient для соединения с принтером следующим образом: smbclient //WINDOWS-SYSTEM/SharedPrinter -U printeruser -N -P

He забудьте заменить WINDOWS-SYSTEM именем системы Windows, a SharedPrinter именем принтера. Параметры -N и -Р определяют для программы smbclient использование для соединения пароля null. 2. После соединения мы попадаем в командную строку программы smbclient, где можно ввести команду printmode text для задания текстового режима печати, и задайте команду типа print /path/to/a/linux/textfile для печати файла. Если принтер печатает файл, то половина работы уже сделана. 3. Теперь необходимо сконфигурировать печать со стороны Linux. Простейший способ для конфигурирования принтера на основе SMB состоит в использовании утилиты printtool на основе X-Windows, которая поставляется вместе с Red Hat Linux. Выполните printtool из xterm и щелкните на Add. Появится диалоговое окно (см. рис. 15.4). Выберите Lan Manager Printer (SMB) и для продолжения работы щелкните на ОК. Рис. 15.4. Добавление принтера 8MB с помощью printtool

4. Появится диалоговое окно (см. рис. 15.5). Рис. 15.5.

I

Редактирование конфигурации принтера

5. Если это первый принтер, именем будет 1р. Можно заменить его на любое, которое вам больше всего нравится. Это имя будут использовать команды печати, такие как 1рг, для идентификации принтера. Каталог спулинга (spool) также должен быть задан как /var/spool/lpd/lp. Если было изменено имя принтера, не забудьте также поменять путь каталога спулинга, чтобы отразить изменение имени. Параметр File Limit должен быть оставлен без изменений, если только не применять принтер в операционной среде, где пользователи

www.books-shop.com

Совместное использование файлов и принтеров с помощью Samba

371

могут его неправильно использовать, посылая слишком большие файлы. В таком случае имейте разумное ограничение, например 2048 Кбайт (2 Мбайта). Имя хоста принтера должно быть задано как в системе Windows NT, к которой подключен принтер. IP-адрес этого хоста необязателен. Имя принтера является именем общего ресурса, который создан для принтера. Имя пользователя должно быть именем пользователя принтера (printuser), которого мы создали ранее. Поле пароля должно быть оставлено пустым, так как пароль для этого пользователя не указан. 6. Для изменения фильтра входа щелкните на Input Filter Select. Диалоговое окно Configure Filter показано на рис. 15.6. Рис. 15.6. Конфигурирование фильтра входа

7. Выберите тип и параметры принтера. Для завершения конфигурирования фильтра щелкните на ОК. Чтобы добавить новый фильтр, нажмите кнопку ОК. еще раз. 8. Все готово для тестирования принтера. В окне Red Hat Linux Print System Manager выберите вновь созданный принтер, щелкнув на нем один раз, а затем в меню Tests выберите команду test, чтобы протестировать принтер. Если принтер заработает, значит конфигурация правильна. Если принтер напечатает нечто бессмысленное, можно вернуться назад в диалоговое окно конфигурации фильтра входа для внесения изменений. Тогда вы получите правильный результат. Если принтер успешно протестирован на последнем шаге, значит его конфигурация закончена. Используйте этот принтер из приложений Linux. Например, чтобы использовать принтер для печати текстового файла из командной строки, можно ввести команду 1рг: 1рг -Р /путь/к/файлу Если имя принтера есть 1р и нужно напечатать файл /etc/smb.conf, команда будет выглядеть следующим образом: Ipr

-Pip /etc/smb.conf

Для просмотра очереди печати используйте команду Ipq. Для удаления задания печати из очереди введите Iprm. Обратите внимание, что когда файл, который надо печатать, переносится в область спулинга печати Windows, его статус больше недоступен.

www.books-shop.com

372

Глава 15

Использование принтера Linux в Windows

Измените файл /etc/smb.conf следующим образом:

1. В разделе конфигурации [global] задайте: printcap name = /etc/printcap load printers = yes 2. В разделе конфигурации [printers] задайте: comments = All Printers path = /var/spool/lpd writable = no printable = yes Если нужно, чтобы список принтеров появлялся в списке браузера, задайте в предыдущей конфигурации параметру browseable значение yes. Аналогично, если требуется разрешить гостевую учетную запись для использования принтера, укажите в предыдущей конфигурации guest ok = yes. Это все, что здесь существует для настройки принтеров. Однако если потребуется сделать один или несколько принтеров доступными частным образом для одного или нескольких пользователей, можно определить отдельный раздел для каждого из пользователей. Например, если бы мы захотели создать доступ к частному принтеру (fancyjet) для пользователя с именем bigboss, мы создали бы конфигурацию: [fancyjet] comment = Big Boss Only Printer

valid users = bigboss path = /home/bigboss/fancyjet guest ok = no browseable = no writable = no printable = yes Параметр valid users позволяет определить разделенный пробелами список пользователей, которые имеют доступ к принтеру. Завершив изменение, протестируете файл /etc/smb.conf, перезапустите службу Santba и получите доступ к принтерам Linux из компьютеров1 Windows.

Использование интерактивного клиента Samba

Пакет Samba поставляется с программой, называемой smbclient. Она позволяет получить интерактивный доступ к ресурсам Samba. Например, если вам нужен доступ к общему диску в системе Windows из системы Linux, используйте программу smbclient: smbclient //WINDOWS-SERVER/reso'urce -U \ -Р

Например: smbclient //PLUTO/c -U kabir -P foobar Здесь smbclient используется для доступа к диску G в системе PLUTO от лица пользователя kabir. Если аутентификация прошла успешно — если PLUTO разрешает соединение, — smbclient выведет командную строку (как у клиента FTP) и позволит выполнить различные команды клиента FTP. Если вы хотите получить дополнительные сведения об этих командах, в командной строке введите «help» или знак вопроса. Для того чтобы перечислить доступные ресурсы Samba на удаленном компьютере, используйте smbclient. Например: smbclient -L reboot -U kabir Здесь параметр -L определяет, что сервер Samba будет запрашиваться с помощью имени пользователя kabir. Пример результата показан на листинге 15.2.

www.books-shop.com

Совместное использование файлов и принтеров с помощью Samba

Листинг 15.2. Пример вывода из smbclient Server time is Sat Feb 13 19:48:03 1999 Timezone is UTC-8.0 Password: Domain=[NITEC] OS =[Windows NT 4.0] Server=[NT LAN Manager 4.0] security=user Server =[REBOOT] User=[] Workgroup=[NITEC] Domain=[] Sharename

Type

ADMINS С C$ F

Disk Remote Admin Disk С Drive on PLUTO Disk Default share Disk Disk I PC Remote I PC Printer Okidata OL-600e Disk Printer Drivers Disk Disk

home I PCS OkidataO print$ sheila TEMP

Comment

This machine has a browse list: Server Comment PICASO PLUTO R2D2 REBOOT

Picaso Samba Server Nitec Laptop (r2d2)

This machine has a workgroup list: Workgroup

Master

NITEC

PLUTO

Программа smbclient может использоваться для определения того, какие ресурсы будут предоставляться другими системами Samba. Программа smbclient также позволяет посылать раскрывающиеся (pop-up) сообщения Windows на компьютеры Windows, которые поддерживают эту службу. Например: smbclient -M reboot

При выполнении подобной команды smbclient позволит вводить текстовые сообщения с клавиатуры, которые будут изображаться в окне сообщения на получающем компьютере Windows. Пример такого сообщения показан на рис. 15.7. Рис.15.7. Пример сообщения orsmbctient

Безопасность сервера Samba

Samba является прекрасным инструментом. Если правильно использовать эту службу, она может превратить смешанную операционную среду (Linux/

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

373

374

Глава .16

Windows) в однородную. Однако при неправильной конфигурации Samba может стать источником потенциальных дыр в системе защиты. Это особенно важно, если сервер Samba каким-либо образом соединен с Интернетом. Поэтому не рекомендуется соединять сервер Samba с Интернетом или инициировать службу Samba через Интернет. Рассмотрим некоторые меры безопасности, которые следует предпринять для уменьшения рисков, связанных с Samba. Ранее мы показали, как инициировать пароли с открытым текстом на более поздних версиях систем Windows 9x и NT. Это работает хорошо, но может не подходить для операционной среды локальных сетей или региональных сетей, где существует вероятность присутствия незаконных анализаторов пакетов TCP/IP. Другими словами, если есть причина подозревать, что сеть может быть уязвима для анализаторов пакетов, можно реализовать зашифрованные пароли. Аутентификация на основе зашифрованных паролей, которую допускает протокол 8MB, никогда не передает пароли между клиентом и сервером Samba. Это обеспечивает более высокую степень защиты и, следовательно, является необходимым в системах с высоким уровнем риска, где безопасность и секретность являются крайне важными. Существуют две возможности для использования зашифрованных паролей.

Использование сервера Windows NT в качестве сервера паролей

По умолчанию сервер Windows NT может предоставить службы зашифрованных паролей. Если в сети имеется сервер Windows NT, рассмотрите возможность преобразования его в сервер паролей. На сервере Windows NT можно централизовать все учетные записи пользователей. Тогда службы Samba будут поддерживаться с помощью зашифрованных паролей. Для использования сервера Windows NT в качестве сервера зашифрованных паролей, сделайте следующее: 1. Создайте учетную запись сервера Windows NT для каждого пользователя, которому нужен доступ к службе Samba. 2. Измените файл /etc/smb.conf так, чтобы параметр password server был задан по имени сервера Windows NT. Задайте также параметру security значение server. 3. Выполните команду testparm, чтобы гарантировать, что все конфигурационные строки в файле /etc/smb.conf являются синтаксически правильными. 4. Перезапустите службу Samba. Чтобы протестировать новую конфигурацию, используйте одну из учетных записей пользователей сервера Windows NT. Вы получите доступ к серверу Samba.

Использование зашифрованных паролей на сервере Samba

Пакет Samba, поставляемый вместе с Red Hat Linux, компилирован с поддержкой зашифрованных паролей, поэтому нет необходимости загружать исходный код Samba и компилировать его с поддержкой зашифрованных паролей. Все, что нужно сделать, чтобы инициировать зашифрованные пароли, это выполнить следующие действия: 1. Используйте сценарий mksmbpasswd.sh, поставляемый вместе с пакетом Samba и создающий файл подстановки паролей для /etc/passwd. Выполните команду: cat /etc/passwd | mksmbpasswd.sh > /et'c/smbpasswd

Это создаст специальный файл паролей, который будет иметь строки, такие как: root :0:ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ:ХХХХХХХХХХХХ ХХХХХХХХХХХХХХХХХХХХ:root:/root:/bin/tcsh

www.books-shop.com

Совместное использование файлов и принтеров с помощью Samba

375

2. Используйте программу smbpasswd для создания зашифрованных паролей Samba для каждого пользователя. Например, чтобы создать зашифрованный пароль Samba для пользователя с именем sheila, нужно выполнить: smbpasswd sheila

3. Когда пароли будут созданы, измените файл /etc/smb.conf так, чтобы в разделе [global] конфигурационного файла стояла строка: encrypt passwords = yes

4. Протестируйте новую конфигурацию, используя testparm. Если тест пройдет успешно, перезапустите службу Samba. Теперь мы готовы к тестированию службы Samba из систем Windows. Обратите внимание, что если реестр Windows менялся для использования паролей с открытым текстом, нужно будет удалить из реестра соответствующую запись, чтобы можно было снова использовать зашифрованные пароли.

www.books-shop.com

www.books-shop.com

Глава 16 Использование файловых серверов NFS

В этой главе: • Установка и конфигурирование сервера NFS • Установка и конфигурирование клиента NFS • Использование утилиты rdist для распространения файлов

предыдущей главе мы узнали о совместном использовании файлов системами, поддерживающими протокол SMB, такими как Red Hat Linux и Windows. Сетевая файловая система (NFS — Network File System) также решает проблему совместного использования файлов. Правда, сначала она была создана для управления семантикой UNIX. NFS была спроектирована, а затем реализована. Протокол SMB был сначала реализован, а позже документирован. С нашей точки зрения, SMB представляет собой архитектуру в стадии развития, а не то, что жестко спроектировано с самого начала. Поскольку действие совместного использования на основе пакета SMB связано с политикой Microsoft, все может разрушиться в любой момент, когда эта компания изменит какие-нибудь процедуры совместного использования. Например, пакеты обновления (номер 3 или выше) для Windows 4.0 разрушили службу Samba, так как изменились представления Microsoft о безопасности SMB. С другой стороны, служба NFS существует уже достаточно давно. Она была реализована практически на всех платформах UNIX. Если нужен общий доступ к диску или к другим ресурсам систем Red Hat Linux и Windows, используйте SMB, а если планируется общий доступ к дискам для нескольких систем UNIX, то лучше введите NFS.

www.books-shop.com

378

Глава 16

Установка сервера NFS

Программное обеспечение сервера NFS можно установить из пакета RРМ, поставляемого на компакт-диске Red Hat Linux. Например, для установки пакета сервера NFS для системы x86 Red Hat Linux выполните следующую команду из каталога /RedHat/RPMS компакт-диска: rpm -ivh nfs-server-version.is86.rpm

Пакет сервера NFS содержит демоны NFS и конфигурационные файлы, необходимые для превращения системы Red Hat Linux в сервер NFS. Однако NFS основывается на вызове удаленной процедуры (RPC — Remote Procedure Call), поэтому понадобится еще один пакет, называемый portmap. Если в системе еще нет этого пакета (проверьте это с помощью rpm -q portmap), тогда установите его с компакт-диска. Посмотрим теперь на то, как превратить систему Red Hat Linux в сервер NFS.

Конфигурирование сервера NFS

Сервер NFS нуждается в выполнении программы, называемой portmap (или rpc.portmap), которая обычно запускается с помощью mil во время начальной загрузки системы. Чтобы проверить, выполняется ли уже portmap, используйте команду: ps auxw | grep portmap

Когда устанавливается пакет portmap, он формирует сценарий portmap для ink в /etc/re.d/init.d. Этот сценарий должен автоматически связаться с используемым по умолчанию уровнем выполнения (обычно уровень выполнения 3 для многопользовательской системы) каталога гс. Отсутствие такой символьной ссылки потребует выполнения portmap вручную. В этом случае мы рекомендуем команду: In -s /etc/re.d/init.d/portmap /etc/re.d/rc3.d/S11portmap Эта команда создаст символьную ссылку, которая позволит Red Hat Linux автоматически выполнять программу portmap во время начальной загрузки. Кроме того, нужно иметь в каталоге /etc/rc.d/init.d сценарий nfs. Он используется для запуска демонов NFS (rpc.mountd, rpc.nfsd) во время начальной загрузки. Он также должен быть связан из используемого по умолчанию каталога уровня выполнения. В противном случае придется выполнять демоны вручную. Следующим шагом является создание файла /etc/exports, чтобы сообщить системе, какие файловые системы или каталоги необходимо будет экспортировать клиентам NFS. Синтаксис такого файла: / (параметры доступа) Пример файла /etc/exports: /www /www-data

wwwl.nitec.com(го) www2.nitec.com(ro) cgi.nitec.com(rw) fastcgi.nitec.com(rw)

Здесь каталог /www на сервере NFS экспортируется клиентам NFS wwwl. nitec. com и www2. nitec. com. Обе эти машины получили доступ к экспортированному каталогу только для чтения (го — read-only). Вторая строка используется для экспорта каталога /www-data системам клиентов c g i . n i t e c . c o m и fastcgi. nitec. com. Обе эти системы имеют доступ для чтения/записи (rw — read-write) к экспортированному каталогу. Можно также определить клиентов NFS любым из обычно используемых способов. Клиент NFS может быть определен через IP-адрес в файле /etc/export. Например: /www

206.171.50.51(го)

www.books-shop.com

Использование файловых серверов NFS

379

Здесь машине с IP-адресом 206.171.50.51 предоставляется доступ NFS только для чтения (го) к каталогу /www. Можно определить целую IP- сеть, как показано в следующем примере: 206.171.50.48/255.255.255.240 (rw) Целой сети 206.171.50.48 (14 IP-адресов в диапазоне 206.171.50.48206.171.50.63) были предоставлены полномочия читать и записывать в корневой каталог (root) файловой системы сервера NFS. Можно также определить несколько хостов, используя метасимволы. Например: /рс

*.nitec.com (rw)

Здесь все хосты в домене nitec.com могут получить доступ к каталогу /рс на сервере NFS. Символ «?» служит обозначением одного произвольного символа. Если нужно экспортировать файловую систему или каталог всем клиентам NFS в мире, можно опустить список клиентов NFS в строке, используемой для экспорта. Например:

/pub

(го)

Каталог /pub экспортируется любому клиенту NFS. Теперь посмотрим на обычно используемые параметры доступа.

Предоставление доступа к экспортируемому каталогу только для чтения

ЕСЛИ нужно разрешить доступ только для чтения к любому каталогу или файловой системе, которые экспортируются клиентам сервером NFS, можно использовать «го». Например: /master-data production.nitec.com (го) Здесь система клиента p r o d u c t i o n . n i t e c . c o m имеет доступ только для чтения к каталогу /master-data.

Предоставление доступа к экспортируемому каталогу для чтения и записи

ЕСЛИ необходимо предоставить доступ для чтения и записи к любом;, каталогу или файловой системе, которые экспортируются клиентам сервером NFS, можно использовать «rw». Например: /intranet *.nitec.com (rw) Все клиенты NFS в домене nitec. com имеют доступ для чтения и записи к каталогу /intranet.

Запрещение доступа к определенном/ каталогу

Когда экспортирована вся файловая система или каталог, подкаталоги ниже экспортируемого каталога автоматически доступны с помощью тех же параметров доступа. Однако иногда нужно предоставить доступ к каталогу с именем /pub, но не к каталогу с именем /pub/staff-only. В таком случае придется использовать параметр доступа «noaccess», как показано ниже: /pub . weblab-??.nitec.com (го) /pub/staff-only weblab-??.nitec.com (noaccess) Здесь все компьютеры weblab-??. nitec. com (где ?? являются любыми двумя символами) имеют доступ только для чтения к каталогу /pub, но они не получают доступ к каталогу /pub/staff-only.

Отображение пользователей между сервером NFS и клиентами

Одним из вопросов, который возникает после настройки сервера NFS, становится отображение между сервером NFS и клиентами. Предположим, что экспортирован каталог с именем /www, которым владеет пользователь и

www.books-shop.com

380

Глава 16

группа с именами webguru и webdev соответственно. Клиент NFS, который может смонтировать этот каталог, должен будет иметь пользователя с именем webguru или группу webdev, чтобы обратиться к каталогу. Это не всегда нужно. В частности, иногда требуется, чтобы учетная запись root клиента NFS имела полномочия root в смонтированном каталоге NFS. Именно поэтому сервер NFS по умолчанию использует параметр, называемый root_squash. Он обычно отображает пользователя root (UID = 0) и группу root (GID = 0) в пользователя nobody (никто) клиентской системы. Можно отключить используемое по умолчанию отображение пользователя и группы root в «nobody», добавив no_root_squash в строки описания экспорта. Однако мы не рекомендуем это делать. Если нужно отобразить пару UID/GID для root в определенные UID/GID, можно использовать параметры доступа anonuid и anongid. Например: /proj

*.nitec.com

(anonuid=500 anongid=666)

Здесь определены anonuid и anongid для отображения root в UID 500 и GID 666. Если требуется отобразить все пары UID/GID в анонимную пару UID/GID, можно использовать параметр all_squash. Например: /proj

*.nitec.com (anonuid=500 anongid=566 all_squash)

Каталог /proj экспортируется всем хостам в домене nitec. com, но все обращения за доступом осуществляются с правами UID 500 и GID 666. Если нужно определить список UID и GID, которые необходимо отобразить с помощью анонимной пары UID/GID, можно использовать параметры squash_uids и squash_gids. Например: /proj *.nitec.com (anonuid=500 anongid=666 \ squash_uids=0- 100 squash_gids=0-100) Все UID и GID в диапазоне 0-100 отображаются с помощью анонимных UID 500 и GID 666. Можно также определить внешний файл отображения для описания предоставляемых клиентом NFS UID и GID в то, что нужно применить. Отображение определяется с помощью параметра map_static. Например: /proj *.nitec.com (map_static=/etc/nfs.map)

Здесь каталог /proj экспортируется всем хостам nitec.com, но все предоставляемые клиентом NFS UID и GID отображаются с помощью файла /etc/nfs.map. Пример подобного файла отображения: uid gid uid gid

0-100 0-100 500 666 500 777

# # # #

втиснуть все удаленные uid в диапазон 0-100 втиснуть все удаленные gid в диапазон 0-100 отобразить удаленный uid 500 на локальный uid 666 отобразить удаленный gid 500 на локальный gid 777

Мы указали все обычно используемые параметры создания файла /etc/export. Однако всякий раз, когда происходят изменения в файле /etc/export, необходимо сообщить об этом демонам NFS. Для перезапуска данных демонов может использоваться сценарий с именем exportfs: /usr/sbin/exportfs Чтобы убедиться, что rpc.mountd и rpc.nfsd выполняются правильно, задайте программу с именем rpcinfo следующим образом: rpcinfo -p

Результат работы выглядит следующим образом: program vers 100000 2 100000 2 100005 1

proto tcp udp udp

port 111 111 635

rpcbind rpcbind mountd

www.books-shop.com

381

Использование файловых серверов NFS

100005 100005 100005 100003 100003

2 1 2 2 2

udp tcp tcp udp tcp

635 635 635 2049 2049

mountd mountd mountd nfs nfs

Вывод свидетельствует о том, что mountd и nfsd объявили свои службы и работают. В этот момент сервер NFS настроен. Перейдем к настройке хостов клиентов NFS.

Установка клиента NFS

ЕСЛИ системы Red Hat Linux являются клиентами NFS, то на них необходимо установить программное обеспечение. Программное обеспечение клиента NFS поставляется в пакете RPM. Нужно установить его с компакт-диска Red Hat Linux. Например, для установки пакета клиента NFS для системы х86 Red Hat Linux выполните следующую команду из каталога /RedHat/RPMS на компакт-диске: rpm -ivh nfs-client-version.1386.rpm

Когда пакет клиента NFS установлен, все готово к конфигурированию. Предположим, что конфигурируются клиенты NFS на основе Red • Linux. Если конфигурируется клиент NFS на другой платформе, необходимо дочитать соответствующую документацию.

Конфигурирование клиента NFS

Пакет клиента NFS поставляется с программой, называемой showmount. Она предоставляет информацию об экспортированных файловых системах или каталогах на сервере NFS. Выполните эту команду, используя в качестве аргумента IP-адрес или имя хоста сервера NFS. В этом случае вы увидите, каким хостам предоставляют доступ к экспортированным файловым системам или каталогам. Например: showmount

nfs-server.nitec.com

Этой командой выводится список клиентов NFS, которым разрешено импортировать файлы из nf s-se rve r. nitec. com. Выполнив эту команду с параметром -е, вы увидите список экспорта сервера NFS, а задав команду с параметром -а, — клиентов, которым разрешено импортировать файловые системы или каталоги. Если команда showmount показывает,- что конфигурируемому клиенту NFS разрешено импортировать файловую систему или каталог, можно продолжить конфигурацию клиента. Если в списке нет имени хогга или IP-адреса текущего клиента NFS, необходимо изменить файл /etc /exports на сервере NFS, чтобы разрешить этому клиенту доступ к тому каталогу или файловой системе, которые планируется импортировать. Чтобы импортировать каталог или файловую систему из сервера NFS, ее необходимо смонтировать, используя стандартную команду mount. Например, чтобы смонтировать каталог с именем /www из сервера NFS с именем nfs-server. nitec. com, можно использовать команду mount: mount nfs-server.nitec.com:/www

/www

-t nfs

Эта команда монтирует каталог /www системы n f s - s e r v e r . n i t e c . c o m в /www, как файловую систему nfs, которая определяется с помощью параметра -t. Однако если придется постоянно монтировать файловую систему или каталог NFS во время начальной загрузки, то необходимо будет добавить следующую строку в файл /etc/fstab: nfs-server.nitec.com:/www /www nfs

Чтобы убедиться, что клиент NFS будет автоматически монтировать файловые системы и каталоги NFS во время начальной загрузки, необходимо проверить, существует ли символьная ссылка (начинающаяся с Sxx, где хх

www.books-shop.com

382

Глава 16

является двузначным числом) к сценарию /etc/re.d/init.d/nfsfs в каталоге rс, используемого по умолчанию уровня выполнения. Демонтирование файловой системы NFS и демонтирование локальной файловой системы происходит одинаково. Когда смонтированы файлы, экспортированные сервером NFS в системе клиента NFS, пользователи могут немедленно начать использовать полученные файловые системы или каталоги. Прежде чем предоставить пользователям доступ к экспортированным ресурсам NFS, рассмотрите следующие вопросы безопасности.

Безопасность сервера NFS

Команду portmap в комбинации с rpc.nfsd можно обмануть и получить доступ к файлам на серверах NFS без всяких полномочий. Команда portmap, которую использует Linux, является защищенной от атак и может быть сделана еще более безопасной при добавлении такой строки в файл /etc/hosts.deny: portmap: ALL

Система будет отвергать доступ к portmap для всех. Теперь измените файл /etc/hosts.allow: portmap:

192.168.1.0/255.255.255.0

Это разрешит всем хостам из сети 192.168.1.0 доступ к программам, управляемым с помощью portmap (например, nfsd и mountd). 1 Никогда не используйте имена хостов в строке portmap * в /etc/hosts.allow, так как указание поиска имен хостов может неявно вызвать активность portmap, что приведет к циклическому просмотру имен хостов. Еще один вопрос безопасности на серверной стороне состоит в разрешении учетной записи root на клиенте использоваться в качестве root на сервере. По умолчанию Linux запрещает root на клиентской стороне NFS применяться в качестве root на серверной стороне. Другими словами, экспортированный файл, которым на сервере владеет root, нельзя модифицировать клиентским пользователем root. Чтобы явно определить это правило, файл /etc/exports может быть модифицирован следующим образом: /www wwwl. nitec. com(rw,

root_squasrt)

Если пользователь с UID 0 (пользователь root) на клиенте пытается получить доступ (читать, писать или удалить) к файловой системе, сервер подставляет UID учетную запись «nobody» сервера. Это означает, что пользователь root на клиенте не может получить доступ или изменить файлы, к которым только root на сервере может получить доступ или сделать в них изменения. Чтобы предоставить права доступа root к файловой системе NFS, используйте параметр no_root_squash. Обратите внимание, что усилить безопасность клиента NFS можно за счет недоверия серверу NFS. Например, с помощью параметра nosuid можно за- _ претить программам suid работать вне файловой системы NFS. Это означает, что пользователь root сервера не сможет выполнить программу suid-root на файловой системе, зарегистрироваться на клиенте как обычный пользователь и затем использовать программу suid-root, чтобы также стать root на клиенте. Можно полностью запретить выполнение файлов на смонтированной файловой системе с помощью параметра поехес. Разрешено ввести эти параметры в столбце параметров строки, которая описывает точку монтирования NFS в файле /etc/fstab. Мы узнали, как использовать NFS, чтобы предоставить одновременный доступ к файлам множеству хостов. Рассмотрим ситуацию, когда оправдано применение NFS. Предположим, что нужно распространить множество файлов и каталогов на одну или несколько систем Linux, так чтобы каждая из них

www.books-shop.com

Использование файловых серверов NFS

имела собственную копию файлов. NFS здесь бесполезна, так как если сделать эти файлы доступными через NFS, все клиентские системы будут совместно использовать единственную копию. Этот пример часто встречается в местах, подобных университетской лаборатории по вычислительной технике. В большинстве случаев необходимо, чтобы студенты имели собственные копии файлов. Кроме того, надо иметь возможность заменить измененные файлы на первоначальные с главного сервера для следующей партии студентов. Протоколы 8MB и NSF будут бесполезны в подобной ситуации. Вам понадобится программа rdist.

Распространение файлов с помощью rdist

Программа rdist позволяет поддерживать идентичные копии файлов на множестве хостов. Она использует либо вызовы функции rcmd, либо удаленную оболочку (rsh) для получения доступа к каждому из хостов-получателей. Простейший способ заставить работать rdist состоит в введении общей учетной записи на всех вовлеченных машинах и создании файлов .rhosts для каждого клиента, чтобы обычный пользователь мог выполнить сеансы rsh с главным хостом. Рассмотрим задачу на конкретном примере. Предположим, что необходимо создать операционную среду распространения файлов, где главный компьютер master-an-university.edu содержит главную копию файла, а двум хостам, называемым student1.an-university.edu и student2.an-university.edu, необходимо ежедневно получать свежие копии файлов. Кроме того, представим, что каждый из этих трех компьютеров имеет учетную запись обычного пользователя с именем updater. Вот как создается такая операционная среда. На каждом из студенческих компьютеров поместите файл .rhosts в домашний каталог пользователя updater. Этот файл содержит единственную строку следующего вида: master.an-university.edu

Файл должен принадлежать пользователю root и иметь право доступа только для чтения для всех остальных. Это позволяет пользователю updater в m a s t e r . a n - u n i v e r s i t y . e d u выполнять удаленные сеансы оболочки на каждой студенческой системе. Следующий шаг состоит в создании конфигурационного файла распространения файлов для rdist. Этот файл часто называется distfile. Файл distfile является текстовым файлом с инструкциями для rdist о том, как выполнить задачу распространения файлов. Листинг 16.1 показывает файл distfile — rdist_distfile. Листинг 16.1. Файл rdist_distfile

# # Distfile для rdist #

# Этот файл используется для распространения файлов с главной # an-university.edu на системы student[12].an-university.edu # # $Author$ ([email protected]) # $Version$ # $0ate$ # $Id$ # Перечислите все хосты, которые необходимо обновлять, # Список создается с помощью записей @. # где каждая запись отделяется символом пробела. # HOSTS = ([email protected] \ [email protected]) # Перечислите каталоги, которые требуют обновления.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

383

384

Главе 16

# FILES = ( /CSC101) # перечислите каталоги, которые необходимо исключить # из процесса обновления. EXCLUDE_OIR = ( /csclOt/instructor /csc101/secret) # Здесь находятся команды: # Установить все каталоги, перечисленные в FILES для # всех хостов, перечисленных в HOSTS, за исключением # каталогов, которые содержатся в EXCLUDE_OIR # $(FILES) -> $(HOSTS ) install ; except $(EXCLUDE_DIR);

Это очень простой файл distfile. Он определяет переменную с именем HOSTS, которая имеет две записи в качестве значений: updater@student1. an-university.edu и [email protected]. Записи заставляют rdist использовать учетную запись пользователя updater для соединения как в student1.an-university.edu, так и в s t u d e n t 2 . a n - u n i v e r s i t y . e d u . Другая переменная FILES определяет каталоги для распространения rdist. Здесь будет распространяться только каталог /csclOl. Перейдем к третьей переменной — EXCLUDE_DIR. Эта переменная служит для перечисления всех файлов и каталогов, которые мы хотим исключить из числа распространяемых. В примере установлены значения /csclOl/instractors (этот каталог может содержать файлы, к которым должен иметь доступ только преподаватель) и /cslOl/secret (каталог, к которому не должны иметь доступ студенты). Конец файла описывает простую команду: $(FILES) -> $(HOSTS) install ; except $(EXCLUDE_DIR); Эта команда берет все файлы и каталоги, на которые указывает переменная FILES и устанавливает их на хосты, введенные переменной HOSTS. Она также приказывает rdist исключить файлы и каталоги, определенные переменной EXCLUDE_DIR. Чтобы выполнить rdist (как updater) из командной строки, сделайте следующее: 1. Зарегистрируйтесь с именем updater. Если это не root на главной системе, можно также использовать su, чтобы изменить UID на updater. 2. Выполните команду как updater: /usr/bin/rdist -p /usr/sbin/rdistd - oremove.quiet \ -f /usr/local/rdist/ rdist_distfile

Параметр -р определяет местоположение программы rdistd, необходимой для rdist. Параметр -о указывает на то, что за ним должны последовать один или несколько параметров, в данном случае remove и quiet. Параметр remove приказывает rdist удалить любые посторонние файлы, находящиеся в получающих каталогах клиентской системы. Это обеспечивает простой метод поддержки идентичных копий файлов на каждой студенческой системе. Параметр quiet приказывает rdist сократить до минимума выходные сообщения во время выполнения операции. Последний параметр -f определяет местоположение файла distfile. Чтобы избежать ошибки при выполнении этой команды, создайте сценарий sh, называемый rdistribute.sh (см. листинг 16.2). Листинг 16.2. Сценарий rdistribute.sh

#!/bin/sh #

www.books-shop.com

t

Использование файловых серверов NFS

385

# Этот сценарий выполняет rdist для обновления Web-серверов через # немаршрутизируемую локальную сеть an-university.edu. Такой сценарий # выполняется сгоп через фиксированный интервал времени. # # /etc/re.d/rc.local запускает сценарий для удаления оставшихся # временных файлов, которые могли бы сохраниться после выключения # системы.. Этот процесс также удаляет файл журнала. # # $Author$ ([email protected]) # $Version$ ' ~ # $Id$ # $Date$ # SStatus # Если сценарий вызывается с # аргументом, тогда case "$1" in boot) # так как аргументом является 'boot', то сценарий будет # вызываться при запуске системы, поэтому удалите все # старые файлы блокировки и журналы. echo -n "Cleaning up rdistribute.sh tmp files: " rm -f /tmp/rdist.lck rm -f /tmp/rdist.log echo "complete." exit 0; # так как аргументом является 'restart', то сценарию # необходимо сделать очистку, как если бы система # просто выполняла начальную загрузку. restart) $0 boot esac # Если существует файл блокировки, тогда ничего не делайте, if [ -f /tmp/rdist.Ick ]; then exit 0 fi # Иначе создайте файл блокировки, используя /bin/touch/bin/touch /tmp/rdist.lck # Выполните rdist /usr/bin/rdist -p /usr/sbin/rdist oremove, nochkgroup, nochkmode, nochkowner, quiet -f /usr/local/rdist/rdist_distfile # Удалите файл блокировки rm -f /tmp/rdist.lck # Запишите время и дату в файл журнала echo 'date' > /tmp/rdist.log # Выйти из сценария exit О

www.books-shop.com

386

Глава 16

Сценарий вполне разумен, чтобы определить выполняющийся процесс rdistribute.sh, используя файл блокировки, который может сообщить о том, что предыдущий rdistribute.sh еще продолжается. Это может проявиться, когда большое число файлов обновляется на множестве серверов. Сценарий также принимает аргумент, называемый boot, который может использоваться для очистки файла блокировки и файла журнала, которые он создает во время процесса загрузки. Сценарий должен вызываться из /etc/re.d/rc.local следующим образом: /usr/local/rdistribute.sh

boot

Подобный сценарий может быть спланирован для выполнения в виде записи сгоп в /etc/crontab. Например, чтобы выполнять этот сценарий каждый час, в /etc/crontab может быть добавлена запись сгоп: 01 * * * * updater /usr/local/rdistribute.sh- > /dev/null Демон сгоп будет выполнять сценарий от лица updater. Иначе можно связаться с rdistribute.sh из /etc/cron.hourly (или /etc/cron.daily, /etc/cron. monthly и т.д.), как это будет удобнее.

www.books-shop.com

Глава 17 Служба базы данных SQL

В этой главе: • Установка и конфигурирование сервера базы данных SQL • Доступ к серверу SQL с помощью клиента SQL из командной строки • Доступ к базам данных SQL из Web

аждому человеку необходимо хранить и сортировать данные (например, на большом складе или в системе учета телефонных звонков). Система Red Hat Linux предоставляет быстрый и простой доступ к любому числу баз данных, начиная от неструктурированных файлов и до полноценных реляционных баз данных. Можно написать простые программы CGI, чтобы реализовать доступ к базе данных на Web-сайте, или использовать простые команды для обращения к базе данных за нужной информацией. Структурированный язык запросов (SQL) является языком коммуникации с сервером базы данных, который поможет в поиске необходимой информации. В этой главе рассматриваются установка и манипулирование информацией внутри базы данных SQL, а также описывается несколько простых служебных программ.

Понятие SQL

Структурированный язык запросов — это язык описания взаимодействующих запросов к серверу базы данных для сохранения или извлечения необходимых пользователю данных. Термин «запрос» в SQL часто вводит людей в заблуждение, поскольку неоднозначен. С помощью SQL можно создавать таблицы данных, манипулировать ими, извлекать информацию и делать вычисления на основе полученных сведений. SQL существует не только для того, чтобы задавать вопросы о статической базе данных.

www.books-shop.com

388

Глава 17

Модель SQL состоит из баз данных, таблиц, строк, полей и элементов. Все множество данных называется базой данных. Каждый Пользователь системы может иметь отдельную базу данных. Базы данных содержат таблицы. Таблицы можно представлять себе как столбцы типов данных и строки данных (см. таблицу 17.1), не имеющие двух одинаковых строк. [Таблица 17.1. Образец таблицы SQL: Заказчики

Имя

Адрес

Телефон

Идентификатор (ID)

Brian Smith

321 Lincoln Ln..

555-4444

1

Mary Morris

433 Washington St.

555-7777

2

Linda Chadwick

776 Monroe Dr.

555-8833

3

Brian Smith '

931 Jefferson R.

555-9090

4

Можно заметить две строки с именем «Brian Smith». Когда мы говорим, что строки не должны быть одинаковыми, мы имеем в виду все данные в строке, а не просто одну ячейку. Два человека могут иметь одинаковые имена и даже одинаковые адреса и телефонные номера. Именно поэтому введено поле идентификатора (ID). Имея уникальный номер идентификатора в столбце ID, мы можем гарантировать, что никогда две строки не будут в точности одинаковыми. Для того чтобы найти и вывести информацию из базы данных, необходимо выучить простые команды. Люди быстро учатся извлекать нужную информацию из базы данных SQL. Рассмотрим простую команду: select name, address, telephone from table friends where birthyear > 1950; Она выводит таблицу данных:

+ I + I | I +

+ + | address | telephone + + Kabir | 123 Any Street | 555-3547 Terry | 77 Lucky Lane | 555-3133 Ian | 444 Monkey Ave ] 555-6302 + + name

+ | + | | | +

3 rows in set (0.02 sec) Данные не только представлены в легко читаемом формате, но и операция выполнена очень быстро. За 0.02 с база данных предоставила нам в удобной таблице именно ту информацию, которую мы запрашивали. SQL является моделью реляционной базы данных. Это означает, что она не только хранит таблицы информации, но может создавать связи (отношения) между таблицами. Легче всего понять подобный принцип на простом примере. Представьте себе, что существует магазин почтовых заказов. Мы имеем следующие таблицы данных: • «Products» содержит имена, описания и цены всех продуктов, вместе с уникальным номером ID продукта для каждого из них. • «Customers» имеет имя, адрес и номер телефона каждого заказчика, вместе с уникальным номером заказчика. • «Invoices» содержит номер счета, номер заказчика и номер ID каждого продукта, который заказал заказчик. Ключом к реляционным аспектам является таблица Invoices. В действительности информация хранится не в том виде, в котором она появляется на печатном бланке счета. Сохраняются только номера ID данных, по которым их можно найти в других таблицах. В противном случае сохранялась бы одна и та же информация в нескольких разных местах.

www.books-shop.com

Служба базы данных SQL

389

SQL не является ответом на все вопросы. SQL не всегда лучшее или разумное решение. Для небольшого объема данных достаточно текстового файла. В этом случае можно попробовать использовать файлы DBM.

Установка и конфигурирование сервера SQL: MySQL

Для Red Hat Linux существует много серверов SQL, такие как Oracle, Postgres и MySQL. Мы выбрали MySQL поскольку: • Является бесплатным для большинства пользователей. MySQL ничего не стоит до тех пор, пока не придется продавать кому-нибудь MySQL, программный продукт со встроенной базой MySQL, либо устанавливать и поддерживать MySQL на клиентской стороне. Если есть сомнения о нарушении требований лицензии, обратитесь на Web-сайт по адресу http://www.mysql.com/. • Поддерживает множество интерфейсов программирования, включая С, C++, Java, Perl и Python. Бесчисленны пути для модификации программ и настройки их на конкретные требования. • Использует очень быстрые методы соединения таблиц информации друг с другом. Применяя метод, называемый одношаговым мультисвязыванием (one-sweep multijoin), MySQL является очень эффективным при сборе информации, которая одновременно запрашивается из множества различных таблиц. • Широко используется. Велика вероятность, что другие разработчики сделали что-то похожее на то, что предстоит сделать. Для решения появившихся у вас вопросов или проблем обращайтесь за помощью к тем, кто знаком с этим методом. Для вас важно получить информацию о том, что не делать. Это убережет вас от повторения ошибок, которые уже допустили другие.

Где найти MySQL

MySQL доступен в Интернете повсюду. Лучшим способом получить MySQL будет посещение h t t p : / / w w w . m y s q ! . сот/ и поиск ближайшего зеркального узла. Существуют две возможности: можно скомпилировать пользовательскую копию MySQL из пакетов RPM исходного кода или загрузить двоичный дистрибутив. Мы предполагаем, что будет использоваться двоичный дистрибутив. Нам нужно получить как пакет RPM, содержащий серверную программу MySQL, так и пакет RPM с клиентскими программами. Чтобы использовать примеры программ из этой главы, необходимо получить на h t t p : //www. mysql. огд/download. htm пакет RPM, содержащий подключаемые файлы и библиотеки, модуль Perl DBI и модули Perl драйверов DBD::msql.

Установка пакетов fcPM MySQL

Для установки MySQL из пакета RPM выполните rpm -i mysql-versian.,rpm, где mysql-version.rpm является именем пакета RPM, содержащим сервер MySQL. Затем выполните rpm -i mysql-client-version.ipm, снова указав имя пакета RPM клиента, который используется. Сделайте то же самое для пакета RPM подключаемых файлов и двоичных библиотек. Модули Perl необходимо ввести после успешной установки сервера MySQL, так как во время установки драйвера DBD::mysql обычно проводится проверка подключения к базе. Если в системе Linux указан стандартный Perl, который поставляется вместе с модулем CPAN, установка DBI и DBD::mysql становится простой задачей. Выполните: perl -MCPAN -e shell

Используйте команды install DBI и install DBD::mysql из оболочки CPAN для установки этих модулей.

www.books-shop.com

390

Главе? 17

Доступ к серверу SQL

Когда будет установлен пакет RPM сервера MySQL, сервер станет запускаться автоматически при загрузке системы. В каталоге /etc/rc.d/init.d находится файл с именем mysql, который может использоваться для запуска и остановки сервера MySQL с помощью следующих команд: /etc/гс.d/init.d/mysql start /etc/re.d/init.d/mysql stop Установка RPM приведет к автоматическому запуску сервера. Чтобы убедиться в успешности исполнения сервера MySQL, можно сделать тестовый запрос (ping) с помощью команды: /usr/bin/mysqladmin ping

Если сервер включен и работает, должно вернуться ответное сообщение «mysql is alive». Если ответ не будет получен, воспользуйтесь командой /etc/re.d/init.d/mysql start, чтобы запустить сервер. Как только сервер запущен, необходимо выполнить следующую команду, чтобы создать некоторые требуемые таблицы: /usr/bin/mysql_install_db По умолчанию пароль для административной учетной записи сервера (root) не задан, поэтому используйте такую команду для указания пароля: /usr/bin/mysqladmin -u

root

Выполните клиент MySQL.

Первоначальный запуск клиента MySQL

Можно запустить программу-клиента MySQL, введя в командной строке:

mysql -u username -p Username является именем пользователя, которое используется для доступа к серверу SQL. Если требуется пароль, будет предложено его ввести. На экране должно появиться приглашение: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 3.22.15 Type 'help' for help. mys'ql> Теперь можно начинать создание структуры собственной базы данных.

Создание базы данных

В данный момент установлено программное обеспечение, но пока нет никаких данных. Начнем с создания базы данных store. Синтаксис операции следующий: create database store; В ответ должно появиться сообщение: Query OK, 1 row affected (0.02 sec) Этот общий ответ показывает, что команда была выполнена. Можно подтвердить этот результат командой: show databases; Если это первая из созданных база данных, появится следующее: +

+

] Database | +

+

I store +

| +

1 row in set (0.00 sec)

www.books-shop.com

Служба базы данных SQL

391

Сформирована пустая база данных с именем «store», которая не содержит данных. Можно создавать таблицы, которые будут хранить данные. Нам необходимо определить не только имена всех столбцов, но также типы данных, которые они будут хранить. Сначала определим базу данных, которую мы собираемся использовать. Выполните команду: Use store Затем введем следующую команду, чтобы создать первую таблицу: create table customers ( name CHAR(40)

NOT NULL,

address CHAR(80), telephone CHAR(13), id

INT

AUTO_INCREMENT. PRIMARY

KEY);

Рассмотрим каждую из этих строк. create table customers ( Эта строка сообщает серверу SQL, что мы пытаемся создать таблицу с именем «customers». name CHAR(40) NOT NULL,

Создает столбец с именем «name», который будет содержать 40 символов данных в элементе. Кроме того, этот столбец никогда не будет пустым. address CHAR(80'), Создает столбец с именем «address», который будет содержать 80 символов данных в элементе. telephone CHAR(13),

Создает столбец с именем «telephone», который будет содержать 13 символов. Возникает вопрос, почему мы задаем символьное поле, вместо того чтобы задать его как числовое. Так как мы обычно не складываем телефонные номера и не выполняем с ними математические функции, то мы можем использовать их просто как любые другие символьные данные. Кроме того, это облегчает работу с символами тире, которые люди часто вставляют в телефонные номера. id

INT

AUTOJNCREMENT

PRIMARY

KEY);

Мы создаем столбец с именем id, который будет содержать целые числа (INT означает целое число). Кроме того, этот столбец является первичным ключом (primary key). Это означает, что информация, хранящаяся в таком столбце, определяет порядок хранения информации в базе данных. Когда мы считываем информацию из базы данных, меньшие номера ID будут появляться раньше больших номеров, если только не определяется иной метод упорядочивания данных. Теперь, когда известны основы создания простой базы данных SQL на сервере MySQL, можно начать взаимодействие с базой данных с помощью средств, не связанных с клиентом MySQL.

Взаимодействие с сервером SQL с помощью сценариев

Мощь Linux становится очевидна, когда мы видим, как легко писать небольшие сценарии для взаимодействия с базой данных SQL. Любая команда, введенная в командной строке MySQL, может также передаваться из программы или сценария. Это позволяет писать программы для выбора, обновления, удаления или вставки информации в базу данных. Можно даже писать программы для создания таблиц. В этом разделе мы покажем несколько примеров простых сценариев для считывания, записи и изменения данных в таблице.

www.books-shop.com

392

Глава 17

Использование модуля DBI в качестве уровня абстрагирования

Эти программы написаны на языке сценариев Perl. Perl — прекрасное средство для задач SQL, так как он прост и эффективен. Все сценарии будут использовать модуль DBI для обработки взаимодействия с базой данных. Модуль DBI служит уровнем абстрагирования (см. рис. 17.1). Это означает, что данные запрашиваются в модуле DBI, который обрабатывает все операции, специфические для процессора базы данных. Вам не надо изучать незначительные отличия между разными реализациями SQL. С помощью DBI можно перейти на другую базу данных. Если нужны свойства или производительность, превышающие возможности MySQL, достаточно установить новую базу данных и изменить одно слово в сценарии на Perl. Мы попадаем в совершенно иную операционную среду. DBI написан Дэном Бансом (Dan Bunce) и может быть загружен из h t t p : / / c p a n . p e r l . o r g / . Для взаимодействия с пользователем через Web-браузер мы будем использовать модуль CGI (CGI.pm). Это удобное средство для создания сценариев CGI; оно делает код легче для чтения и избавляет от необходимости База данных SQL писать все с самого начала. Модуль написан Линкольном Стейном (Lincoln Stein) и может быть загружен из h t t p : / / c p a n . p e r l . o r g / . Рассмотрим несколько сценариев, которые взаимодействуют с сервером MySQL с помощью упомянутых модулей. Взаимодействие с SQL из командной строки UNIX Создадим простую базу данных test, содержащую единственную таблицу friends для хранения контактной информации: имени, номера телефона, адреса и возраста. Для создания этой базы данных и таблицы, сделаем следующее: • Используем команду mysql -u -р для запуска клиента MySQL. " В командной строке mysql введем create database test; для создания базы данных test. Затем введем use test для запуска этой базы данных. • Зададим следующие строки для создания таблицы с именем friends: create table friends ( name CHAR(40) NOT NULL, phone CHAR(13), address CHAR(80),

age INT, id INT AUTO INCREMENT PRIMARY

KEY);

• Введем команду describe friends;, чтобы увидеть описание таблицы, которое должно выглядеть как показано ниже:

5 rows in set (0.01 sec) • Вставим некоторые данные. Вот пример команды вставки SQL: insert into friends (id, name, phone, address, age) values ("0", "Joe Gunchy", "555-5555", "1234 University Ave,

www.books-shop.com

Служба базы данных SQL

393

Sacramento, CA 95555", "21");

• После ввода нескольких записей показанной командой insert можно выйти из клиента по команде exit;. Листинг 17.1 показывает относительно простой сценарий для извлечения и печати информации, хранящейся в базе данных. Эта программа предполагает, что существует пользователь с именем terry и паролем asecretl. Придется изменить секцию определений, чтобы согласовать учетную запись с полномочиями доступа к базе данных. Листинг 17.1. Файл cmdline.select.pl #!/usr/bin/perl # Сценарий командной строки для выборки из базы данных SQL

use DBI

# Определения - Вам необходимо будет здесь изменить my Stable = "friends"; mу $db = "test"; mу $user = "terry"; my Spassword = "asecretl"; # Конец определений # Сообщите сценарию, что мы будем использовать # базу данных MySQL my $drh = DBI->install_driver( 'mysql' ); # Установите соединение с базой данных my $dbh = $drh->connect($db, $user, $password); # Простая проверка, чтобы увидеть, соединились ли мы die "Cannot connect: $DBI::errstr\n" unless $dbh; # Получить входящую информацию от пользователя print "Name: "; my Sname = ; chomp($name); print "\n"; # Создать и выполнить оператор SQL my SSQLstatement = "select name, phone, address, age from Stable where name = \"$name\""; my $sth = $dbh->prepare($SQLstatement); my Showmany = $sth->execute; die "Couldn't match Sname in database\n" if Showmany eq "OEO"; print "Showmany matches found in database\n\n"; printf ("%17.14s %13.9s %15.12s %s \n", "NAME", "PHONE", "ADDRESS", "AGE"); # цикл по всем соответствиям и их печать for (my $i = 0; $i < Showmany; $i++) { my (SSQLname, SSQLphone, SSQLaddress, SSQLage) = $sth->fetchrow_array; printf ("%17.14s %13.9s %15.12s %2d \n", SSQLname, SSQLphone, SSQLaddress, SSQLage); } Эта программа покажет приглашение для ввода имени и запросов к таблице friends в базе данных test, используя следующий оператор выборки SQL: select name, phone, address, age from Stable where name = \"$name\"";

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

Глава 17

394

Переменная $name содержит имя, которое вводится в приглашении команды. Например, когда эта программа выполняется следующим образом: \

./cnidline.select.pl Name: brian smith она формирует: 1 matches found in database NAME

Brian Smith

PHONE

555-2453

ADDRESS

AGE

1915 11th St

23

Эта программа не совершенна. Нужно вводить полное имя вашего друга, чтобы найти запись в базе данных. Единственный случай, когда будет найдено более одной записи, возникает для нескольких записей с именем Brian Smith. Это не поможет в работе. Сценарий на листинге 17.2 дает нам больше гибкости. Мы можем найти все подходящие записи для частичного имени, вместо предоставления полного имени. Листинг 17.2. Файл cmdline.select.revised.pl #!/usr/bin/perl # Сценарий командной строки для выборки из базы данных SQL # Пересмотрен, чтобы находить соответствие подстрокам use DBI;

# Определения - Вам будет нужно здесь изменить my Stable = "friends"; mу $db = "test"; mу $user = "terry"; my Spassword = "asecretl"; # Конец определений # Сообщите сценарию, что мы будем использовать # базу данных MySQL my $drh = DBI->install_driver ( 'mysql' ); # Установите соединение с базой данных my $dbh = $drh->connect($db, $user, Spassword); # Простая проверка, чтобы увидеть, соединились ли мы die "Cannot connect: $DBI:":errstr\n" unless $dbh; # получить входящую информацию от пользователя print "Name: "; my $name = ; chomp(Sname); print "\n"; # Создать и выполнить оператор SQL my SSQLstatement = "select name, phone, address, age from Stable where name like \"%$name%\""; my $sth = $dbh->prepare($SQLstatement); my $howmany = $sth->execute; die "Couldn't match Sname in database\n"- if Showmany eq "OEO"; print "Showmany matches found in database\n\n"; printf ("%17.14s %13.9s %15.12s %S \n", "NAME", "PHONE", "ADDRESS", "AGE"); tt цикл по всем соответствиям и их печать for (my $i = 0; $i < Showmany; $i++) { my (SSQLname, SSQLphone, SSQLaddress, SSQLage) = $sth->fetchrow_array;

www.books-shop.com

Служба базы донных SQL

395

printf . ("%17,14s %13.9s %15.12s %2d \n", SSQLname, SSQLphone, SSQLaddress, SSQLage); } В этой программе нам не нужно больше вводить полное имя: ./cmdline.select.revised.pl Name: brian 2 matches found in database NAME

Brian Brian Smith

PHONE

555-9999 555-2453

ADDRESS AGE

433 M St. 29 1915 11th St 23

Все это связано с тем, что мы сделали изменение в строке; my $SQLstatement = "select name, phone, address, age from Stable where name like \"%$name%\"";

Если мы выполняем программу, не вводя имя, мы увидим все записи базы данных. Что делать, если вы заметили что-то пропущенное в базе данных? Нам нужен сценарий, который спрашивает содержимое каждого поля и затем помещает новую строку в базу данных. Программа на листинге 17.3 делает именно это. Листинг 17.3. Файл cmdline.insert.pl #!/usr/bin/perl # Сценарий командной строки для выборки из базы данных SQL # Пересмотрен, чтобы находить соответствие подстрокам

use DBI;

# Определения - Вам будет нужно здесь изменить my Stable = "friends"; mу $db = "test"; mу $user = "terry"; my Spassword = "asecretl"; # Конец определений # Сообщите сценарию, что мы будем использовать # базу данных MySQL my $drh = DBI->install_driver ( 'mysql' ); # Установите соединение с базой данных my $dbh = $drh->connect($db, $user, Spassword); # Простая проверка, чтобы увидеть, соединились ли мы die "Cannot connect: SDBI::errstr\n" unless Sdbh; # получить входящую информацию от пользователя print "Name: "; my Sname = ; chomp($name); print "\n"; print "Phone: "; my Sphone = ; chomp(Sphone); print "\n"; print "Address: "; my Saddress = ; chomp($address); print "\n";

www.books-shop.com

396

Глава 17

.

print "Age: "; my Sage = ; chomp(Sage); print "\n"; tt Создать и выполнить оператор SQL my SSQLstatement = "insert into Stable (id, name, phone, address, age) values (\"0\", \"$name\", \"phone\", \"$address\", \"$age\")"; my Ssth = $dbh->do($SQLstatement); Этот сценарий создает следующий оператор вставки SQL и просит сервер MySQL его выполнить. insert into Stable (id, name, phone, address, age) values (\"0\", \"$name\", \"phone\", \"$address\", \"$age\" Обратите внимание, что поля в предыдущих операторах вставки являются переменными Perl, которые получают значения из командной строки. Давайте рассмотрим работу сценария: ./cmdline.insert.pl Name: Scott Ramshaw Phone: 555-5828 Address: 1311 26th Ave.

Age: 23 Это приведет к вставке новой записи с заданной информацией, которую мы можем найти с помощью сценария cmdline.select.revised.pl. Допустим, наш друг Брайан переехал в Сан-Франциско. Нам нужно изменить данные, которые у нас есть, так как люди переезжают или изменяют телефонные номера. Листинг 17.4 показывает сценарий Perl, который делает именно это. Он берет имя пользователя, находит все строки данных, которые точно соответствуют имени и затем спрашивает пользователя о новой информации для каждой строки. Это позволяет пользователю просто нажимать Enter (Ввод), чтобы сохранить существующие данные. Листинг 17.4. Файл cmdline.update.pl #!/usr/bin/perl # Сценарий командной строки для обновления строк в базе данных SQL use DBI;

#Определения - Вам будет нужно здесь изменить my Stable = "friends"; mу $db = "test"; mу Suser = "terry"; my Spassword = "asecretl"; # Конец определений # Сообщите сценарию, что мы будем использовать # базу данных MySQL my Sdrh = DBI->install_driver ( 'mysql' ); # Установите соединение с базой данных my $dbh = $drh->connect($db, Suser, Spassword); # Простая проверка, чтобы увидеть, соединились ли мы die "Cannot connect: SDBI::errstr\n" unless Sdbh;

# получить входящую информацию от пользователя print "Name: "; my $name = ;

www.books-shop.com

Служба базы данных SQL

397

chomp(Sname); # Создать и выполнить оператор SQL my SSOLstatement = "select id, name, phone, address, age from Stable where name like \"$name\""; my $sth = $dbh->prepare ($SQLstatement); my Showmany = $sth->execute; die "Couldn't match $name in database\n" if Showmany eq "OEO"; print "Showmany matches found in data base\n\n"; # Определяем локальные переменные my ($i, Sinput, SSQLname, SSQLphone, SSQLaddress, SSQLage, Supdatestatement); # Цикл по всем соответствующим строкам, # спрашиваем пользователя о новых данных, затем обновляем # строку, чтобы отразить сделанные, изменения . for (Si = 0; Si < Showmany; $i++) { (SSQLid, SSQLname, SSQLphone, SSQLaddress, SSQLage) = $sth->fetchrow_array; printf ("%17.14s %13.9s %15.12s %S \n.", "NAME", "PHONE", "ADDRESS", "AGE"); printf ("%17.14s %13.9s %15.12s %2d \n", SSQLname, SSQLphone, SSQLaddress, SSQLage); print "Name [SSQLname]: "; Sinput = ; chomp(Sinput); SSQLname = Sinput 11 %SQLname; print "Phone [SSQLphone]: "; Sinput = ; chomp(Sinput); SSQLphone = Sinput 11 %SQLphone; print "Address [SSQLaddress]:. "; Sinput = ; chomp(Sinput); SSQLaddress = Sinput 11 %SQLaddress; print "Age [SSQLage]: ";. Sinput = ; chomp(Sinput); SSQLage = Sinput 11 SSOLage; Supdatestatement = "update Stable set name address phone age where id = SSQLid";

= = = =

\"$SQLname\", \"$SQLaddress\", \"$SOLphone\", SSOLage

$dbh->do($updatestatement);

} Этот сценарий использует следующий оператор обновления SQL для выполнения своей работы по обновлению существующих записей: update Stable set name = \"$SQLname\", address = \"$SQLaddress\", phone = \"$SQLphone\", age = SSQLage where id = SSQLid; Вот пример того, как работает этот сценарий: ./cmdline.update.pl Name: brian smith

www.books-shop.com

398

Глава 17

1 matches found in database NAME PHONE ADDRESS Brian Smith 555-2453 1915 11th St Name [Brian Smith]: PHone[555-2453]: 415-555-9242 Address [1915 11th S t . ] : 132 Market St. «100 Age [23]:

AGE 23

Новая информация о Брайане теперь находится в базе данных.

Использование сценариев CGI для доступа к базе данных SQL с помощью Web-браузера

SQL на Red Hat Linux будет успешно работать, когда мы встроим запросы в сценарий CGI и выведем данные в Web-браузере. Web-сайт сможет вывести полезные данные, которые нужно показать посетителям. Можно позволить Web-пользователям искать данные, вводить собственные данные и т.д. SQL и CGI хорошо подходят друг другу. Листинг 17.5 показывает пример сценария CGI, который использует основные возможности некоторых из рассмотренных сценариев командной строки. Когда этот сценарий будет установлен в каталог cgi-bin Web-сервера, можно выполнить CGI сценарий, используя Web-браузер. Сначала он выведет форму HTML. Этот интерфейс на основе HTML более гибок, чем интерфейсы ранее созданных сценариев командной строки. Новый сценарий позволяет извлекать информацию на основе любого из полей в таблице friends в базе данных test, которую мы создали ранее. Можно искать людей по адресу, номеру телефона, возрасту, а также по имени. Сценарий позволяет делать точный поиск или поиск по подстроке. Листинг 17.5. select.cgi #!/usr/bin/perl # CGI для выборки информации из базы данных SQL use CGI; use DBI; my $q = new CGI;

ft Определения - Вам будет нужно здесь изменить my Stable = "friends"; mу $db = "test"; mу $user = "terry"; my Spassword = "asecretl"; # Конец определений # Это основная ветвь. При первом выполнении # покажет пользователю форму, когда пользователь # отправит форму, тогда мы обрабатываем входные данные if ($q->param('field') eq "" ) {&printform()> else {&results()} sub printform { print $q->header; print $q->start_html(-title=>'Friend Database', -BGCOI_OR=>' black', -TEXT=>'white'); print "Friend Database"; print $q->startform; print "Find all my friends whose "; print $q->popup_menu(-name => field, -values => [("name", "address", "phone", "age")J, -default => "name");

www.books-shop.com

Служба базы данных SQL

399

print $q->popup_menu(-name => searchtype, -values => [("is", "contains")], -default => "is"); print $q->textfield(-name =>, text, -size => 16), "
"; print $q->submit; print $q->endform; print $q->end_html;

} sub results { my Sfield = $q->param('field'); my Ssearchtype = $q->param('searchtype'); my Stext = $q->param('text'); my etable=(); print $q->header; print $q->startjitml(-title=>'Database Results', -BGCOLOR=>'black', -TEXT=>'white'); # Сообщите сценарию, что мы будем использовать # базу данных MySQL my $drh = DBI->install_driver( 'mysql' ); # Установите соединение с.базой данных my $dbh = $drh->connect($db, $user, Spassword); # Простая проверка, чтобы увидеть, соединились ли мы if (!$dbh) { print "Cannot connect: $DBI::errstr
"; print $q->end_html; die; } # Создание и выполнение оператора SQL my (SSOLstatement); if (Ssearchtype eq "contains") { SSQLstatement = "select name, phone, address, age from Stable where Sfield like \"%$text%\""; } else { SSQLstatement = "select name, phone, address, age from Stable where Sfield = \"$text\""; > my $sth = $dbh->prepare($SQLstatement); my Showmany = $sth->execute; # Показать сообщение об ошибке, если мы не можем найти # никаких совпадений if ($howmany eq "OEO") { print $q->h3("Couldn't match $text in ". "database"); die; } print "Showmany matches found in database

"; push (@table, $q->th(["Name", "Phone", "Address", "Age"])); # Цикл по всем совпадениям и сохранение

# их в itable for (my $i = 0; $i < Showmany; $i++) { my (SSQLname, SSQLphone, SSQLaddress, SSQLage) =

www.books-shop.com

400

F>;.IPC 1?

$sth->fetchrow_array; push (@table.$q->td([$SQLname, SSQLphone, SSQLaddress, SSQLage]));

} # напечатать таблицу данных, которые мы получили из # базы данных SQL print $q->table( {-border => 1, -align => center}, $q- >Tr(\@table));. print $q->end_html; На рис. 17.2 представлена форма HTML в Web-браузере.

Рис. 17.2.

I

Экран для задания выборки

Когда форма HTML посылается вместе с критериями поиска, снова выполняется сценарий CGI и извлекаются запрошенные данные из базы данных SQL. Затем он форматирует данные в таблицу HTML и посылает их назад Web-браузеру, где они выводятся пользователю. На рис.17.3 показан пример полученной страницы.

Рис. 17.3. Экран вывода полученных данных

Сценарий CGI может выполнять и другие функции базы данных, такие как вставка, обновление и удаление данных. Мы изменили cmdline.insen.pl, рассмотренный ранее, чтобы превратить его в сценарий CGI (см. листинг 17.6). Он предоставляет пользователю форму HTML, чтобы вводить новые данные. Когда новые данные посылаются серверу, сценарий показывает

www.books-shop.com

Служба базы данных SQL

401

статусное сообщение, говорящее пользователю, что информация были добавлена в базу данных. Листинг 17.6. Файл insert.cgi #!/usr/bin/perl # CGI для вставки данных в базу данных SQL

use CGI; use DBI; my $q = new CGI;

# Определения -' Вам будет нужно здесь изменить my Stable = "friends"; mу $db = "test"; mу Suser = "terry"; my Spassword = "asecretl"; # Конец определений if ($q->param('name') eq "") {&printform()} else {&results()} sub printform { print $q->header; print $q->start_html(-title =>'Friend Database', -BGCOLOR =>'black', -TEXT =>'white'); print "Friend' Database"; print $q->startform; print "Name: ", $q->textfield(-name => name, -size => 16), "
"; print "Phone: ", $q->textfield(-name => phone, -size => 16), "
"; print "Address: ", $q->textfield(-name => address, -size => 16), "
"; print "Age: ", $q->textfield(-name => age, -size => 16), "
"; print $q->submit; print $q->endform; print $q->end_html; } sub results { , my ($пате, Sphone, Saddress, Sage); $name = $q->param('name'); Sphone = $q->param('phone'); Saddress = $q->param('address'); Sage = $q->param('age'); print $q->header; print $q->start_html(-title=>'Database Results', -BGCOLOR=>'black', -TEXT=>'white'); # Сообщите сценарию, что мы будем использовать # базу данных MySQL my (Sdrh, Sdbh); # Sdrh = DBI->install_driver( 'mysql' ); # Установите соединение с базой данных

my $dbh = $drh->connect($db, $user, Spassword); # Простая проверка, чтобы увидеть, соединились ли мы

www.books-shop.com

402

Глава 17

if (!$dbh) { print "Cannot connect: $OBI::errstr
"; print $q->end_html; die; } # Создание и выполнение оператора SQL my SSQLstatement = "insert into Stable (name, phone, address, age) values (\"$name\", \"$phone\", \"$address\", \"$age\""; $dbh->do($SQLstatement); print "Sname added to database"; print $q->end_html; } Многие основные интерактивные магазины используют совместно SQL и CGI для поддержки работы покупательской корзины, отслеживания заказов и отслеживания запасов. Сегодня через Web можно купить все, что угодно. Базы данных SQL являются одной из основных частей такого процесса. Будут ли товарами книги, CD или автомобили, высока вероятность, что поиск на Web-сайте какого-то продукта построен на основе базы данных SQL. В этой главе вы познакомились с взаимодействием между программой и базой данных SQL. Рассматривались многие операции, такие как выполнение вычислений на основе найденных данных или построение графиков по имеющимся данным.

www.books-shop.com

Часть 6 Безопасность и мониторинг

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

www.books-shop.com

Глава 18 Безопасность

В этой главе: • Безопасный доступ пользователей • Теневые пароли • Подключаемые модули аутентификации (РАМ) • Программа проверки целостности файлов/каталогов • Безопасность служб, выполняемых inet • Использование оболочки TCP • Взлом паролей • Использование COPS

одключение любого компьютера к Интернету сопряжено с риском неправильного употребления или злоупотребления. Не существует надежного способа обеспечить полную безопасность, даже с помощью самых дорогих и совершенных на сегодня аппаратных или программных решений. Однако можно существенно снизить риски безопасности, проводя профилактические меры и отслеживая все новости в области компьютерной безопасности. В этой главе рассматриваются вопросы безопасности и решения, которые усиливают защиту хоста. '

Безопасный доступ пользователей

Если можно было бы держать компьютер недоступным для кого-либо, то, вероятно, он стал бы совершенно безопасным. Правда, такой компьютер был бы практически бесполезен. К сожалению, все риски безопасности связаны с людьми (пользователями), которые получают доступ к компьютеру.

www.books-shop.com

406

Глава

18

Один компьютер не способен атаковать другой компьютер. Атака инициирована пользователем, который имеет законный или незаконный доступ к компьютеру. В большинстве случаев люди, которые имеют законный доступ, не атакуют компьютер, который они используют, но часто невольно помогают в атаках, проводимых пользователями, получившими незаконный доступ. Поэтому имеет смысл ограничить возможные повреждения системы пользователями. Подобные ограничения улучшат защиту системы. Мы обсудим, как ограничить излишнее взаимодействие пользователя с системой.

Ограничение физического доступа

Все меры безопасности будут недостаточны, когда кто-то, имеющий физический доступ к компьютеру, решит повредить либо его, либо службу, либо данные, которые предоставляет этот компьютер. Трудно защитить компьютер от такого злоумышленника, которому достаточно выдернуть шнур электропитания из розетки, чтобы вызвать вынужденную остановку компьютера. Кроме того, злоумышленник может перезагрузить компьютер с помощью гибкого диска и украсть или разрушить данные. Единственный способ обеспечить физическую безопасность системы состоит в ограничении тех, кто имеет доступ к компьютеру. Вам необходимо знать всех людей, которые могут получить доступ к компьютеру. Не держите сервер в открытом для всех сотрудников месте. Если нельзя устранить присутствие посторонних рядом с компьютером, мы рекомендуем сделать следующее: * Используйте защищенный паролем доступ к BIOS компьютера. Это следует сделать сразу же после получения компьютера. Если компьютер будет находиться в общественно доступном месте, будьте уверены, что кто-то попробует проникнуть в BIOS и установить собственный пароль до того, как он будет заблокирован паролем службы технической поддержки. Возможно, после этого вам надо будет пригласить поставщика компьютера, либо вскрыть его корпус, чтобы сбросить BIOS в исходное состояние (за счет отключения на короткое время аккумулятора BIOS). Поэтому сразу защитите BIOS паролем. Никто, кроме вас, не должен иметь доступ к BIOS компьютера. * Если BIOS позволяет отключить поиск гибкого диска во время начальной загрузки, используйте эту возможность. Некоторые новые BIOS разрешают проводить начальную загрузку с устройства чтения компакт-дисков. Если ваш компьютер позволяет это делать, отключите и загрузку. Не разрешайте компьютеру загружаться с чего-то другого, кроме жесткого диска. * Создайте или измените файл /etc/shutdown.allow и перечислите в нем только тех пользователей, которым будет разрешено выключать компьютер. Если это разрешено только пользователю root, создайте пустой файл /etc/shutdown.allow. Когда кто-то на консоли компьютера нажимает клавиши Ctrl+Alt+Del для перезагрузки компьютера, компьютер будет проверять файл, чтобы убедиться, что определенный пользователь зарегистрирован на консоли. Только после этого он сможет выключить компьютер. Когда подобные клавиши нажимает пользователь, которому не разрешено выключать компьютер, компьютер будет игнорировать запрос и выведет на консоль предупреждающее сообщение. Конечно, это не остановит злоумышленника и он все равно нажмет кнопку reset (если она есть) или выключит тумблер питания. Убедитесь, что существует какой-то способ защиты таких выключателей. * Прикрепите компьютер к какому-нибудь большому предмету мебели. Это препятствует краже компьютера. Когда реализованы одно или несколько мероприятий ограничения физического доступа к компьютеру, можно перейти к другим методом ограничения доступа пользователей (см. ниже).

www.books-shop.com

Безопасность

407

Ограничение доступа обычных пользователей

В системе Red Hat Linux существуют два вида пользователей: обычные пользователи и суперпользователи. Когда применяется учетная запись обычного пользователя для нелегального получения привилегий суперпользователя, на компьютере начинают происходить нехорошие действия. Поэтому суперпользователю необходимо убедиться, что учетные записи обычных пользователей имеют наименьшие привилегии, требуемые для выполнения их работы. Например, если создается сервер Red Hat Linux, чтобы предоставить пользователям службы электронной почты и Web, нет необходимости разрешать им доступ к серверу на основе Telnet. Чтобы ограничить доступ Telnet (в shell) для пользователей, которым не нужна такая служба, сделайте следующее: 1. В файл /etc/shells вставьте /bin/false в качестве действующей оболочки. Этот файл можно изменить либо вручную, используя любой текстовый редактор, такой как vi, либо с помощью linuxconf, как показано на рис. 18.1.

Рис.18Л Изменение /etc/shells с помощью linuxconf

2. Измените учетную запись каждого пользователя, используя usermod или linuxconf для задания оболочки регистрации как /etc/false. На рис. 18.2 показано изменение учетной записи пользователя с именем kabir с помощью Linuxconf. Как только это будет сделано, измененная учетная запись не сможет быть использована для доступа с помощью Telnet. Можно усилить ограничения на учетные записи для пользователей FTP с помощью гостевой учетной записи, созданной на сервере wu-ftpd. Гостевая учетная запись FTP является реальной учетной записью с реальным именем пользователя и паролем. Единственное отличие состоит в том, что когда гостевой пользователь получает доступ к серверу FTP, он не видит ничего другого, кроме собственного домашнего каталога. Другими словами, когда гостевой пользователь регистрируется на сервере FTP, сервер выполняет операцию chroot в домашний каталог гостевого пользователя. В результате этого домашний каталог гостевого пользователя выглядит как вся файловая система. Большим преимуществом является то, что пользователь не может видеть ничего другого (например, системных файлов и каталогов других пользователей). Подробнее об этом читайте в разделе «Создание гостевой учетной записи FTP» в главе 13.

www.books-shop.com

408

Глава 18

Рис.18.2. Изменение учетной записи пользователя с помощью linuxconf

Ограничение доступа суперпользователей

Многие люди ошибочно ассоциируют доступ суперпользователя только с учетной записью root. Они считают, что если вы не являетесь пользователем root, то вы и не суперпользователь. На самом деле учетную запись root делает суперпользователем не имя, а ее идентификатор пользователя и идентификатор группы. Идентификатор пользователя и идентификатор группы учетной записи root заданы равными нулю, что предоставляет право суперпользователя. Поэтому можно создать учетные записи нескольких суперпользователей, присваивая им упомянутые ранее значения идентификатора пользователя и группы. Учетные записи суперпользователей являются очень мощным средством, а люди склонны использовать его неправильно. Поэтому учетные записи суперпользователей должны применяться как можно реже, только в необходимых случаях и крайне осторожно. Если кто-то и имеет привилегии суперпользователя, это не означает, что он должен использовать их все время. Суперпользователь обязан следовать следующим рекомендациям: • Используйте учетные записи суперпользователя в необходимых случаях. При конфигурации системы или установке общесистемного программного обеспечения, такого как новая версия программного обеспечения Web-сервера, компиляции и установке Perl для всей системы, или выполнении подобной задачи можно использовать учетную запись суперпользователя. Однако необходимо избегать применение учетной записи root или эквивалентной учетной записи любого суперпользователя для выполнения повседневных задач, таких как отправка электронной почты, Web-просмотр, выполнение клиента IRC для общения с друзьями или коллегами по работе, либо пересылки файлов с помощью FTP и т.д. Иногда системные администраторы-новички задают вопрос, почему они не могут применять Telnet для связи с системой от имени пользователя root. Это связано с тем фактом, что файл /etc/securetty определяет, какое устройство tty может применяться для регистрации root. Обычно /etc/securetty считает пу[0-8] допустимыми устройствами. Так как доступ Telnet будет использовать псевдо-пу-устройство ttyp[0-f], root не может войти через Telnet. Вы должны сохранить /etc/securetty без изменений. • Не регистрируйтесь в системе как root или какой-то эквивалентный суперпользователь в произвольном месте. Предпочтительный метод выполнения административных задач состоит в регистрации в системе обычным пользователем и использовании команды su, чтобы стать

www.books-shop.com

Безопасность

409

суперпользователем (таким как root). Это уменьшает шанс случайного повреждения системы. Выполняйте команду su с дефисом как аргумент (.т.е. su -) для создания оболочки регистрации. А это заставит оболочку прочитать файлы запуска оболочки (такие как .bashrc). Подобный аргумент также заставляет команду su сменить каталог на домашний каталог пользователя. • Если возникает ситуация, когда кому-то необходимо иметь права доступа суперпользователя для выполнения своих работ, рассмотрите возможность использования sudo вместо того, чтобы предоставлять каждому учетную запись суперпользователя. Если кому-то необходимо выполнить некоторые программы, которые требуют прав доступа суперпользователя, можно определить этих пользователей в файле /etc/sudoers, чтобы они могли выполнить данные программы и не будучи суперпользователями. Команда sudo позволяет обычному пользователю выполнять некоторые команды (определенные суперпользователем) от лица суперпользователя. Это хороший механизм, так как он менее рискован, чем предоставление кому-нибудь полного доступа суперпользователя. Сама команда sudo выполняется как setuid root, т.е. как процесс пользователя root. А это позволяет ей выполнять другие программы, которые требуют привилегий суперпользователя. Дистрибутив Red Hat Linux не содержит пакет sudo. Его можно получить на узле ftp: //cont rib. redhat. com/. Обычно трудно получить доступ к перегруженным серверам FTP компании Red Hat. Вы можете обратиться к узлу http://www.courtesan.com/sudo/. Это официальный Web-сайт sudo, где публикуются сведения о sudo, включая список узлов FTP.

Ограничение любого доступа во время чрезвычайного происшествия или атаки

Во многих случаях, когда системный администратор обнаруживает атаку или непредвиденную ситуацию (такую как проблема с диском), надо запретить регистрацию пользователей до тех пор, пока проблема не будет решена. Однако опыт показывает, что иногда необходимо немного подумать, прежде чем выключить систему. В таком случае важным становится запрещение регистрации новых пользователей. Чтобы быстро запретить регистрацию новых пользователей, создайте файл с именем /etc/nologin с соответствующим сообщением. Вы сможете информировать пользователей о причине блокировки и ожидаемом времени возвращения системы в рабочее состояние. Присутствие этого файла запрещает регистрацию всех обычных пользователей. Так как суперпользователям разрешается регистрироваться только с консоли, убедитесь, что есть доступ к системе с физической консоли. В противном случае можно выйти из текущего сеанса оболочки и заблокировать самого себя вне системы.

Безопасность процесса аутентификации пользователей

Традиционно все системы UNIX используют базовую схему аутентификации пользователей. Обычно вся информация о пользователе, такая как имя пользователя, зашифрованный пароль, идентификатор пользователя, идентификатор группы пользователя и используемая по умолчанию оболочка, хранятся в файле /etc/passwd. Этот файл опрашивается программами, которым требуется данная информация. Он хранится с полномочиями чтения для всех, поэтому любая программа способна получить к нему доступ. Например, если изменены полномочия файла для /etc/passwd так, что он перестает быть читаемым всеми, обнаружится, что простая программа Is, не сможет показать имя пользователя, когда она выполняется с параметром -1. Это связано с тем, что Is, как и многим другим программам, необходимо проверить в

www.books-shop.com

410

Глава 18

файле /etc/passwd информацию о пользователе. В таком случае Is необходимо отобразить идентификатор пользователя (например 500) на имя пользователя (kabir) из строки /etc/passwd: kabiг:PtxWphZQAyH3x:500:500:Mohamed Kabir:/home/kabiг:/bin/tics Файл /etc/group опрашивается для определения имени группы. Если /etc/group не могут прочитать все, то программы, такие как Is, которым нужна информация о группе пользователя, не будут действовать правильно. Какие проблемы могут возникнуть из-за того, что чтение файла /etc/passwd разрешено всем пользователям? К читаемому всеми файлу может получить доступ любая программа, поэтому хакеры сделают все возможное, чтобы, подделав плохо написанные программы, получить доступ к этому файлу. Например, многие плохо написанные сценарии CGI были подделаны злоумышленниками так, чтобы, пересылать в свой собственный почтовый ящик файл /etc/passwd чужой системы. Любой пользователь, имеющий учетную запись в системе, получает доступ к этому файлу. Как только файл попал в руки злоумышленников, они могут воспользоваться программами взлома паролей для извлечения из файла слабых паролей. Так как пользователи часто выбирают легко запоминаемые пароли (например, слова из словаря) становится достаточно просто извлечь пароль из файла. Достижения компьютерной технологии, такие как быстрые процессоры и дешевые жесткие диски, сделали вскрытие паролей доступным развлечением для многих невоспитанных индивидуумов. Например, необходимо 52 Кбайта памяти для хранения .всех возможных (4096 на пароль) комбинаций 8-символьного пароля, который внутри файла хранится как 13-символьная зашифрованная строка. Как можно видеть, потребуется не слишком большой жесткий диск, чтобы хранить пару сотен тысяч зашифрованных паролей для сравнения с файлом /etc/passwd. Что же можно сделать в этой ситуации? Оказывается можно скрыть свои пароли «в тени». (См. следующий раздел).

Использование теневых паролей

Оказывается, что только некоторые программы, включая login, passwd, нуждаются в наличии поля зашифрованного пароля в файле /etc/passwd. Всем другим программам достаточно информации о пользователе — имени, идентификатора, идентификатора группы и оболочки. Что если перенести зашифрованные пароли из /etc/passwd в другой файл и изменить программы, которым необходим доступ к зашифрованным паролям таким образом, чтобы они могли читать этот файл? Это файл не будет доступен для чтения всем пользователям, так как программы, которым разрешен доступ, будут выполняться как программы setuid root. Другими словами, эти программы будет выполняться от лица пользователя root при чтении нового файла паролей. Все это делает пакет Shadow Utils. Поддержка теневых паролей реализована пакетом Shadow Utils, который не устанавливается по умолчанию. После установки он предоставляет утилиты, которые позволят исключить из файла /etc/passwd все пароли. Зашифрованные пароли будут помещены в файл /etc/shadow. Он будет читаться только root и программами, выполняющимися как setuid root. Это означает, что злоумышленник, который использует слабые программы для получения доступа к /etc/passwd, может по-прежнему его получить. Однако файл уже не будет содержать никакой информации о паролях. Пакет теневых утилит предоставляет другие интересные сведения, такие как старение пароля, истечение срока действия учетной записи, а также свойства блокирования. В следующем разделе рассматривается использование теневых паролей в системе.

www.books-shop.com

411

Безопасность

Установка пакета теневых утилит

Возьмите файл shiidow-\itils-(version-release-architecture).rpm (например, shadow-utils-980403-4.i386.rpm) с компакт-диска Red Hat Linux или узла FTP компании Red Hat. Установите его, используя утилиту rpm следующим образом: rprn

-ivh

После установки пакета преобразуйте существующий файл /etc/passwd в файл /etc/passwd на основе теневых паролей,

Преобразование файлов /etc/passwd и /etc/group в теневой формат Традиционный файл /etc/passwd имеет формат:

::DID:GIO::

:

Для преобразования файлов /etc/passwd и /etc/group в теневой формат выполните: /usr/sbin/pwconv Первоначальный /etc/passwd превратился в теневой формат /etc/passwd. После преобразования /etc/passwd будет иметь следующий формат: Preferences, а затем Proxies из категории Advanced. Выбирая Manual Proxy Configuration и затем щелкая на View, можно определить IP-адрес сервера Squid как прокси-сервера для http, FTP и Gopher. По умолчанию для прокси используется порт 3128, поэтому если он не изменен в файле squid.conf, поместите это число в поле порта. Теперь можно просматривать любой Web-сайт, как если бы не было прокси. Можно дважды проверить, что Squid работает правильно, анализируя файл журнала /var/log/squid/access.log сервера-прокси и, проверяя, что туда попал просмотренный Web-сайт.

Точная настройка Squid

Squid включен и работает, настройте его согласно своим потребностям. В данный момент мы пока никак не ограничили своих пользователей в доступе к любым узлам. Можно определить правила в файле squid.conf, чтобы задать списки управления доступом и принимать или отвергать посетителей согласно этим спискам.

www.books-shop.com

446

Глава 19

acl BadWords url_regex foo bar

Добавляя предыдущую строку, мы вводим правило ACL, называемое BadWords, которому будет соответствовать любой URL, содержащий слова «foo» или «bar». Это применимо к http://foo.deepwell.com/pictures или http://www. thekennedycompound.com/ourbar.jpg, так как оба имени содержат фрагменты из списка BadWords. Добавляя: http_access deny BadWords

к squid.conf, мы заблокируем пользователям доступа к любому URL, который соответствует введенному правилу. Почти каждый администратор, использующий ACL на основе слов, попадает в неприятную ситуацию, когда он не проверил всех \ способов, которым слово может быть использовано. Представьте себе, что пользователям запрещен доступ к узлам, содержащим слово «sex», но одновременно блокируются www.buildersexchange.com и любые другие сайты, которые могут попасть в эту категорию. Так как все аспекты функционирования Squid контролируются файлом squid.conf, можно настроить его на собственные требования. Добавляя строку: cache_mem 16 MB

.

'

мы разрешаем Squid использовать 16 Мбайт памяти для хранения в памяти Web-страниц. Путем проб и ошибок можно обнаружить, что требуется другой объем. Параметр cache-mem не является объемом памяти, которую использует Squid. Он только задает максимальный объем памяти, которую применяет Squid для хранения Web-страниц, рисунков и т.д. Документация Squid показывает, что Squid будет использовать объем памяти примерно в три раза больше.

'

С помощью строки emulate_httpd_log on мы определяем, что файлы в /var/log/squid записываются в форме, похожей на файлы журнала Web-сервера. Это позволяет использовать программу статистики, такую как Analog или Webtrends для анализа журналов и просмотра сайтов, где бывают пользователи. Некоторые серверы ^ТР требуют, чтобы при анонимной регистрации пользователей применялся почтовый адрес. Задавая в ftp_user реальный адрес электронной почты (как показано ниже) мы предоставим серверу на другом конце сеанса FTP данные, которые он хочет увидеть: ftp_user [email protected]

Здесь можно указать адрес администратора прокси-брандмауэра для администратора, который при необходимости сможет обратиться по этому адресу. Если вы ввели некоторый URL-адрес и обнаружили, что страницы не существует, то скорее всего эта страница больше не появится. Задавая negative_ ttl на определенное число минут (см. ниже) можно контролировать, как долго Squid будет помнить, что страница не была найдена ранее. Это называется отрицательным кэшированием. negative_ttl 2 minutes Это не всегда хорошо. Значение по умолчанию равно 5 мин, но мы предлагаем уменьшить его до 2 мин или, возможно, 1 мин, если не отключить полностью. Это нужно для того; чтобы прокси был прозрачен. Если пользователь ищет страницу, которая, как он знает, существует, не нужно вводить никакой задержки.

www.books-shop.com

Сетевая безопасность



447

cache_mgr [email protected]

Указав свой адрес электронной почты, можно получать сообщение о том, что Squid прекращает работу. cache_effective_user nobody cactie_effective group nobody

Если Squid запущен по учетной записи root, изменится UID Squid, как будто он выполняется пользователем «nobody». Инструмент, подобный Squid, должен быть полностью прозрачным для пользователей. Это поможет им избежать сложностей в управлении и позволит просматривать Web, как если бы не было никакого прокси-сервера Web. Подробную информацию о Squid можно получить по адресу h t t p : / / s q u i d , nlanr. net/Squid/FAQ/FAQ, html. В разделе 17 содержится описание использования Squid в режиме прозрачного прокси. Если «черный список» в файле squid.conf станет большим, подумайте об использовании программы, называемой редиректором. Большие списки правил ACL начинают замедлять интенсивно применяемый прокси Squid. Используя редиректор для выполнения подобной работы, можно улучшить эффективность, разрешая или запрещая URL на основе правил фильтра. Дополнительную информацию о Squirm, полнофункциональном редиректоре, созданном для работы вместе с Squid, можно получить на сайте http://www.senet.com.au/ squirm/. Файл cachemgr.cgi находится в RPM Squid. Это программа CGI, которая позволит увидеть статистику прокси, а также выключить и перезапустить Squid. Для ее установки требуется несколько минут, однако она сообщает точные данные о работе прокси. Если нужно настроить производительность Web-кэша, используйте этот инструмент. Squid имеет много свойств помимо тех, которые были обсуждены. О функциях Squid вы можете узнать, посетив Web-страницу Squid по адресу http://squid.nlanr.net/.

Получение помощи от SATAN

Всегда полезна активность в области сетевой безопасности. Если регулярно проверять безопасность своих компьютеров, можно узнать о собственных слабостях. SATAN является инструментальным средством проверки компьютеров, выискивающим всевозможные уязвимые места, которые хакеры могут использовать для проникновения в систему. SATAN (Security Administrator Tool for Analyzing Networks — Инструмент администратора безопасности для анализа сетей) бурно обсуждался в прессе. В 1995 г., когда этот продукт был выпущен, люди считали, что хакеры будут использовать его как отмычку, автоматизируя свою работу. Но хакеры к тому времени уже имели похожие на него программы. Хакеры знали множество способов для проникновения в другие системы. При этом они могли остаться незамеченными. Однако обычные люди не имели доступа к инструментальным средствам такого рода. Дэн Фармер (Dan Farmer) и Виэтс Венема (Wietse Venema) написали SATAN, чтобы ликвидировать неравенство. Таким образом 'они предоставили возможность не только злоумышленникам, но и всем остальным иметь доступ к инструментам защиты. Теперь администраторы смогут обнаружить проблемы и закрыть дыры до того, как кто-то другой проникнет внутрь системы. SATAN сканирует известные уязвимые места системы и предоставляет пользователю описание в формате HTML, объясняющее как хакеры используют проблему и как ее исправить. Интерфейс пользователя содержит Web-браузер, поэтому любой Web-пользователь сможет работать с SATAN. SATAN была создана для компьютера UNIX, но можно зондировать любую операционную систему. SATAN тестирует: " Файловые системы NFS, экспортируемые на произвольные хосты

www.books-shop.com

448

,

Глава 19

• Файловые системы NFS, экспортируемые непривилегированным программам • Файловые системы NFS, экспортируемые с помощью portmapper • Доступ к файлу с паролем NIS из произвольного хоста • Старые (т.е. до 8.6.10) версии sendmail • Доступ REXD из произвольных хостов • Отключенное управление доступом к серверу X • Произвольные файлы, доступные с помощью TFTP • Удаленный доступ к оболочке из произвольных хостов • Домашний каталог анонимного FTP с полномочием записи Установка SATAN SATAN можно получить на ряде узлов. Как и с любой другой программой безопасности, убедитесь, что она загружается из надежного источника. Наше правило: если этого узла нет в списке зеркальных узлов, мы ему не доверяем. Список зеркал опубликован по адресу http://www.fish.com/~zen/satan/satan.html Файл satan-l.l.l.tar.gz можно получить с официального узла SATAN, но он потребует загрузить дополнительные заплатки с других узлов. Самый удобный способ компиляции и установки SATAN состоит в загрузке версии RPM с узла http://contrib.redhat.com/. Предположим, что Red Hat Linux работает на системе лйб, поэтому необходимо получить пакет satan-l.l.l.linux-3. 1386.rpm или более позднюю версию. После загрузки пакета RPM выполните следующую команду как пользователь root: rpm -ivh satan-1.1.1.linux-3.i386.rpm По умолчанию эта команда устанавливает дистрибутив исходного кода SATAN в каталог /root/satan. Будут выполнены автоматическое конфигурирование и компиляция исходного кода. ЕСЛИ не следует устанавливать и компилировать SATAN в /root/satan, используйте параметр path в предыдущей команде rpm для установки в другой каталог. Обратите внимание, что процесс компиляции требует, чтобы в системе имелась самая последняя версия компилятора GNU С (gcc), поддержка glibs и библиотека разработчика на С. Также понадобится Web-браузер. Так как программа rpm будет автоматически компилировать и устанавливать SATAN, следующий шаг состоит в ее запуске.

Работа с SATAN

Предполагая, что команда rpm установила программу SATAN в /root/satan, выполним ее, используя команду: /root/satan/satan Если выполнить предыдущую команду из xterm (т.е. в X Window), SATAN запустит браузер Netscape Navigator (/usr/bin/netscape). Если в системе нет этого браузера и хочется использовать текстовый браузер Lynx, измените сценарий /root/satan/config/paths.pl, так чтобы переменная $MOSAIC была задана как имя полностью квалифицированного пути браузера Lynx. Теперь, если запустить SATAN, будет использован указанный браузер. Здесь предполагается, что применяется Netscape Navigator. Еще одна проблема, которая возникает в зависимости от версии Netscape Navigator. Когда пользователь щелкает на ссылке на экране главного интерфейса SATAN (см. рис. 19.1), они могут не сработать.

www.books-shop.com

449

Сетевая безопасность

Экран главного интерфейса SATAN

Например, мы использовали Web-браузер Netscape Navigator версии 4.0 и когда щелкали на любой из ссылок на главной странице SATAN, то получали предложение загрузить сценарии SATAN (см. рис. 19.2). Navigator просит загрузить сценарии SATAN

Navigator не может выполнить сценарий, в связи с неправильно сконфигурированной или отсутствующей конфигурацией MIME. Если возникла такая проблема, сделайте следующее: 1. Из меню Edit браузера Netscape Navigator выберите Preference и щелкните на Applications (см. рис. 19.3). 2. Теперь щелкните на New, чтобы ассоциировать расширение .р! с /usr/bin/perl (или с тем местом, где находится интерпретатор Perl). Появится диалоговое окно (см. рис. 19.4). 3. В поле Description можно ввести что-то произвольное (типа Perl Script); в поле MIMEType введите application/x-perl; и в поле Suffixes — .pi. 4. Выберите Application, чтобы присвоить программу обработки для файлов с расширением .р! и ввести имя полностью квалифицированного пути интерпретатора Perl в поле ввода, как показано на рисунке. 5. Нажмите ОК, чтобы завершить процесс, и закройте обычным способом окно Preference. После запуска SATAN можно увидеть, что многие утилиты защиты имеют очень скупой интерфейс пользователя. Однако SATAN уделяет этому очень

www.books-shop.com

Глава 19

450

Конфигурирование Netscape Navigator для работы с SATAN

Ассоциация ,рl с интерпретатором Perl

большое внимание. Перейдем к первоначальному зондированию сетевой безопасности. Щелкните на ссылке «SATAN Target selection» («Выбор объекта для SATAN») на экране главного меню, как показано на рис. 19.1. Появится следующий экран (см.рис. 19.5). Здесь можно указать имя первичного хоста или сети, где нужно провести зондирование, сообщить SATAN о зондировании других хостов в подсети и задать уровень, на котором выполнять зондирование. Советуем вам начать с одного хоста с легким сканированием. Так вы получите общее представление

Выбор хоста для зондирования

www.books-shop.com

Сетевая безопасность

451

о SATAN. Перейдите к более мощным функциям зондирования. Для быстрого теста выберите хост в собственной сети; «Scan the target host only» («Сканировать только указанный хост») и также «Light» («Легкий»), чтобы выполнить легкое сканирование. Теперь щелкните на «Start the scan» («Начать сканирование»), чтобы начать зондирование. Когда SATAN закончит зондирование хоста (или сети), она выведет экран, как на рис. 19.6. Экран SATAN завершения сбора данных

Щелкните на ссылке «View primary target results» («Просмотр результатов первичного объекта») — появятся результаты зондирования SATAN на экране, как на рис. 19.7. Здесь показано, что SATAN при зондировании не нашел никаких проблем. Результаты легкого зондирования на первичном хосте

Легкое зондирование использует fping, nslookup и showmount для сбора информации о DNS, службах RPC и NFS. Если легкое зондирование не обнаруживает проблем, приступайте к нормальному зондированию. В дополнение к задачам легкого зондирования, нормальное зондирование будет пробовать определить информацию о службах UDP, TCP и службе finger. На рис. 19.8

www.books-shop.com

452

Глава 19

Результаты нормального зондирования на первичном хосте

показано, что SATAN обнаружил проблему с конфигурацией Trusted host(s) (Доверенный хост) на нашем тестируемом сервере picaso. nitec.com. Щелкните на ссылке «Trusted host(s)» на странице результатов, вы увидете более подробную информацию о проблеме (см.рис. 19.9). Подробные сведения о потенциальной проблеме с безопасностью

При выполнении тяжелого сканирования, требующего больше времени, могут возникнуть дополнительные проблемы. SATAN предоставляет достаточно хорошую документацию, описывающую проблемы, которые встречаются SATAN (или которых нет). Можно проследовать за каждым обнаруженным уязвимым местом, чтобы узнать, как сделать систему более защищенной. После того как освоено зондирование одного указанного хоста, можно попробовать сканирование всех хостов в заданной подсети. Кроме того, разрешено изменить конфигурацию SATAN, используя ссылку «SATAN Configuration Management» на домашней странице. Если появятся какието проблемы при выполнении SATAN, воспользуйтесь ссылкой справки, чтобы познакомиться с часто задаваемыми вопросами и ответами.

www.books-shop.com

Часть 7 Настройка производительности

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

www.books-shop.com

Глава 20 Конфигурирование ядра

В этой главе: • Необходимость настройки ядра • Подготовка к модернизации ядра • Компиляция и установка модифицированного ядра • Использование kernelcfg Linux является, вероятно, единственной операционной системой, которая получает новое ядро каждые два или три месяца. В этой главе обсуждаются модернизация, конфигурирование, компилирование и установка модифицированного ядра. Linux выполняется на многих различных аппаратных архитектурах, включая х86 (Intel), Alpha и Spare и др. Практически невозможно обсуждать проблемы ядра для всех платформ в одной главе и поэтому предположим, что, как большинство пользователей Red Hat Linux, вы имеете систему на основе x86 (Intel). Однако если вы выполняете Red Hat Linux на системе, построенной на мощном процессоре Alpha, то сможете найти полезную информацию, имеющую отношение к ядру, по адресу h t t p : / / w w w . a l p h a l i n u x . оrg/. Кроме того, для всех архитектур (включая x86) можно посетить URL-адрес http://www.kernel.org/.

Необходимость модернизации ядра

Наиболее веская причина для модернизации ядра состоит в получения возможности использовать некоторые новые драйверы устройств для управления специальными устройствами. Например, предположим, что контроллер SCSI в. настоящее время имеет слабый драйвер и, известно, что модуль нового драйвера выпущен поставщиком или написан специалистом по драйверам. Причина модернизации ядра системы Linux иногда связана с закрытием дыр в системе его защиты. Нужно отслеживать на следующем

www.books-shop.com

456

Глава 20

Web-сайте наличие обновленных пакетов: h t t p : / / w w w . r e d h a t . c o m / c o r p / s u p port/errata/ index.html. Многие люди (возможно, имеющие много свободного времени) хотят модернизировать ядро. Мы рекомендуем держать самые последние модернизации ядра Linux подальше от любого из работающих серверов. Хотя развлечение с самыми последними версиями ядра Linux уровня разработки на персональной рабочей станции может быть достаточно привлекательной задачей для любопытных людей. Давайте продолжим разговор о модернизации и модификации ядра.

Установка ядра Linux

Определим версию текущего ядра системы. Например, можно выполнить:

rpm -q kernel kernel-headers kernel-ibcs \


/current-kernel-pkgs.txt Файл current-kernel-pkgs.txt будет содержать информацию о версиях для имеющих отношение к ядру пакетов. Также необходимо знать номера версий пакетов mkinitrd (используется для создания начальных образов ramdisk), SysVinit (пакет ink) и initscripts (сценарии /etc/rc.d), которые часто изменяются вместе с новыми ядрами. Для того чтобы добавить информацию о версиях этих пакетов в файл current-kernel-pkgs.txt, выполните: rmp -q mkinitrd SysVinit initscripts > \ /current-kernel-pkgs.txt Выполняя предыдущие команды rpm, мы поместили информацию о версиях для всех типичных пакетов, необходимых во время полной модернизации ядра. В таблице 20.1 перечислены имена и дается описания этих пакетов RPM. Посмотрим, какое ядро используется для начальной загрузки системы. Одним из надежных способов это сделать является проверка файла /etc/lilo.conf. Например, файл /etc/lilo.conf на системе Red Hat 5.2 имеет такие строки: boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 image=/boot/vmlinuz-2.0.36-0.7 label=linux root=/dev/hda1 initrd=/boot/initrd-2.0.36-0.7.img read-only append="mem=128M"

Мы используем единственный образ ядра Linux (/boot/vmlinuz-2.0. 36-0.7), помеченный как «linux», поэтому текущее ядро есть /boot/vmlinuz-2.0,36-0.7. Если ядро системы Linux уже обновлялось, то в файле /etc/lilo.conf может быть множество меток. В таком случае необходимо определить ядро (image=/boot/vmlinux-2.xxx- x.x), которое используется для начальной загрузки системы. Найдите метку LILO, которую вы указываете для начальной загрузки системы, и задайте соответствующую строку image= /boot/vmlmux-2.x.xx- x.x Обратите внимание на номер версии ядра, которая будет нужна в дальнейшем для создания аварийной загрузочной дискеты.

Подготовка к модернизации ядра

Официальным узлом FTP для обновлений Red Hat Linux является f t p : / / u p d a t e s . r e d h a t . c o m / . На этот узел очень трудно попасть. Попробуем найти ближайший зеркальный узел. Можно указать ближайшее зеркало, используя следующий URL: http://www. r e d h a t . c o m / m i r r o r s . html.

www.books-shop.com

Конфигурирование ядра

Типичные пакеты, необходимые для модернизации ядра

457

Пакет

Описание пакетов, находящихся в RPM

kernel-2.x.xx-x.i386.rpm

Этот пакет содержит ядро Linux, которое используется для начальной загрузки и выполнения системы. Он содержит немного драйверов устройств для определенного оборудования. Большая часть оборудования поддерживается модулями, которые загружаются после начальной загрузки Это заголовочные файлы С для ядра Linux, которые определяют структуры и константы, необходимые для построения большинства стандартных программ в Linux, а также для сборки ядра

kernel-headers-2.x.xx-x.i386.rpm

kernel-ibcs-2.x.xx-x.i386.rpm

Этот пакет позволяет выполнять программы в формате IBCS2 (Intel Binary Compatibility Standard, version 2) и связанных форматах исполняемых файлов

kernel-pcrncia-cs-2.x.xx-x.i386.rpm

Многие переносные компьютеры (и некоторые другие) поддерживают карты расширения PCMCIA. Также'известные как «адаптеры кредитных карт», карты PCMCIA являются маленькими картами для разных целей - от поддержки SCSI до подключения модемов. Они допускают горячую замену (могут заменяться без перезагрузки системы) и достаточно удобны. Этот пакет содержит поддержку для многочисленных карт PCMCIA всех разновидностей и поставляет демон, который позволяет им осуществлять горячую замену

kernel-source-2.x.xx-x.i386.rpm

Это исходный код ядра Linux. Он требуется для сборки большинства программ С, так как они зависят от определенных в нем констант. Можно также собрать модифицированное ядро, которое лучше настроено на конкретное оборудование

mklnitrd-x.x-x.src.rpm

Базовое ядро может быть собрано без драйверов адаптеров SCSI, оно будет загружать драйвер SCSI как модуль. Чтобы решить проблему разрешения ядру читать модуль, не имея возможности адресовать адаптер SCSI, используется начальный ramdisk. Этот ramdisk запускается загрузчиком операционной системы (таким как ULO) и доступен 'ядру, как только оно загрузится. Этот образ отвечает за загрузку подходящего адаптера SCSI и позволяет ядру монтировать корневую файловую систему (root). Подобная программа создает такой образ на ramdisk, используя информацию, находящуюся в /etc/conf.modules SysVinit является первой программой, запускаемой ядром Linux при загрузке системы. Она контролирует запуск, выполнение и выключение всех других программ

SysVinit-x.xx-x.src.rpm initscfipts-x.xx-x.src.rpm

Этот пакет содержит сценарии, используемые для начальной загрузки системы, изменения уровней выполнения и аккуратного выключения системы. Он также имеет сценарии, которые активизируют и деактивируют большинство сетевых интерфейсов

Когда найден зеркальный узел для пакетов RPM обновленного ядра, соединитесь с узлом и сравните версии пакетов, которые ранее сохранены в файле /current-kernel-pkgs.txt. Загрузите новые пакеты для пакетов, перечисленных в созданном ранее файле /current-kernel-pkgs.txt. Если нет более новых пакетов для какого-то из пакетов, перечисленных в файле /current-kernel-pkgs.txt, проигнорируйте его, поскольку новый пакет еще не доступен. Получены новые пакеты для модернизации ядра. Создайте аварийную загрузочную дискету на случай, если что-то пойдет неправильно при модернизации ядра. Чтобы создать автономную загрузочную дискету, вставьте отформатированную дискету в устройство гибких дисков и выполните: mkbootdisk 2.x.xx-x.x Не забудьте заменить 2.х.хх-х.х на текущую версию ядра, которую определили ранее. Также, если имеется несколько устройств гибких дисков и хочется использовать устройство гибких дисков по умолчанию (/dev/fdO),

www.books-shop.com

458

Глава 20

введите параметр —device для задания выбранного устройства гибких дисков. Например: mkboodisk -device /dev/fd1 2.0.36-0.7 Эта команда создаст аварийную загрузочную дискету на /dev/fdl, используя образ ядра версии 2.0.36-0.7. Затем перезагрузите систему с помощью созданной вами дискеты, чтобы убедиться, что дискета работает. Установка нового ядра После тестирования аварийной загрузочной дискеты мы готовы к установке нового ядра. Используя rpm, введите все пакеты, которые загрузили. Мы обычно загружаем все новые пакеты в новый каталог для временного хранения, такой как /tmp/new-kernel-pkgs, и выполняем: rpm -ivh /tmp/new-kernel-pkgs/*.rpm Если не планируется когда-либо компилировать ядро, можете пропустить пакеты kernel-headers-2.x.xx-x.i386.rpm и kernel-source 2.x.xx-x.i386.rpm (поскольку они нужны только для компиляции модифицированных ядер). Во время модернизации нового ядра и связанных пакетов создайте файл образа начального ramdisk, необходимого ядру при начальной загрузке систе: мы. Файл образа начального ramdisk позволяет ядру получить доступ к модулям, таким как драйверы дисков, которым в свою очередь нужен доступ к остальным модулям, располагающимся в корневой файловой системе (root).

Создание начального ramdisk

Команда mkinitrd используется для создания начального ramdisk. Заменив 2.Х.ХХ-Х номером версии нового ядра, выполните следующую команду:

mkinitrd /boot/initrd-2.x.xx-x.iing 2 . x . x x - x

Это создаст файл образа начального ramdisk /boot/initrd-2.x.xx-x.img. С помощью утилиты Is проверьте, что этот файл действительно создан в каталоге /boot. После создания начального ramdisk, измените файл /etc/ lilo.conf, чтобы сконфигурировать LILO для нового ядра.

Конфигурирование LILO

Конфигурирование LILO является критически важным для установки ядра и не следует перезагружать систему до завершения реконфигурации LILO (см. ниже). Используя текстовый редактор, добавьте к файлу /etc/ lilo.conf новый конфигурационный сегмент, такой как показан ниже: image=/boot/vmlinuz-2.х.хх-х label=new-linux root=/dev/hdal initrd=/boot/initrd-2.x.xx-x.img read-only append="mem=128M"

He забудьте заменить 2.х.хх-х соответствующим номером версии ядра для строк image= и initrd=. Строка label= должны быть задана произвольно. Устройство root должно указывать на раздел диска root. Например, если текущий раздел root есть /dv/sdal, нужно убедиться, что этот раздел задан в строке root= . Если система имеет более 64 Мбайт оперативной памяти, используйте строку append=, чтобы задать размер памяти равным соответствующему значению. Завершив изменение и сохранив файл /etc/lilo.conf, выполните:

/sbin/lilo Это заставит LILO прочитать новый конфигурационный файл и обновить загрузочный сектор соответствующего раздела root. Можно использовать

www.books-shop.com

Конфигурирование ядра

459'

флаг -v с предыдущей командой, чтобы заставить LILO быть более многословной. После выполнения LILO перезагрузите систему. Загрузка с новым ядром Для перезагрузки системы введите команду shutdown -r now. При появлении приглашения LILO нажмите клавишу Tab, чтобы увидеть доступные варианты. На экране появятся метки, которые введены (в строках label=) для старого и нового ядер. Используйте новую метку (в предыдущем примере это метка new-linux) в приглашении LILO для загрузки системы с новым ядром. Следующий шаг будет зависеть от того, как пройдет загрузка, после того как LILO приказано запустить новое ядро. Если все прошло как обычно, значит, новое ядро загрузилось и работает. Если все прошло не так как планировалось, не паникуйте. Помните, что по-прежнему действует старое ядро. Если система зависла, нажмите Ctrl+Alt+Del или сделайте жесткую перезагрузку. Когда снова получите приглашение LILO, введите имя метки старого ядра. Система должна будет снова загрузиться как обычно. В таком случае необходимо проверить шаги, которые выполнены раньше, особенно конфигурационный файл /etc/lilo.conf. Убедитесь, что новая конфигурация задана правильно. Снова выполните /sbin/lilo и попробуйте загрузить систему с новым ядром. Если проблема сохраняется, придется послать описание проблемы (например, что выведено на консоли во время загрузки нового ядра) в группу новостей comp.linux, посвященную Linux. Если позволяет лицензия на программное обеспечение, можно попросить помощь в компании Red Hat. В большинстве случаев новая установка должна пройти гладко, без всяких инцидентов. Чтобы убедиться, что выполняется новое ядро, введите: uname -a Эта команда выведет номер версии ядра вместе с другой информацией. Когда новое ядро работает, нужно создать новую загрузочную дискету, используя команду mkbootdisk. Так было сделано раньше на подготовительном этапе этой установки. Модификация ядра Единственный способ, которым можно модифицировать ядро в соответствии со своими потребностями, состоит в специальной компиляции. Чтобы компилировать ядро на серверной системе Red Hat Linux, необходимо получить пакеты RPM заголовка ядра и исходного кода. Если уровень ядра, которое мы пытаемся модифицировать, не является производственным, может не существовать доступной версии RPM. В таком случае нужно будет загрузить исходный код в сжатом формате tar (.tar.gz). Проверьте официальный Web-сайт Red Hat о доступности пакетов RPM исходного кода и заголовка ядра. Если нет пакетов RPM, загрузите дистрибутив .tar.gz с официального сайта http://www. kernel.com/ (или любого из его зеркал). В этом разделе мы предполагаем, что требуется модифицировать самое последнее ядро 2.2.2, поэтому загрузили дистрибутив исходного кода linux-2.2.2.tar.gz с только что упомянутого сайта. Установка исходного кода ядра Linux Извлеките дистрибутив linux-2.2.2.tar.gz в каталог /usr/src с помощью команды tar xvzf linux-2.2.2.tar.gz. Дистрибутив исходного кода будет храниться в подкаталоге с именем linux-2.2.2 в /usr/src. Ядро Linux традиционно хранится в /usr/src/Iinux. В действительности /usr/src/linux является символьной ссылкой к каталогу /usr/src/linux-x.x.xx. Удалите символьную ссылку, используя rm /usr/src/linux, а затем создайте новую командой: In -s /usr/src/linux-2.2.2 /usr/src/linux Последовательность команд, которую придется выполнить, чтобы добраться до этого момента, может быть следующей: cd /usr/src

www.books-shop.com

460

Глава 20

tar xvzf linux-2.2.2.tar.gz rm -f /usr/src/linux In -s linux-2.2.2 linux

Когда мы извлекали дистрибутив исходного кода в каталог /usr/src, при этом создавался подкаталог linux и поэтому символьная ссылка была не нужна. Однако если вы планируете экспериментировать с различными ядрами, мы рекомендуем хранить определенный дистрибутив исходного кода в каталоге /usr/src/linux-x.x.xx и всегда указывать символьную ссылку (linux) на ядро, с которым в настоящее время работаете. Хотя вновь загруженный дистрибутив исходного кода не должен иметь никаких файлов устаревших рбъектов, будет разумно выполнить следующую команду, чтобы вычистить любые такие файлы: make mrproper Мы готовы конфигурировать (т.е. модифицировать) ядро. Имеется несколько вариантов того, как это можно сделать.

Конфигурирование ядра по-старому

Чтобы конфигурировать ядро по-старому, следующую команду из каталога /usr/src/linux:

необходимо

выполнить

make config

Это простейший способ конфигурирования ядра; однако он может оказаться не самым подходящим для начинающих хакеров ядра. Здесь представлен пример сеанса.

Параметры уровня зрелости кода

В этом разделе нам предстоит решить, нужно ли использовать свойства, которые еще не совсем готовы к эксплуатации. Другими словами, выводится запрос о выводе приглашений для экспериментальных свойств. Можно выбрать просмотр (и, возможно, использование) этих экспериментальных свойств, если конфигурируется ядро для системы, где эксперименты или время простоя и зависания являются частью развлечения, а не бременем. Приглашение появляется в следующем виде: Prompt for development and/or incomplete code/drivers (Предлагать код/драйверы, находящиеся в стадии разработки и/или неполные) (CONFIG_EXPERIMENTAL) [N/y/?]

Ответом по умолчанию является N или «Нет». Ответ по умолчанию может быть выбран просто нажатием клавиши Enter. Также обратите внимание, что ответ по умолчанию всегда показан заглавной буквой.

Тип процессора и свойства

В этом разделе вас спросят о семействе процессора, математическом сопроцессоре, мультипроцессорах и Других имеющих отношение к процессорам вопросах. Вот первый из них: Processor family (386, 486/0x486, 586/К5/5х86/6х86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX]

Если используемая по умолчанию архитектура процессора указана неправильно, выберите нужную из перечисленных в вопросе. В нашем случае значение по умолчанию неправильно, поэтому вводим «Pentium/K6/TSC» в качестве семейства процессора. defined CONFIG_M686 Math emulation

(CONFIG_MATH_EMULATION)

[N/y/?]

(Эмуляция математического сопроцессора)

www.books-shop.com

Конфигурирование ядра

Если только у вас не (действительно) старый процессор, который не имеет встроенного математического сопроцессора, нужно выбрать значение по умолчанию, нажимая здесь Enter, что и было сделано. MTRR (Memory Type Range Registry) support (CONFIG_MTRR) [N,y,?] Это, вероятно, первый вопрос, который не вполне понятен (если только вы не являетесь экспертом по устройству процессора x86) для большинства начинающих хакеров ядра. Что же можно здесь выбрать? Используемый по умолчанию параметр часто является правильным выбором для большинства случаев. Или можно узнать, что действительно означает поддержка MTRR (Memory Type Range Registry), вводя символ «?» в ответ на приглашение. Вы получите экран справки, показанный ниже в переводе на русский язык: CONFIG_MTRR: На системах с Intel Pentium Pro и Pentium II могут использоваться MTRRs (Memory Type Range Registers - Регистры диапазона типа памяти) для контроля доступа процессора к диапазонам памяти. Это весьма полезно, когда вы имеете видеокарту (VGA) на шине PCI или AGP. Разрешение объединения записи позволяет передачам записи в шину объединяться в более крупные блоки, прежде чем пересылаться по шине PCI/AGP. Это может улучшить производительность операций записи изображения в 2.5 раза или больше. Этот параметр создает файл /proc/mtrr, который может использоваться для манипулирования вашими MTRRs. Обычно сервер X должен применять данное свойство. Это должно иметь достаточно общий интерфейс, чтобы похожие регистры управления на других процессорах можно было легко поддерживать. Здесь ответ Y (Да) также убирает проблему с ошибочными SMP BIOS, которые устанавливают MTRRs только для загрузочного процессора и не делают это для вторичных процессоров. Это может вести к проблемам различного вида. Вы можете безопасно ответить Y, даже если ваша машина не имеет MTRRs, добавьте около 3k к своему ядру. За дополнительной информацией обращайтесь в Documentation/mtrr.txt. Symmetric

multi-processing

support

(CONFIG_SMP)

[Y/n/?]

Если у вас есть несколько процессоров в системе и вы хотите включить поддержку симметричной многопроцессорной обработки, выберите значение по умолчанию. В нашем случае нет материнской платы с несколькими процессорами, поэтому мы выбираем «п», чтобы не устанавливать поддержку SMB. Поддержка загружаемых модулей Ядро Linux использует новый метод для сохранения низкоуровневого профиля. Оно применяет свойства и драйверы, реализованные как внешние модули. Модули динамически загружаются и выгружаются по мере необходимости. Это позволяет ядру требовать меньше памяти и становиться все в большей степени независимым от оборудования. Модули обычно загружаются с помощью программы kerneld, которая, в свою очередь, использует другую программу (modprobe) для управления доступными модулями. Модули могут быть драйверами устройств, файловыми системами, форматами двоичных выполняемых файлов и т.д. В этом разделе будут спрашивать, нужно иметь поддержку для модулей или нет. Первый вопрос следующий: Enable loadable module support (CONFIG_MODULES) [Y/n/?] Это, на самом деле, не должно быть вопросом. Поскольку практически для любого сценария вам захочется иметь поддержку загружаемых модулей. Поэтому прекрасно подходит значение по умолчанию. Set version information on all symbols for modules (Указать информацию о версии на всех идентификаторах модулей) (,CONFIG_MODVERSIONS) [N/y/?]

www.books-shop.com

462

Глава 20

Когда модули компилируются с информацией о версии, они могут повторно использоваться с более новыми ядрами без необходимости снова компилироваться с самого начала. Однако предпочтительный метод состоит в компиляции модулей вместе с новым ядром, чтобы исключить проблемы совместимости. Следовательно, значение по умолчанию, предполагающее не включать информацию о версии, является достаточным. Kernel module loader (CONFIG_KMOD) [N/y/?] (Загрузчик модулей в ядре) Как упоминалось ранее, модули обычно загружаются с помощью программы kerneld. Задается вопрос, не хотели бы вы использовать загрузчик модулей внутри самого ядра и избежать использования демона kerneld. В любом случае модули будут загружаться автоматически, поэтому это не приводит к большим отличиям. Общая настройка В этом разделе конфигурируются общие параметры настройки. Networking support (CONFIG_NET) [Y/n/?] (Поддержка работы сети) Глупый вопрос, не правда ли? Кто захочет использовать Linux и не иметь поддержки работы сети? Возможно, немного таких где-то и есть. Используйте значение по умолчанию. PCI support (CONFIG_PCI) [Y/n/?] (Поддержка PCI) Если вы не используете действительно старую систему лйб, имеющую только шину ISA, то прекрасно подходит значение по умолчанию. Обратите внимание, что на системах Spare может не понадобиться поддержка PCI, если есть только карты sbus. PCI access mode (BIOS, Direct, Any) [Any] Значение по умолчанию позволяет ядру определять конфигурацию PCI, используя прямой метод. Если это не работает, оно будет получать конфигурацию PCI из системной BIOS. Поэтому значение по умолчанию является хорошим выбором. PCI quirks (CONFIG_PCI_QUIRKS) [Y/n/?] (PCI с особенностями) Это значение для материнских плат с плохими BIOS, которые не могут правильно настроить шину PCI. Если у вас не такая плата, выберите «п» для нет. Если вы не уверены, можно сохранить значение по умолчанию. MCA support (CONFIG_MCA) [N/y/?] Если вы не имеете систему на основе MCA (Micro Channel Architecture — Микроканальная архитектура) IBM PS/2, поддержка MCA не нужна. SGI Visual Workstation support (CONFIG_VISW&) [N/y/?] Если вы не используете систему SGI, оставьте значение по умолчанию. System V IPC (CONFIG_SYSVIPC) [Y/n/?] IPC (Inter Process Communication — Межпроцессорная коммуникация) нужна многим программам и поэтому нужно использовать значение по умолчанию. BSD Process Accounting (CONFIG_BSD_PROCESS_ACCT) [N/y/?] (Учет процессов в стиле BSD) Это позволяет программе запрашивать ядро для вывода такой информации, как UID владельца процесса, времени создания, статистики памяти и других сведений о процессе. Это не требуется; отвечайте как хотите. Sysctl support (CONFIG_SYSCTL) [Y/n/?]

www.books-shop.com

Конфигурирование ядра

Данный параметр разрешает динамическое изменение различных характеристик ядра в системном файле /ргос без перезагрузки или рекомпиляции ядра. Это необходимо для всех систем. Kernel support for a.out binaries (CONFIG_BINFMT_AOUT) [Y/m/n/?] (Поддержка ядра для двоичных a.out) Формат a.out традиционно использовался для создания исполняемых и библиотечных программ; однако новый ELF (Executable and Linkable Format — Формат исполняемых и связываемых файлов) используется уже некоторое время. Вы могли бы захотеть сохранить поддержку в модуле, вместо того чтобы делать это частью ядра. В случае использования модуля укажите вариант «т». Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/m/n/?] Поддержка ELF является обязательной, поэтому используйте значение по умолчанию. Kernel support for MISC binaries (CONFIG_BINFMT_MISC) [Y/m/n/?] (Поддержка в ядре различных двоичных файлов) Если планируется выполнение исполняемых файлов Java или DOS с помощью интерпретаторов, можно поддерживать разнородные двоичные файлы в виде модуля. Parallel port support (CONFIG.PARPORT) [N/y/m/?] (Поддержка параллельного порта) Если планируется присоединение принтера или других устройств параллельного порта к системе Linux, укажите «у», чтобы добавить поддержку в ядро, или «т» для поддержки, доступной в виде модуля. Advanced Power Management BIOS support (CONFIG_APM) [N/y/?] Если безразлично снижение энергопотребления, оставьте значение по умолчанию.

Поддержка автоматической конфигурации устройств (plug and play)

Технология Plug and Play должна называться Plug and Pray (Вставил и молись) (не знаю, кто сказал это первым). Поэтому мы вам не советуем включать PNP в Linux. Plug and Play support (CONFIG_PNP) [N/y/?] Ответ на этот запрос уже известен. Если у вас есть карта, которая работает только в режиме PNP, скорее всего, возникнут проблемы. Лучшее, что можно сделать, это купить оборудование, которое позволяет отключить PNP.

Блочные устройства

В этом разделе будут задаваться вопросы о дисковых устройствах.

Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] (Поддержка обычного гибкого диска ПК) Так как большинство систем имеют устройства гибких дисков, это Должно быть задано как «Y», т.е. «да». Если используются жесткие диски IDE/EIDE, IDE/ATAPI CD-ROM, ленточные устройства, устройства гибких дисков и т.д., скажите «да» («Y») (или выберите модульный вариант) для всех следующих вопросов: Enhanced IOE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_OEV_IDE) [Y/m/n/?] Use old disk-only driver on primary interface (CONFIG_BLK_DEV_HO_IDE) [N/y/?] Include IOE/ATA-2 DISK support (CONFIG_BLK_DEV_IDEDISK) [Y/m/n/?]

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

463

464

Глава 20

Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [Y/m/n/?] Include IDE/ATAPI TAPE support (CONFIG_BLK_DEV_IDETAPE) [N/y/m/?] Include IDE/ATAPI FLOPPY support (CONFIG_BLK_DEV_IDEFLOPPY) [N/y/m/?] SCSI emulation support (CONFIG_BLK_DEV_IOESCSI) [N/y/m/?] (Поддержка эмуляции SCSI)

Эмуляция SCSI работает только для устройств IDE/ATAPI, которые не имеют поддержки собственного драйвера в Linux. Можно было бы рассмотреть возможность использования другого устройства, чтобы избежать эмуляции, которая не рекомендуется. Микросхемы CMD-Technologies CMD640 IDE и PC-Technologies RZ1000 IDE часто встречаются на различных материнских платах 486/Р5. Если их использует система, необходимо ответить «да» («Y») на следующие вопросы. Если это не известно, то ответ «да», скорее всего, не вызовет никаких проблем: CMD640 chipset bugfix/support (CONFIG_BLK_DEV_CMD640) [Y/n/?] CMD640 enhanced support (CONFIG_BLK_DEV_CMD640_ENHANCED) [N/y/?] RZ1000 chipset bugfix/support (CONFIG_BLK_DEV_RZ1000) [Y/n/?]

Если используются устройства IDE на системе PCI, сохраните значения по умолчанию для следующих параметров: Generic PCI IDE chipset support (CONFIG_BLK_DEV_IDEPCI) [Y/n/?] Generic PCI bus-master DMA support (CONFIG_BLK_DEV_IDEDMA) [Y/n/?] Boot off-board chipsets first support (CQNFIG_BLK_DEV_OFFBOARD) [N/y/?]

Если система может использовать DMA (Direct Memory Access — Прямой доступ к памяти) для устройств IDE, сохраните значение по умолчанию для вопроса: Use DMA by default when available (CONFIG_IDEDMA_AUTO) [Y/n/?] (Использовать по умолчанию DMA, когда возможно) Если нужно разрешить усовершенствованную поддержку для различных наборов микросхем IDE, выберите «да» («Y») для следующего вопроса: Other IDE chipset support (CONFIG_IDE_CHIPSETS) [N/y/?]

Дополнительные блочные устройства

В большинстве случаев все параметры, находящиеся в этом разделе бесполезны, поэтому можно безопасно принять предлагаемые здесь ответы по умолчанию: Loopback device support (CONFIG_BLK_DEV_LOOP) [N/y/m/?] у Network block device support (CONFIG_BLK_DEV_NBD) [N/y/m/?] у Multiple devices driver support (CONFIG_BLK_DEV_MD) [N/y/?] у RAM disk support (CONFIG_BLK_DEV_XD) [N/y/m/?] у XT hard disk support (CONFIG_BLK_DEV_XD) [N/y/m/?] у Parallel port IDE device support (CONFIG_PARIDE) [N/y/m/?] у

Параметры работы в сети

Работа в сети является одним из наиболее важных разделов. Здесь нужно принимать решения о различных вопросах работы в сети. Packet socket (CONFIG_PACKET) [Y/m/n/?] Протокол Packet используется такими приложениями, как tcpdump, поэтому нужно принять предлагаемый ответ по умолчанию. Kernel/User netlink socket (CONFIG_NETLINK) [N/y/?]

Если хочется использовать систему как брандмауэр или применять демон arpd для поддержания внутреннего кэша ARP, скажите здесь «да» («Y»). Network firewalls (CONFIG_FIREWALL) [N/y/?]

www.books-shop.com

Конфигурирование ядра

465

Если нужно использовать систему как фильтрующий пакет брандмауэра, задайте это как «да» («Y»). Network aliasing (CONFIG_NET_ALIAS) [N/y/?]? Если есть несколько сетевых интерфейсов для системы, задайте здесь «да» («Y»). Socket Filtering (CONFIG_FILTEfl) [N/y/?]? Это свойство позволяет программам присоединять фильтры к сокетам и контролировать, как через сокет проходят данные. Если таких программ нет, используйте значение по умолчанию. Unix domain sockets (CONFIGJJNIX)

[Y/m/n/?]

Сокеты являются стандартным механизмом UNIX для создания и получения доступа к сетевым соединениям. Поэтому используйте значение по умолчанию. TCP/IP networking (CONFIG_INET) [Y/n/?] (организация сети на основе TCP/IP) Это очевидно. IP: multicasting (CONFIG_IP_MULTICAST) [N/y/?] Многоадресные (групповые) рассылки IP обычно используются для передачи больших объемов данных, таких как видео в реальном времени, с качеством телепередачи, использующих соединения с большой полосой пропускания. Если в этом нет необходимости, введите значение по умолчанию. IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [N/y/?] Если вы намерены выполнять систему Linux большей частью как маршрутизатор, т.е. как компьютер, который пересылает и перераспределяет сетевые пакеты, нажмите Y («да»).

IP: kernel level autoconfiguration (CONFIG_IP_PNP) [N/y/?] Этот параметр разрешает автоматическую конфигурацию IP-адресов устройств и таблицы маршрутизации во время начальной загрузки ядра на основе либо информации, предоставленной в командной строке ядра, либо протоколами ВООТР или RARP. IP: optimize as router not host (CONFIG_IP_ROUTER) [N/y/?] (IP: оптимизируй как маршрутизатор, а не как хост) Некоторые сетевые драйверы Linux используют технологию, называемую «copy and checksum», чтобы оптимизировать производительность хоста. Для машины, которая действует как маршрутизатор большую часть времени и направляет большинство пакетов на другие хосты, это приведет к потере производительности. IP: tunneling (CONFIG_NET_IPIP) [N/y/m/?] Туннель означает инкапсуляцию данных одного типа протокола в другом протоколе и отправка их через канал, который понимает протокол инкапсуляции. Этот конкретный драйвер туннеля реализует инкапсуляцию IP внутри IP, что звучит как бессмыслица. Однако он может быть полезен, если нужно заставить свою машину появиться в другой сети, отличной от той, с которой она физически соединена. Кроме того, он удобен при использовании возможностей мобильного IP (позволяющие переносным компьютерам легко перемещаться между сетями, не изменяя своих IP-адресов). IP: GRE tunnels over IP (CONFIG_NET_IPGRE) [N/y/m/?] GRE (Generic Routing Encapsulation — Инкапсуляция базовой маршрутизации) в настоящее время позволяет инкапсуляцию IPv4 или IPv6 через существующую инфраструктуру IPv4.

www.books-shop.com

466

Глава 20

IP: aliasing support (CONFIG_IP_ALIAS) [N/y/?] Если вы хотите присоединить несколько IP-адресов к единственному сетевому интерфейсу, скажите здесь «да» («Y»). IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES) [N/y/?] (IP: поддержка TCP syncookie - не включено по умолчанию) Сеть TCP/IP с обычной организационной структурой открыта для атаки, известной как «SYN flooding». Эта атака типа «отказ в обслуживании» мешает законным удаленным пользователям соединяться с компьютером во время продолжающейся атаки и требует очень немного усилий от атакующего, который может действовать откуда угодно в Интернете. SYN сооcies обеспечивают защиту против атаки такого типа. Если выбран ответ Y («да»), стек TCP/IP будет использовать криптографический протокол запроса, известный как «SYN cookies», чтобы позволить законным пользователям продолжить соединение, даже когда машина подвергается атаке. Для законных пользователей нет необходимости изменять свое программное обеспечение TCP/IP, но SYN cookies могут помешать правильному сообщению об ошибках на клиентах, когда сервер действительно перегружен. Если это происходит часто, лучше их выключить. Если выбрать Y («да»), обратите внимание, что SYN cookies не включаются по умолчанию; вы можете включить их, говоря Y для «/proc filesystem support» и «Sysctl support» (которые будут представлены ниже), а также придется выполнить команду echo 1 > /proc/sys/net/ipv4/tcp_syncookies во время начальной загрузки, после того как будет смонтирована файловая система ргос. IP: Reverse ARP (CONFIG_INET_RARP) [N/y/m/?] Если нужно, чтобы сервер обеспечивал службу RARP (Reverse Address Resolution Protocol — Протокол обратного разрешения адреса) для других компьютеров в сети, можно сказать «да» («Y») или задать это свойство для выполнения модулем. IP: Drop source routed frames (CONFIG_IP_NOSR) [Y/n/?] Маршрутизация от источника является свойством протокола IP, которое позволяет исходящему пакету IP содержать всю информацию о маршрутизации до IP-адреса места назначения. Это обычно является причиной многих сетевых проблем безопасности и должно быть отменено. Рекомендуется значение по умолчанию. IP: Allow large windows (not recommended if /proc/scsi/scsi Здесь token может быть error, scan, mlqueue, mlcomplete, llqueue, llcomplete, hlqueue, hlcomplete. Параметр level контролирует объем информации, записываемой в журнал, и может быть любым положительным числом, включая 0. Оставшиеся вопросы в разделе о SCSI являются специфическими для SCSI адаптеров хоста. Вы должны выбрать поддержку только для установленных адаптеров.

Поддержка сетевых устройств

В этом разделе конфигурируются различные свойства сетевых устройств:

Network device support (CONFIG_NETOEVICES) [Y/n/?] (Поддержка сетевых устройств) Так как конфигурируется ядро для сервера, нужно сказать «да» («Y») в предыдущем вопросе. ARCnet support (CONFIG.ARCNET) [N/y/m/?] Если нет интерфейсной карты ARCnet, используйте значение по умолчанию. Dummy net driver support (CONFIG.DUMMY) [M/n/y/?]? (Поддержка фиктивного драйвера сети) Этот драйвер предоставляет фиктивное устройство сетевого интерфейса, которое может использоваться для обмана сетевой клиентской программы. Поддержка его как модуля может оказаться удобным средством; поэтому рекомендуется значение по умолчанию. EQL (serial line load balancing) support (CONFIG_EQUALIZER) [N/y/m/?] Это свойство бесполезно для большинства конфигураций серверов. Рекомендуется использовать значение по умолчанию. Ethernet (10 or 1OOMbit) (CONFIG_NET_ETHERNET) [Y/n/?] Еще один очевидный ответ.

www.books-shop.com

468

Глава 20

Ответы на следующие вопросы зависят от того, какие типы сетевых карт установлены в компьютере; поэтому отвечайте соответственно: 3COM cards (CONFIG_NET_VENDOR_3COM) [N/y/?] AMD LANCE and PCnet (AT1500 and NE2100) support (CONFIG_LANCE) [N/y/m/7] Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [N/y/?] Racal-Interlan (Micom) N1 cards (CONFIG_NET_VENDOR_RACAL) [N/y/?] Other ISA cards (CONFIG_NET_ISA) [N/y/?] EISA, VLB, PCI and on board controllers (CONFIG_NET_EISA) [Y/n/?] AMD PCnet32 (VLB and PCI) support (CONFIG_PCNET32) [N/y/m/?] Apricot Xen-II on board Ethernet (CONFIG.APRICOT) [N/y/m/?] CS89xO support (CONFIG_CS89xO) [N/y/m/?] Generic DECchip & DIGITAL EtherWORKS PCI/EISA (CONFIG_DE4X5) [N/y/m/?] DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP) [N/y/m/?] Digi Intl. RightSwitch SE-X support (CONFIG_DGRS) [N/y/m/?] EtherExpressPro/100 support (CONFIG_EEXPRESS_PR0100) [Y/m/n/?] PCI NE2000 support (CONFIG_NE2K_PCI) [N/y/m/?] TI ThunderLAN support (CONFIG_TLAN) [N/y/m/?] VIA Rhine support (CONFIG_VIA_RHINE) [N/y/m/?] Pocket and portable adaptors (CONFIG_NET_POCKET) [N/y/?] FDDI driver support (CONFIG_FDDI) [N/y/?] Frame relay DLCI support (CONFIG_DLCI) [N/y/m/?] PPP (point-to-point) support (CONFIG_PPP) [N/y/m/?] SLIP (serial line) support (CONFIG_SLIP) [N/y/m/?] Wireless LAN (non-hamradio) (CONFIG_NET_RADIO) [N/y/?] Token Ring driver support (CONFIG_TR) [N/y/?] Comtrol Hostess SV-11 support (CONFIG_HOSTESS_SV11) [N/m/?] COSA/SRP sync serial boards support (CONFIG_COSA) [N/m/?] Red Creek Hardware VPN (EXPERIMENTAL) (CONFIG_RCPCI) [N/y/m/?] WAN drivers (CONFIG_WAN_DRIVERS) [N/y/?] LAPB over Ethernet driver (CONFIG_LAPBETHER) [N/y/m/?] X.25 async driver (CONFIG_X25_ASY) [N/y/m/?]

^

Поддержка Amateur Radio, ISDN и старых CD-ROM Мы предполагаем, что вы не собираетесь использовать поддержку Amateur Radio (любительское радиовещание), ISDN или старые CD-ROM, и, следовательно, используемых по умолчанию ответов на следующие вопросы будет достаточно: Amateur Radio support (CONFIG_HANRADIO) [N/y/?] ISDN support (CONFIG_ISDN) [N/y/m/?] Support non-SCSI/IDE/ATAPI CDROM drives (CONFIG_CD_NO_IDESCSI) [N/y/?] Если вы планируете пользоваться картой ISDN для обеспечения соединения сервера с Интернетом, мы рекомендуем использование маршрутизатора ISDN вместо внутренней карты. Мы пробовали несколько карт ISDN известных марок, которые работали не очень хорошо. Помимо проблем связанных с еще одной картой (ресурсы IRQ и адресов ввода/вывода ограничены на ПК), различие в цене между внутренней картой и внешним маршрутизатором ISDN не слишком заметно, особенно при сравнении с тем фактом, что выделенный доступ ISDN сам по себе является достаточно дорогой услугой в большинстве мест США.

Символьные устройства

В этом разделе будут заданы вопросы о конфигурации терминала.

www.books-shop.com

469

Конфигурирование ядра

Virtual terminal (CONFIG.W) [Y/n/?]

Это свойство позволяет иметь виртуальные терминалы. Требуется ответ по умолчанию, если только не устанавливается ядро во встроенную систему Linux. Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]

Подобное свойство позволяет превратить виртуальный терминал в системную консоль. Это требуется по той же причине, что и предыдущий ответ. Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]

Если вы хотите использовать последовательный порт компьютера в качестве системной консоли, измените ответ по умолчанию. Extended dumb serial driver options (CONFIG_SERIAL_EXTENDEO)

[N/y/?]

Если вы не задали последовательный порт в качестве системной консоли в предыдущем вопросе, оставьте значение по умолчанию. Unix98 PTY support (CONFIG_UNIX98_PTYS) [Y/n/?] Это свойство предоставляет поддержку для соглашения о нумерации псевдотерминалов UNIX 98, которое переопределяет традиционное соглашение о нумерации псевдотерминалов Linux. Вы должны сохранить значение по умолчанию. Если вы сохранили значение по умолчанию, вам будет задан следующий вопрос, чтобы указать максимальное число UNIX 98 PTY, которое может использоваться системой: Maximum number of UNIX98 PTYs in use (CONFIG_UNIX98_PTY_COUNT) [256]

(0-2048)

Для большинства случаев достаточно значения по умолчанию. Mouse Support (not serial mice) (CONFIG_MOUSE) [Y/n/?] (Поддержка мыши (не последовательная мышь))

Это свойство позволяет вам пользоваться мышью с терминалами, способными использовать такое устройство. Рекомендуется значение по умолчанию. QIC-02 tape support (CONFIG-QIC02_TAPE) [N/y/m/?]

Если у вас есть ленточное устройство QIC-02, вы можете здесь выбрать его поддержку. Watching Timer Support (CONFIG_WATCHDOG) [N/y/?]

Если вы хотите создать сторожевой таймер так, чтобы он мог перезагрузить систему в случае отказа, задайте здесь «Y» («да»). Если вы инициируете это свойство, вы должны будете создать специальное устройство, называемое /dev/watchdog (major,minor=130,10) с помощью программы mknod. Затем вы можете использовать программу-демона watchdog, которая каждую минуту проводит запись на это специальное устройство. Если ядро обнаружит, что демон не делал записи на устройство в течение одной минуты, ядро перезагрузит систему. /dev/nvram support (CONFIG_NVRAM) [N/y/m/?]

Это свойство позволяет создать специальное устройство /dev/nvram, чтобы иметь доступ для чтения и записи к энергонезависимой памяти часов реального времени. Оставьте значение по умолчанию, если только вы сознательно не выбирает другой режим. Enhanced Real Time Clock Support (CONFIG_RTC) [N/y/?]

Данное свойство позволяет создать специальное устройство /dev/rtc, которое может использоваться для доступа к часам реального времени

www.books-shop.com

470

Глава 20

системы. Оставьте значение по умолчанию, если только вы не делаете другой выбор сознательно.

Поддержка видео и джойстика

Поскольку вы конфигурируете серверную систему, мы предполагаем, что в системе нет оборудования захвата видео изображения или джойстиков, и поэтому вы должны принять ответы по умолчанию для следующих вопросов: Video For Linux (CONFIG_VIDEO_DEV) [N/y/m/?] Joystick support (CONFIG_JOYSTICK) [N/y/m/?]

Ftape, драйвер ленточного устройства

ЕСЛИ у вас есть ленточное устройство на основе контроллера гибкого диска, в этом месте нужно задать для него поддержку. Ftape (OIC-80/Travan) support (CONFIG_FTAPE) [N/y/m/?]

Файловые системы

В этом разделе вы конфигурируете ядро для различных свойств, характерных для файловых систем.

Quota support (CONFIG_QUOTA) [N/y/?]

Если вы хотите иметь встроенную в ядро поддержку для дисковых квот, скажите здесь «Y» («да»). Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] (Поддержка автомонтирования в ядре)

Если вы хотите, чтобы удаленные файловые системы, такие как файловые системы NFS, автоматически монтировались и демонтировались, укажите здесь поддержку для автомонтирования в ядре или с помощью модуля. Далее следуют различные вопросы о поддержке лицензированных файловых систем. Ответьте на них согласно своим требованиям: Amiga FFS filesystem support (CONFIG_AFFS_FS) [N/y/m/?] Apple Macintosh filesystem support (experimental) (CONFIG_HFS_FS) [N/y/m/?] DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] ISO 9660 COROM filesystem support (CONFIG_IS09660_FS) [Y/m/n/?] Microsoft Joliet CDROM extensions (CONFIG_JOLIET) [N/y/?] Minix f s . support (CONFIG_MINIX_FS) [N/y/m/?] NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?] OS/2 HPFS filesystem support (read only) (CONFIG_HPFS_FS) [N/y/m/?] /proc filesystem support (CONFIG_PROC_FS) [Y/n/?]

Файловую систему /proc необходимо иметь для любой современной системы Linux и поэтому настоятельно рекомендуется ответ по умолчанию. /dev/pts filesystem for Unix98 PTYs (CONFIG_DEVPTS_FS)

[Y/n/?]

Если вы выбрали поддержку для псевдотерминалов UNIX '98, вам необходимо будет добавить здесь поддержку файловой системы /dev/pts. ROM filesystem support (CONFIG_ROMFS_FS) [N/y/m/?]

Файловая система такого типа не нужна для большинства типичных систем. Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?]

Расширенная система fs является основной файловой системой для Linux и поэтому ответ по умолчанию становится обязательным. Ответы по умолчанию для следующих вопросов должны работать для большинства систем: System V and Coherent filesystem support (CONFIG_SYSV_FS) [N/y/m/?] UFS filesystem support (CONFIG_UFS_FS) [N/y/m/?]

www.books-shop.com

Конфигурирование ядра

471

Обратите внимание, что поддержка файловой системы UFS необходима, если вы выбрали монтирование дисковых разделов, созданных другими операционными системами, такими как Solaris яйб или BSD.

Сетевые файловые системы

Здесь вы сможете сконфигурировать ядро для сетевых файловых систем с дополнительными возможностями. Code filesystem support (advanced network fs) (CONFIG_CODA_FS) [N/y/m/?] Файловая система Coda еще не достаточно популярна, и поэтому мы не рекомендуем добавлять ее в ядро; вы могли бы выбрать поддержку для нее с помощью модуля. NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] Если вы планируете ввести NFS, используйте ответ по умолчанию. Emulate SUN NFS server (CONFIG_NFSD_SUN) [N/y/?] Если вы не хотите, чтобы сервер Linux NFS вел себя как сервер NFS на основе Sun, который позволяет клиентам NFS получать доступ к каталогам, являющимся точками монтирования в локальной файловой системе, оставьте значение по умолчанию без изменения. 8MB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS) [N/y/m/?] Если вы хотите монтировать файловые системы Windows 9sc/NT в системе Linux как файловые системы 8MB, необходимо сказать «Y» («да») или задать это свойство с помощью модуля. NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS) [N/y/m/?] Если вы не планируете монтировать тома NetWare в системе Linux, отставьте ответ по умолчанию.

Типы разделов

ЕСЛИ вы хотите иметь поддержку для дисковых разделов на основе BSD, Macintosh, Solaris и т.д., то ответьте на следующие вопросы соответствующим образом:

BSD disklabel (BSD partition table) support (CONFIG_BSD_DISKLABEL) [N/y/?] | Macintosh partition map support (CONFIG_MAC_PARTITION) [N/y/?] SMD disklabel (Sun partition tables) support (CONFIG_SMD_DISKLABEL) [N/y/?] Solaris (x86) partition table support (CONFIG_SOLARIS_X86_PARTITION) [N/y/?] В большинстве случаев достаточно ответов по умолчанию.

Драйверы консоли

В этом разделе вы сможете задать

VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] Если вы хотите иметь текстовую консоль VGA, оставьте значение по умолчанию. Video mode selection support (CONFIG_VIDEO_SELECT) [N/y/?] Если вы захотите иметь возможность определить текстовый режим при начальной загрузке ядра, задайте этот параметр или сохраните значение по умолчанию.

www.books-shop.com

472

Глава 20

Звук

Предполагая, что вам, вероятно, не нужно иметь звуковую карту в серверной системе, можно сохранить ответ йо умолчанию для следующего вопроса: Sound card support (CONFIG.SOUND) [N/y/m/?]

Статусная информация ядра

Единственный параметр, доступный в этом разделе, — поддержка ключа Magic SysRq. Если вы инициируете поддержку для этого ключа, отвечая «Y» («да») на следующий вопрос, вы сможете, нажав SysRq+Alt+PrintScreen, получить статусную информацию во время зависания системы. Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] Это полезно только для разработчиков ядра. Вы должны сказать здесь «N» («нет»). После ответа на все эти вопросы конфигурационный сценарий создаст файл .config в каталоге /usr/src/linux. Вы можете просмотреть содержимое этого файла, чтобы убедиться, что все свойства сконфигурированы правильно. Если вы не интересуетесь тем, каким еще образом можно конфигурировать ядро, а готовы компилировать ядро, пропустите следующие два раздела и изучайте с раздела «Компиляция, установка и начальная загрузка нового ядра». Использование make config для конфигурации ядра является длительным процессом. Однако он вполне подходит, если вам придется конфигурировать ядро через соединение Telnet на удаленном сервере. Интерфейс на основе командной строки подходит практически для любого случая и должен рассматриваться как метод конфигурирования, используемый по умолчанию.

Конфигурирование ядра с помощью make menuconfig

Одной из основных проблем с конфигурационным сценарием на основе выполнения make config является то, что если вы делаете ошибку, вы не можете вернуться назад, чтобы исправить ее, не запуская все сначала. Также вы не сможете просмотреть параметры настройки, если не будете использовать текстовый редактор для просмотра файла /usr/src/linux/.config вручную. Для исправления таких недостатков (по крайней мере, для начинающих хакеров ядра) существует команда: make

menuconfig

Она запускает управляемую с помощью меню конфигурационную утилиту, которая является более удобной для пользователя, чем сценарий make config. Экран основного меню показан на рис. 20.1. Интерфейс пользователя достаточно простой и легкий для навигации. Однако конфигурационные вопросы являются теми же самыми. Эта конфигурационная программа позволяет также сохранять и загружать конфигурационные файлы. Другими словами, можно создать множество конфигурационных файлов с различными параметрами настройки и использовать их для экспериментов с разными свойствами нового ядра. Сценарий make menuconfig достаточно удобен в применении, однако он накладывает дополнительные требования при удаленной конфигурации ядра. Например, если вы планируете конфигурировать и компилировать ядро через соединение Telnet на удаленном сервере, вы должны убедиться, что программа клиента Telnet на вашей стороне способна на успешную эмуляцию терминала. Это необходимо для полноэкранного приложения на основе меню. Также обратите внимание, что make menuconfig не является самым изысканным способом конфигурирования ядра. Лучше применить сценарий make xconfig.

www.books-shop.com

Конфигурирование ядра

Основной экран сценария make menuconfig

Конфигурирование ядра с помощью make xconfig Для этого метода конфигурирования ядра требуется система X Window. Так как мы не рекомендуем устанавливать системы X Window на серверные системы, мы не советуем вам использовать и данный метод. Однако на системах с X Window это предпочтительный метод конфигурирования ядра. На рис. 20.2 показано главное окно, где сценарий make xconfig (wish -f scripts/kconfig.tk) выполняется из X Window. Главный экран сценария make xconfig

Щелкните на любой кнопке для того, чтобы сконфигурировать определенный раздел или секцию всей конфигурации. Например, на рис. 20.3 представлено диалоговое окно свойств и типов процессоров (Processors). Этот интерфейс удобен для пользователя. Кроме того, щелкая на соответствующих кнопках, вы сможете открыть несколько секций. Если вы конфигурируете секцию Типы дисковых разделов (Partitions Type) и хотите Диалоговое окно свойств и типов процессоров

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

473

474

Глава 20

проверить, что вы инициировали поддержку файловой системы UFS в секции Файловые системы (Filesystems), можно нажать кнопки для этих двух секций и проверить значения параметров. Компиляция, установка и начальная загрузка нового ядра До компилирования ядра выполните: make dep Вы убедитесь, что все зависимости внутри исходного кода заданы правильно. Такая команда должна выполняться без ошибок, если только не существует проблем с исходном кодом ядра. Теперь для компилирования и создания сжатого ядря Linux выполните команду: make bzlmage Если вы определили любую часть ядра во время конфигурации как модуль, вы должны будете выполнить следующую команду, чтобы скомпилировать модули: make modules После того как вы скомпилировали модули, установите их в каталог /lib/modules/2.2.2, используя команду: make modules_install Скопируйте новое ядро в каталог /boot: ср

/usr/src/linux-2.2.2/arch/i386/boot/bzImage

/boot/vmlinuz-2.2.2

Скопируйте и переименуйте новый файл System.map в каталог /boot: ср /usr/src/linux-2.2.2/System.map /boot/System.map-2.2.2 Удалите существующую символьную ссылку для System.map: rm -f /boot/System.map Создайте новую символьную ссылку с именем /boot/System.map. In -s /boot/System.map-2.2.2 /boot/System.map Вам также необходимо создать новый начальный ramdisk: mkinitrd

/boot/initrd-2.2.2.img

2.2.2

Подготовьте LILO для нового ядра. Посмотрите в предыдущем разделе «Конфигурирование LILO» сведения о том, как можно создать новый конфигурационный сегмент в /etc/lilo.conf для нового ядра. Когда вы измените файл /etc/lilo.conf и выполните /sbin/lilo, можно будет перезагрузить систему и попытаться использовать новое ядро (см. раздел «Начальная загрузка с новым ядром»). Вы получите новое, специально сконфигурированное ядро, выполняющее все ваши приложения Linux. Не забудьте сделать новый загрузочный гибкий диск, используя команду mkbootdisk—device /dev/fdO 2.2.2. Бывают ситуации, когда изменяется не весь код ядра, а лишь его небольшие части. Вы должны узнать, как применить заплатку (патч) к исходному коду ядра и заново создать новое ядро. Внесение изменений в ядро Вы можете изменить необходимый код и снова скомпоновать ядро. Кроме того, возможно, внести изменения в исходный код ядра из каталога /usr/src с помощью следующей команды:

www.books-shop.com

475

Конфигурирование ядра

gzip -cd patchXX.gz | patch -pO

Если доступно несколько заплаток для ядра, применяйте изменения в определенном порядке. Другими словами, применяйте patohOLgz прежде чем применять patch02.gz и т.д. Для автоматизации этого процесса может использоваться сценарий patchkernel. Сохраните файлы изменений в каталоге /usr/src и из каталога /usr/src выполните: ./linux/scripts/patch-kernel

После внесения изменений в ядро следуйте инструкциям для компиляции и установки нового ядра. Так как современное ядро Linux поддерживает модули, которые могут автоматически загружаться и выгружаться с помощью демона kerneld, вам может потребоваться сконфигурировать один или несколько параметров, чтобы эти модули работали правильно. Вы можете использовать kernelcfg для этой работы.

Использование kernelcfg

Вся информация о конфигурации модулей хранится в /etc/conf.modules. Вы можете либо модифицировать этот файл вручную, либо использовать утилиту kernelcfg. На рис. 20.4 изображено главное окно kernelcfg.

Использование утилиты kernelcfg для конфигурирования модулей

С помощью интерфейса можно добавить, удалить или модифицировать информацию о конфигурации модуля. Чтобы понять, как конфигурировать модуль, посмотрим на файл /etc/conf.modules, которым управляет утилита kernelcfg. alias scsi_hostadapter ncr53c8xx alias ethO ne options ne io=0x340 irq=5 Чтобы добавить конфигурацию нового модуля, нажмите кнопку Add и выберите имя модуля из раскрывающегося меню (см. рис. 20.5). Добавление конфигурации нового модуля для kerneld

www.books-shop.com

476

Глава 20

Когда имя модуля выбрано из списка доступных модулей, можно щелкнуть на ОК, чтобы продолжить работу. Если модуль требует каких-то аргументов, можно добавить их в следующем окне (см. рис. 20.6). Добавление аргументов в конфигурацию

Когда вы добавите аргументы и щелкните на кнопке ОК в окне ввода аргументов, конфигурация нового модуля появится в главном окне. Вы можете также редактировать или удалить конфигурацию существующего модуля, используя подходящие кнопки, доступные в интерфейсе. Когда вы сделаете все изменения, перезапустите демон kerneld, щелкнув на кнопке Restart kerneld.

www.books-shop.com

Глава 21 Создание многосерверной Web-cemu

В этой главе: • Проектирование Web-сети • Циклическая DNS для выравнивания нагрузки • Аппаратное решение выравнивания нагрузки • Совместное использование Web-серверами дисками с помощью NFS • Распространение данных среди множества Web-серверов с помощью rdist

се системные администраторы сталкиваются с проблемой производительности сервера. Может случиться так, что ваш сервер окажется недостаточно мощным, чтобы справиться с нагрузкой. Что тогда делать? Есть два варианта: настроить сервер до предела его возможностей или взять еще один сервер для распределения нагрузки. Первый вариант многообещающий, но трудоемкий. Точная настройка ядра или серверных приложений может потребовать хорошего понимания работы вовлеченного в этот процесс программного обеспечения. После того как вы реализуете все хорошо известные приемы настройки, этого по-прежнему может оказаться недостаточно. Второй метод более реалистичен, особенно в связи с тем, что компьютеры на основе x86 становятся с каждым днем дешевле и быстрее. Лучше затратить меньше времени и усилий для настройки второго сервера, чтобы распределить нагрузку, чем проверять все трюки, имеющиеся в запасе у хакера Linux. Для

www.books-shop.com

Глава 21

478

реальной деятельности мы рекомендуем использовать подход с распределением нагрузки. Он более экономичен. Распределение нагрузки на множестве компьютеров не является новым решением. Оно стало просто более доступным в связи с низкой стоимостью ПК на основе x86 и Linux. В этой главе рассматривается использование сервера Red Hat Linux и аппаратное оборудование выравнивания нагрузки для создания высокопроизводительной Web-службы размещения (хостинга). Вы получите сведения о создании надежной сети со множеством служб. Предположим, что вы являетесь главным сетевым архитектором консалтинговой компании и вас попросили разработать высокопроизводительную Web-службу размещения для фиктивной компании с названием AMINEWS. Посмотрим на требования клиента.

Требования к Web-сети

AMINEWS хочет создать Web-службу размещения со следующими требованиями: • Один или несколько Web-серверов предоставляют Web-службу с выравниванием нагрузки для Web-сайта каждого клиента. Когда Web-сервер недоступен в связи с аварией, ошибкой приложения или повседневным обслуживанием, Web-сайты будут обслуживать оставшиеся Web-серверы. Web-служба не должна прерываться до тех пор, пока по крайней мере один Web-сервер доступен для обслуживания всех Web-сайтов. • Каждый клиентский сайт будет иметь уникальный домен, причем Web-сайт будет иметь URL следующего вида: http://www.client-domain.tld/. • Каждому клиенту должно быть разрешено обновлять свои Web-сайты с помощью FTP. Каждый клиент получит хост f t p . client-domain, tld как часть конфигурации DNS, который он будет использовать для обновления содержимого своего Web-сайта. • Клиентам должно быть разрешено использовать AMINEWS, так как он предоставляет централизованную службы сценариев CGI через центральный каталог cgi-bin. Поскольку многие приложения CGI AMINEWS записывают данные, должен существовать способ для их синхронизации между Web-серверами. Другими словами, если приложение CGI записывает файл данных, то он должен быть доступен для всех Web-серверов, чтобы другие приложения CGI могли использовать эти данные. • Клиентам должно быть разрешено иметь службу виртуальной почты SMTP. Каждый клиент будет также иметь одну или несколько учетных записей почты РОРЗ для доступа к почте непосредственно на сервере РОРЗ.

Проектирование Web-сети

Первый этап в проектировании сети — разработка некоторых схем. Самая первая схема сети будет простой (см. рис. 21.1). На диаграмме представлены две фермы (farm): ферма Web-серверов и ферма связанных сетевых служб. Ферма Web-серверов состоит из систем Web-серверов, а связанная ферма сетевых служб — из серверов DNS, SMTP, РОРЗ и FTP. Эти две фермы серверов соединены в единую сеть концентратором Ethernet, который связан с маршрутизатором, отвечающим за доставку трафика Интернета в сеть и из сети. Далее подумаем о способах выравнивания нагрузки Web-трафика среди серверов фермы Web-серверов. Одним из самых простых способов выравнивания нагрузки на несколько серверов является использование циклической конфигурации DNS. Об этой возможности более подробно см. в следующем разделе.,

www.books-shop.com

Создание многосерверной Web-сети

479

Схема простой сети

Циклическая конфигурация DNS ЕСЛИ вы уже прочитали раздел «Выравнивание нагрузки с помощью сервера DNS» в главе 10, вы знаете как работает циклическая DNS. Предположим, что AMINEWS собирается иметь только два Web-сервера в ферме Web-серверов — www1.aminews.com (192.168.1.10) и www2.aminews.com (192.168.1.20). Вы хотели бы распределить нагрузку для www.aminews.com на эти два сервера, используя циклическую конфигурацию DNS. В файле зоны ami news, com вы можете добавить такие строки: www1 IN www2 IN www IN www IN

A 192.168.1.10 A 192.168.1.20 CNAME wwwl CNAME www2

Перезапустите сервер имен и сделайте ping на хост wwwl. aminews. com. В выводе ping появится адрес 192.168.1.10. Остановите и снова запустите программу ping для того же хоста. Вы увидите, что в выводе ping появится второй IP-адрес. Это связано с тем, что предыдущая конфигурация приказывает серверу имен циклически проходить через записи CNAME для www. Другими словами, хост www. aminews. com является одновременно wwwl. aminews. com и www2.aminews.com. Теперь, когда кто-то входит в www. aminews. com, сервер имен будет выдавать первый адрес; для следующего запроса он будет вводить второй адрес. Он продолжит циклически повторять эти два адреса. Одним из недостатков циклической конфигурации DNS является то, что для сервера имен не существует способа узнать, какая система сильно загружена, а какая нет. Если по какой-то причине один из серверов отказывает или становится недоступен, циклический DNS будет по-прежнему регулярно возвращать IP-адрес неработающего сервера. Это могло бы создать хаос, так как некоторые пользователи могли бы получить доступ к узлу, а некоторые нет. Согласно требованиям к сети, это неприемлемо, поэтому вы должны найти другое решение.

www.books-shop.com

480

Аппаратное решение выравнивания нагрузки В последние годы было выполнено большое число разработок в области выравнивания нагрузки на основе специального оборудования. Многие известные компании-производители сетевого оборудования предоставляют теперь оборудование для реализации сетей с настоящим выравниванием нагрузки. Чтобы реализовать выравнивание нагрузки в сети AMINEWS, можно использовать оборудование, называемое директор (director). Обычно оборудование этого типа работает так, как показано на рис. 21.2.

Работа директора

Весь трафик Интернета, предназначенный для Web-серверов, направляется в оборудование директора. Директор выбирает Web-сервер на основе одного или нескольких алгоритмов. Например, директор может выбрать Webсервер, так как он менее всех занят в данный момент. Он может также указать Web-сервер, так как остальные серверы выключены. Другими словами, он будет использовать доступность сети и службы, а также производительность сервера для выбора определенного Web-сервера. Существует много устройств-директоров. Изучите их. Тогда вы сможете определить, какие из директоров подойдут для каждого конкретного случая. Вы должны будете поискать в специализированных журналах, посвященных сетям, рекомендации о том, как выбрать устройство, а также ознакомиться с материалами на Web-сайтах хорошо известных поставщиков сетевого оборудования. Предположим, что вы исследовали такие продукты и обнаружили следующее: • Local Director Это решение предложено хорошо известной компанией сетевого оборудования Cisco Systems, Inc. (http://www. Cisco, com/). • Ace Director Такое решение предоставлено другой хорошо известной компанией сетевого оборудования Alteon Networks, Inc. (http://www.alteon.com/). " Web Server Director Подобное решение предоставлено еще одной хорошо известной компанией сетевого оборудования RADWARE (http://www.radware.com/). Вы определили список подходящих устройств. Теперь необходимо исследовать, как они работают в реальной жизни. Одним из простейших способов узнать, как эти продукты сопоставимы друг с другом, состоит в исследовании рекомендаций и жалоб пользователей в Usenet. Вы можете отправить письмо

www.books-shop.com

Создание многосерверной Web-сети

481

в соответствующие группы новостей (связанные с компьютерными сетями, Web-серверами, и т.д.), в котором вы просите людей сообщить об отношении к этим устройствам. Вы можете найти документ, содержащий часто задаваемые вопросы (FAQ) о решениях по выравниванию нагрузки. Кроме того, вам надо позвонить в компанию, которая производит устройство, и поговорить с инженером (но не с торговым представителем) о ваших планах, спросить его мнение о пригодности продукта для конкретных условий. Скорее всего, вы услышите, как хорошо каждый продукт будет работать в вашем проекте. Любой инженер попытается продать свой продукт. Однако вы получите точную информацию о номере модели, ценах и пакетах поддержки. Когда вы провели поиски в Web и Usenet, поговорили с поставщиками и получили представление о том, как устройства сопоставимы друг с другом, вы сможете принять решение. Мы используем следующий прием: каждый поставщик получает 100 очков, причем, когда появляется негативная информация о продукте компании, мы снимаем у поставщика очки. Например, если десять человек жалуются на то, что трудно конфигурировать устройство из нашего списка, мы вычтем несколько очков из общего счета этой компании. Если инженеры в компании не нашли время, чтобы предоставить нам необходимую информацию, мы удаляем дополнительные очки из общего счета. Если в специализированном журнале рассматривается устройство из нашего списка и оно имеет низкую оценку, мы сбрасываем еще какое-то количество очков. В конечном счете мы получим очевидного победителя. Выбор правильного решения > для выравнивания нагрузки Мы рассматриваем два решения для выравнивания нагрузки: циклическую конфигурацию DNS и аппаратное решение на основе директора. В таблице 21.1 показаны сравнительные данные, которые помогут принять окончательное решение. Сравнение циклического DNS и аппаратного решения на основе директора

Свойство Выравнивает нагрузку на несколько серверов

Циклический DNS Да. Однако выравнивание происходит бессмысленно. Серверы выбираются в циклическом порядке

Устойчивость к ошибкам

Нет. Если сервер в циклической конфигурации DNS становится недоступным, в связи с аварией или отказом приложения (т.е. программного обеспечения Web-сервера) по какой-то причине, конфигурация DNS по-прежнему будет посылать трафик на неработающий сервер и, следовательно, создавать нежелательную ситуацию. Да. Любые изменения в конфигурации DNS, такие как добавление нового сервера в ферму не будет доступно, пока конфигурация DNS не будет распространена в Интернете Нет. Не существует способа управлять или воздействовать на схему распределения нагрузки

Задержка обновления DNS

Управляемый?

Директор Да. Сервер выбирается на основе его сетевой нагрузки, доступности нижележащего приложения и даже производительности Да. Если сервер потерпел аварию или по какой-то причине отказывает требуемое приложение, он будет удален из серверной фермы и никакой трафик не будет направляться на неработающий сервер

Нет. Так как новый сервер остается позади директора, как только директор узнает о сервере, он может быть привлечен к обслуживанию Да. Директор может приказать распределять нагрузку на основе сетевой нагрузки, доступности самого приложения и производительности. Обычно директор будет сообщать статистику и другую ценную, имеющую отношение к управлению информацию для точной настройки схемы выравнивания нагрузки

www.books-shop.com

482

Глава 21

Как можно видеть аппаратное решение предпочтительнее циклической конфигурации DNS. Если бюджет позволяет, мы рекомендуем использовать именно его. В этом примере предположим, что вы выбрали Web Server Director (в частности, модель WSD Pro) компании RADWARE. Посмотрим на новую схему сети. В рис.21.3 объединены рис.21.1 и 21.2. Новая и усовершенствованная схема сети

Директор WSD Pro находится между маршрутизатором и двумя фермами серверов. Это сделано для того, чтобы позволить директору контролировать весь трафик. Однако если вы хотите, вы могли бы оставить ферму связанных сетевых служб снаружи. Но так как компания AMINEWS могла бы захотеть выравнивать нагрузку этих служб в будущем, то лучше поместить обе фермы под управление директора. Ферма связанных сетевых служб может быть совокупностью ферм служб, таких как DNS, SMTP/POPS, FTP и т.д. Однако, предположим, что AMINEWS хочет использовать два Web-сервера в ферме Web-серверов и в настоящее Схема избыточной сетевой службы

www.books-shop.com

Создание многосерверной Web-сети

483

О время только один сервер для DNS, FTP, SMTP и РОРЗ. Идея состоит в том, чтобы создать сетевую конфигурацию, которая работает с минимальным числом серверов и, тем не менее, допускает простой способ интеграции дополнительных серверов, так чтобы сеть могла стать избыточной. Мы имели дело с первым требованием сети. Согласно второму требованию, каждый клиент должен иметь собственный домен. Предоставьте службу DNS для каждого клиента. Это в действительности вопрос конфигурации программного обеспечения, так как можно сконфигурировать сервер DNS для предоставления службы DNS доменов клиентов. Подобные требования не влияют на проект сети. Однако третье и четвертое требования влияют. Третье требование утверждает, что клиенты должны быть допущены к файлам FTP в своих учетных записях с помощью хостов f t p . c l i e n t - d o m a i n . t l d . Кроме того, эти файлы должны быть доступны на Web-серверах в ферме Web-серверов. Четвертое требование утверждает, что файлы и каталоги будут создаваться приложениями CGI, которые должны совместно использоваться Web- серверами. На рис. 21.5 представлена реалистичная схема сети. Реалистичная схема сети

Эта схема показывает предложенные имена хостов для каждой машины. Единственный сервер в ферме связанных сетевых служб имеет несколько имен хостов. Имя хоста ns. aminews. com будет использоваться для служб DNS, имя хоста mail.aminews.com предназначено для SMTP/POPS, а имя хоста ftp.aminews.com будет вводиться для службы FTP. Web-серверы в ферме Web-серверов называются wwwt. aminews. com и www2. aminews. com. Наконец, сам директор WSD Pro называется wsdpro. aminews. com. Так как AMINEWS будет (сейчас) использовать единственный сервер (ns.aminews.com) для всех связанных сетевых служб, хосты f t p . client-domain, tld должны быть псевдонимами этого хоста. Если клиенты имеют учетную запись на этой машине, как доставить файлы из этой машины на ферму Web-серверов? Один из способов — использовать NFS. Можно смонтировать один или несколько дисков на этом сервере и сделать диски доступными для Web-сервера с помощью NFS. Другими словами, вы должны будете превратить сервер ns. aminews. com в сервер NFS, так чтобы все Web-сайты стали клиентами NFS. Это имеет смысл для четвертого требования. Если вы используете файловую систему NFS для обеспечения совместного доступа к файлам, все Web-серверы, выполняющие приложения CGI, будут читать и

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

484

Глава 21

писать данные в одной и той же файловой системе, и, следовательно, не будет никаких проблем с синхронизацией данных. Однако NFS снижает производительность. Никто не будет спорить, что обслуживание Web-сайтов с локальных дисков выполняется значительно быстрее, чем обслуживание их из смонтированной файловой системы NFS. Поэтому необходимо прийти к какому-то компромиссу. Один из возможных вариантов состоит в том, что NFS монтирует только небольшую файловую систему, которая должна совместно использоваться Web-серверами, чтобы избежать каких-либо проблем синхронизации. Это мог бы быть каталог на сервере ns! aminews. com, который будет содержать файлы данных и каталоги, предназначенные для приложений CGI. Остальные имеющие отношение к Web-сайту файлы должны быть распространены с помощью другого метода. В главе 16 вы узнали об использовании rdist для распространения файлов; эта технология может использоваться и здесь. Поэтому вы можете указать rdist, чтобы распространить все файлы и каталоги Web-сайта на Web-серверы и смонтировать только центральный каталог данных CGI с помощью NFS. Для сокращения совместного использования полосы пропускания трафиком NFS, rdist и трафиком Интернета, может быть создана локальная сеть (см. рис. 21.6).

Использование локальной сети для трафика NFS и rdist

Здесь трафик NFS и rdist будет направляться через отдельную локальную сеть, чтобы он не мешал трафику Интернета. За счет такой конфигурации файловая система NFS станет недоступной для внешнего мира. Сервер будет более защищен. Использование второй локальной сети для трафика NFS и rdist потребует, чтобы каждый сервер имел два сетевых интерфейса. Наконец, пятое требование относится к программной конфигурации, в которую вовлечено конфигурирование почтового сервера SMTP/PIOP3 на ns.aminews.com; поэтому оно не связано с проектированием сети. Мы рассмотрели все требования и разработали проект сети, который работает. Следующий этап разработки — распределение IP-адресов в сети.

www.books-shop.com

Создание многосерверной Web-сети

485

Выделение IP-адресов Каждый сетевой интерфейс должен иметь IP-адрес. Так как каждый серверный компьютер в этой сети имеет два интерфейса (один для трафика Интернета и один для трафика локальной сети NFS/relist), каждый из этих серверов будет иметь два IP-адреса. Директор WSD Pro также имеет два интерфейса. Рис. 21.7 показывает возможное распределение IP-адресов. Возможное распределение IP-адресов

Если вы посмотрите более внимательно, то заметите, что здесь существует три сети. Магистральная сеть NFS на левой стороне рисунка показана как сеть 192.168.1.0, а правая сторона рисунка показывает сеть 192.168.2.0, которая соединяет серверы с директором WSD Pro. Порт #1 устройства WSD Pro соединен с маршрутизатором через сеть 207.177.175.0. Две внутренние сети 192.168.1.0 и 192.168.2.0 не маршрутизируются через Интернет. Магистральную сеть NFS 192.168.1.0 не нужно видеть никакому компьютеру, кроме локальных серверов, поэтому использование адресов 192.168.1.хне создает никаких проблем. Сеть 192.168.2.xвидна только серверным компьютерам и директору WSD Pro. Поэтому нет необходимости иметь маршрутизируемый в Интернете сетевой IP-адрес. И так как эта сеть является локальной по отношению к серверам и директору WSD Pro, использование адресов 192.168.х.л;не создает никаких проблем. Однако маршрутизатор и сетевой интерфейс #1 устройства WSD Pro должны быть в маршрутизируемой сети, так как пакеты Интернета должны проходить через эту сеть к директору WSD Pro. Здесь мы использовали сеть 207.177.175.0 в качестве примера. В реальной жизни это будет каким-нибудь адресом, предоставленным провайдером Интернета. Обратите внимание, что сетевой интерфейс #1 директора WSD Pro имеет четыре IP-адреса: от 207.177.175.60 до 207.177.175.63. Хотя директор WSD Pro может быть сконфигурирован так, чтобы иметь до 512 IP-адресов, в этом примере нужны только три IP-адреса для этого интерфейса. Вам необходим один IP-адрес (207.177.175.60) для фермы серверов DNS/FTP/SMTP/POP3, один IP-адрес (207.177.175.61) для фермы Web-серверов и еще один IP-адрес (207.177.175.63) для самого директора WSD Pro. Так как этот пример

www.books-shop.com

486

Глава * '
.fvwm2rc Когда вы создали такой конфигурационный файл и задали fvwm2 в качестве менеджера окон в своем .xinitrc, он будет выполняться с помощью конфигурации из файла .fvwm2rc вашего домашнего каталога. Обратите внимание, что если вы уже имеете файл .fvwm2rc, вы можете переименовать его, прежде чем выполните предыдущую команду. Кроме того, вы можете редактировать файл .fvwm2rc вручную, чтобы добавить или удалить дополнительные изменения. Если пользователям, которые применяют fvwm2 в вашей системе, понадобиться согласованная среда, вы можете скопировать модифицированный файл .fvwm2rc в каталог /usr/lib/Xll/fvwm2. Аналогично wmconfig будет позволять создавать и модифицировать конфигурации для других оконных менеджеров, таких как fvwm95, afterstep, mwm, anotherlevel, icewm, wmaker и kde. Если вы введете команду wmconfig без аргументов, она покажет поддерживаемые оконные менеджеры в строке параметра —output.

Модификация вида клиентских приложений

Когда вы выполняете клиентское приложение X, такое как xterm или калькулятор (xcalc), используемое по умолчанию внешнее представление приложения обычно поступает из файла каталога /usr/XllR6/lib/Xll/app-defaults. Например, используемое по умолчанию внешнее представление xcalc (калькулятора) вводится из файла /usr/XHR6/lib/Xll/app- defaults/XCalc. Вы можете изменять эти используемые по умолчанию файлы, чтобы получить другой внешний вид для себя и/или своих пользователей. Не забудьте сделать резервную копию каждого файла, который вы хотите модифицировать. Если вы заинтересованы в изменении внешнего представления только нескольких приложений для самого себя, можно создать файл .Xresources в домашнем каталоге и добавить строки, используя следующий синтаксис: : Например:

www.books-shop.com

521

Конфигурирование X Window

XCalc*bevel. Background: red Здесь мы изменили используемый по умолчанию цвет фона (черный) цифрового дисплея программы xcalc, поместив показанную строку в файл .Xresources. Чтобы идентифицировать, какой ресурс отвечает за изменение этого конкретного цвета, мы посмотрели файл /usr/XHR6/lib/Xll/appdefaults/Xcalc. Когда ресурс был найден, мы скопировали его в файл .Xresources и поместили в начале строки имя приложения (XCalc). Если вы используете файл .xinitrc из домашнего каталога, вы должны поместить xrdb -merge $HOME/. Xresources в него перед загрузкой любых клиентских приложений. Всякий раз, когда вы добавляете или изменяете ресурсы в файле .Xresources, можно выполнить эту команду из командной строки, чтобы интегрировать изменения ресурсов с текущим рабочим окружением X. Мы узнали, как запускать X Window с помощью xinit и startx из командной строки, но как загрузить свою систему в X Window? Ответом является xdm или менеджер дисплея X. Использование xdm или менеджера дисплея X ЕСЛИ вы хотели бы предоставить интерфейс аутентификации пользователей на основе GUI, то менеджер дисплея X или xdm является требуемым ответом. Используя xdm, можно аутентифицировать пользователей с помощью графического экрана регистрации и провести их прямо в операционную среду X Window. Назначение этой программы состоит в предоставлении служб, подобных getty и login. Менеджер дисплея можно запустить следующим образом:

xdm & Конфигурационные файлы xdm расположены в каталоге /usr/XllR6/lib/Xll/xdm. Файл xdm-config существует для конфигурирования регистрации внешнего вида экрана. Xsetup_0 используется для задания xdm, тех программ, которые должны запускаться во время запуска X. Используемый по умолчанию Xsetup_0 показан здесь: #!/bin/sh /usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon \ -notify -verbose -fn fixed -exitOnFail /usr/X11R6/bin/xbanner Этот файл запускает программы xconsole и xbanner, когда пользователь аутентифицирован, что практически бесполезно для большинства пользователей. Следовательно, вы должны изменить это на что-то более подходящее. Например, можно было бы использовать программу xv для задания фона операционной среды X для вашей организации. Или можно запустить несколько приложений, которые обычно выполняются большинством пользователей, такие как xmailbox. Менеджер дисплея X может выполняться автоматически после начальной загрузки, путем изменения используемого по умолчанию уровня выполнения на 5. Чтобы изменить уровень выполнения системы на 5, переделайте следующую строку в файле /etc/inittab: id:3:initdefault: Замените 3 на 5 и проверьте, что в этом же файле имеется следующая строка: х:5:respawn:/usr/bin/X11/xdm-nodaemon Так как большинство системных администраторов работает в неоднородной сетевой операционной среде, состоящей из Linux, MS Windows 9х/2000 и других операционных систем, то, вероятно, в то или иное время вам будет необходимо интегрировать Linux и MS Windows Эх/2000. В следующем разделе мы рассмотрим способы реализации X Window в среде MS Windows 9x/2000.

www.books-shop.com

Глава 22

522

Использование XFree86 в Windows 9x/2000

Большинство администраторов Linux не любят работать с платформами MS. Однако проверка показывает, что во многих организациях существует больше систем MS Windows, чем Linux. В таком случае разумные администраторы Linux перестанут бороться со сложившейся ситуацией и начнут приобщать пользователей к Linux косвенным путем. Например, можно позволить пользователям MS Windows использовать X Window в их системе. Таким образом пользователи смогут познакомиться с мощным миром Linux без необходимости устанавливать Linux на своих системах. Чтобы выполнять приложения X Window в MS Windows 9x;/2000, вам необходимо поработать с сервером X Window на этой платформе. Доступно множество коммерческих пакетов программного обеспечения X Window для MS Windows 9х/2000. Здесь мы используем Micro X-Win32, который считается легким для установки и сопровождения.

Micro X-Win32

Можно загрузить пробную версию X-Win32 из StarNet Communications Corporation по следующему URL: http://www.starnet.com/. Пробная версия продукта работает точно так же, как и рабочая версия: единственное ограничение состоит в том, что пробную версию можно использовать только в течение двух часовых сеансов. После каждого двухчасового периода вы должны будете перезапускать сервер X Window на стороне MS Windows. Так как ни одно из свойств не удалено из пробной версии, это ограничение не является слишком обременительным. В конце концов, если вы используете программу, нужно за это платить. Когда вы загрузите пробную версию, которая обычно представлена в самораспаковывающемся исполняемом файле,-извлеките файлы, запуская исполняемый файл. Он будет автоматически запускать установку. Вас попросят указать каталог, предназначенный для установки. После завершения установки, используйте сервер X Window в MS Windows так, чтобы ваше клиентское приложение X сервера Red Hat Linux выполнялось бы на системе MS Windows, которая, в свою очередь, выполняет локальный сервер X Window. До выполнения клиента X на Red Hat Linux сконфигурируйте Micro Х-Win32 с помощью программы Х- Util32, поставляемой с дистрибутивом. Сделайте следующее: • Выполните программу Х-Util32, которая выведет экран как на рис. 22.10. Главное окно утилиты X-Win32

" В меню выберите Session -> Edit sessions. Выделите запись о существующем сеансе, таком как sun. Появится диалоговый экран с информацией о текущем сеансе (рис. 22.11). • Прежде всего нужно будет переименовать запись о сеансе, вводя новое имя в поле Session name. Это может быть любое имя. Затем выберите метод соединения. У вас есть три варианта: rsh (удаленная оболочка), гехес (удаленный вызов) и XDMCP (для использования с xdm). Вы должны выбрать наиболее подходящий способ для своей среды Red Hat Linux X Window. Например, если на стороне Linux используется xdm, выберите XDMCP. • Если вы захотите использовать вариант удаленной оболочки, то вы должны иметь файл .rhosts в домашнем каталоге пользователя Linux. Он должен содержать имя хоста или IP-адрес системы MS Windows.

www.books-shop.com

Конфигурирование X Window

Редактирование записи о существующем сеансе

• Вы должны также убедиться, что в файле /etc/inetd.conf не отключены строки rsh или гехес. В целях защиты можно запретить кому-либо использовать rsh или гехес с помощью файла /etc/hosts.deny и позволить только хостам, которым специально разрешены .такие службы в файле /etc/hosts.allow. Об оболочке TCP читайте в главе 18 «Безопасность». • Если вы хотите автоматически запускать этот сеанс, каждый раз, когда запускается X-Win32, можно щелкнуть на кнопке Auto startup. Также убедитесь, что установлен параметр настройки Windows — «Switch to multiple windows» («Переключиться на несколько окон»). • Введите имя хоста сервера Red Hat Linux, где будет располагаться приложение X. • Введите имя пользователя в поле Login. Если выбран параметр удаленного выполнения (гехес), необходимо вводить пароль всякий раз, когда вы захотите создать соединение сеанса. Если вы предпочитаете вводить пароль только один раз, укажите его в поле password, которое появится, когда вы выберите параметр гехес. • В поле Command укажите команду, которую хотите выполнить. Обычно будет выполняться xterm. Поэтому можно задать в этом поле значение: /usr/bin/X11/xterm -Is -display SDISPLAY. • Сохраните измененный сеанс и выйдите из приложения X-Util32. Теперь вы готовы выполнить новый сеанс. Щелкните на значке X-Win32 панели задач и выберите меню Sessions. В меню Sessions укажите имя измененного сеанса. Если вы соединяетесь с помощью гехес, вас попросят ввести пароль. Когда вы успешно аутентифицируетесь, в системе MS Windows появится xterm (или то приложение, которое вы ввели в поле Command при редактировании этой записи в X-Util32). Если вы через несколько секунд не увидите приложение, вернитесь к значку XWin32 панели задач. Введите команду Show Messages (Показать Сообщения) и попробуйте выполнить приложение еще раз. Следите за любыми ошибками полномочий в окне сообщений. Если вы получите ошибки полномочий, то либо вы не включили службу гехес или rsh в /etc/inetd.conf, либо забыли перезапустить сервер inetd после изменения файла /etc/inetd.conf, либо вы не настроили файл .rhosts только для сеанса rsh. Убедитесь, что в файл .rhosts может писать только владелец; все остальные должны иметь доступ к этому файлу только для чтения. В этом месте вы должны получить приложение X Window, выполняющееся под управлением сервера Micro X-Win32. Если вы предпочитаете запустить

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

523

524

Глава 22

менеджер X Window, такой как fvwm2 или openstep, и выполнять все приложения X Window как обычно (т.е. как если бы вы были в системе Red Hat Linux), вы должны сделать следующее. • Используя ХUti132 создать или отредактировать сеанс. Введите имя хоста, имя пользователя для регистрации и метод соединения (rsh, rexec). Выберите параметр «Switch to single window» («Переключиться в одно окно») и введите такую строку в качестве Commnad: fvwm2 -display IDISPLAY

* He забудьте заменить fvwm2 вашим любимым менеджером X Window. Сохраните новый (или отредактированный) сеанс. Закройте теперь все сеансы клиентов X Window, которые уже запущены. Когда все соединения X будут закрыты, запустите новый сеанс. Вы должны увидеть одно большое окно, где загружен ваш менеджер X Window. Теперь вы можете использовать-X Window, как если бы вы выполняли его с консоли системы Red Hat Linux. В случае проблем познакомьтесь с информацией, находящейся в интерактивной справочной системе. С помощью Micro X-Win32 можно также создать аутентифицированное соединение на основе xdm.

www.books-shop.com

Глава 23 Использование системы X Window

В этой главе: • Использование AnotherLevel • Использование GNOME

отличие от Microsoft Windows 9x/NT/2000, система X Window предоставляет вам гибкость в выборе собственного оконного менеджера. Оконный менеджер является программой, отвечающей за общее внешнее представление среды X. Рассмотрим несколько популярных оконных менеджеров.

Использование AnotherLevel

AnotherLevel в действительности является модифицированной конфигурацией оконного менеджера fvwm2. Если вы запустили только X, используя xinit, и хотите запустить AnoiherLevel, введите команду из используемого по умолчанию xterm: fvwm2

-cmd

FvwmM4

/etc/X11/AnotherLevel/fvwm2rc.m4

&

Внешне эта оконная среда похожа на Windows 9x/NT/2000. На рис. 23.1 показан рабочий стол X Window, выполняющий AnotherLevel. Для того, кто перешел на Linux после MS Windows, такое совпадение может показаться удобным. Конфигурационные файлы для AnotherLevel хранятся в каталоге /etc/Xll/AnotherLevel. AnotherLevel имеет несколько усовершенствований, включая wmconfig. Используя wmconfig, можно сократить время запуска и разрешить более легкую модификацию прикладных меню. Вспомните, что если вы изменяете

www.books-shop.com

Глава 23

526

Рабочий стол X AnotherLevel

файлы в этом каталоге, вы изменяете внешнее представление AnotherLevel для всех пользователей, которые не используют персонализированные рабочие среды. Если вы хотели бы изменить внешнее представление для определенного пользователя, вы должны скопировать все файлы из каталога /etc/X11/ AnotherLevel в домашний каталог пользователя. Убедитесь, что вы переименовали каждый из файлов и теперь любое имя файла начинается с ведущей точки и не имеет расширения .т4. Например, вам нужно скопировать /etc/Xll/AnotherLevel/fvwm2rc.menus.m4 как .fvwmSrc.menus в домашний каталог пользователя. Затем вы сможете изменить их по своему усмотрению. Предположим, что вам не нравится способ, каким изображается программа xclock в используемой по умолчанию конфиВнешний вид xclock гурации AnotherLevel, как показано на рис. 23.2. в AnotherLevel Используемое по умолчанию окно для xclock фиксировано и имеет минимальный размер. Чтобы изменить его, необходимо модифицировать конфигурационный файл .fvwm2rc.defstyles. Используемая по умолчанию версия файла показана на листинге 23.1 (в переводе на русский язык). Листинг 23.1. Файл .fvwm2rc.defstyles divert(-1)

# AnotherLevel - A FVWM2 Configuration . # Copyright (C) 1996, 1997 Red Hat Software, Inc # # $Id: fvwm2rc.defstyles.m4, v 1 . 1 1998/04/22 04:22:31 gafton Exp $ # # Эта программа является свободно распространяемым программным # обеспечением: вы можете распространять его и/или модифицировать # на условиях Главной общественной лицензии GNU, как опубликовано # организацией Free Software Foundation; либо версии 2 Лицензии, либо # (по вашему выбору) любой более поздней версии. # # Эта программа распространяется в надежде, что она будет полезна,

www.books-shop.com

527

Использование системы X Window

# но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без предполагаемой # гарантии ТОВАРНОГО СОСТОЯНИЯ или СООТВЕТСТВИЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. # Смотрите подробности в Главной общественной лицензии GNU. # # Вы должны получить копию Главной общественной лицензии GNU вместе # с этой программой; если это не так, напишите в Free Software Foundation, # Inc., 675 Mass Ave. Cambridge, MA 02139, USA. # # Эта работа получена из: # TheNextLevel # Copyright 1996 By Greg J. Badros # распространяемой согласно Главной общественной лицензии GNU. #

divert # Помните, параметры являются суммируемыми - они подвергаются # операции "ИЛИ" вместе. # Также обратите внимание, что некоторые их них являются "FvwmAlias".. . # Кроме того, посмотрите макрос m4 FvwmAlias и следующие строки. Style '"Fvwm*" MinimalDecoration Style "«clock" StickyOnTop, CirculateSkip, MinimalDecoration Style "xosview" StickyOnTop, CirculateSkip, MinimalDecoration

Style "«xbiff" Style "xeyes"

StickyOnTop, CirculateSkip, MinimalDecoration MinimalDecoration, CirculateSkip

Style "xload"

StickyOnTop, MinimalDecoration, CirculateSkip

Style "ppp" Style "Msgs"

StickyOnTop, MinimalDecoration, CirculateSkip CirculateSkip

Style "*onsole"

CirculateSkip

Style ifdef Style Style ' )

MinimalDecoration, CirculateSkip ' ', Icon xterm.xpm Icon xterm.xpm

"xman" ('NO_ICONS', "*xterm*" "«shell*"

Строки с ведущими символами «#» интерпретируются как комментарии и игнорируются. Строка, которая заставляет окно xclock выглядеть фиксированным и с минимальными украшениями, является вторым определением style. Оно определяет стиль для всех программ, которые имеют названия, оканчивающиеся на «clock». Следовательно, программа xclock получает используемый по умолчанию стиль окна StickyOnTop, CirculateSkip и MinimalDecoration. Хотя эти названия стилей предоставляют ключ к тому, что они делают, чтобы узнать о них больше, прочтите справочные man-страницы для fvwm2. Чтобы изменить стиль xclock и для всех остальных программ, имеющих в конце своего имени «clock», можно изменить вторую строку стилей в предыдущем файле. Вы можете просто отключить ее, поместив символ комментария перед строкой. Изменив этот файл, перезапустите оконный менеджер. Выбирайте параметр Restart в меню Exit Fvwm, чтобы получить другое представление xclock, как показано на рис. 23.3. Если вы изменили эти файлы при выполнении Another Level, используйте параметр Restart в меню Exit Fvwm, чтобы перезагрузить конфигурацию. После того как оконный менеджер перезапущен, можно выполнить программу xclock и увидеть различие во внешнем виде (см. рис. 23.3). Другое При изменении конфигурационных файлов для Anotherпредставление xclock Level можно получить внешнее представление, которое вас устраивает. Если вы предпочитаете запускать определенные приложения по умолчанию, можно вводить их автоматически, помещая их в свой файл .xinitrc. Например, если вы

www.books-shop.com

528

Главе 23

предпочитаете делить пространство своего экрана между несколькими приложениями, такими как xterm и другими утилитами, вы можете запускать их по Своему усмотрению. Для этого: 1. Запустите приложения и разместите их по своему желанию. 2. Щелкните на меню Start и выберите параметр Save desktop to new.xinitrc («Сохранить рабочий стол в new.xinitrc») в подменю Preferences. 3. Когда файл new.xinitrc сохранен в домашнем каталоге, используйте текстовый редактор для переноса его содержимого в существующий файл .xinitrc. Если у вас нет еще .xinitrc, переименуйте new.xinitrc в .xinitrc. В следующий раз, когда вы будете выполнять X Window с помощью startx, будет считываться .xinitrc и будут автоматически загружаться приложения, которые вы хотели бы выполнять по умолчанию. Прочтите «Изменение внешнего вида менеджеров окон» в предыдущей главе, чтобы узнать о том, как использовать программу wmconfig для изменения внешнего представления менеджеров окон. Существует множество других менеджеров окон. Фактически, можно попробовать несколько менеджеров окон, таких как AfterStep, WindowMaker, Lesstif WM и FVWM95, с помощью переключения менеджера окна в меню Exit Fvwm, как показано на рис. 23.4.

Запуск другого менеджера окон из AnotherLevel

Далее представлено несколько снимков с экрана некоторых доступных менеджеров окон. На рис. 23.5 показан менеджер окон fvwm.

Пример рабочего стола fvwm

www.books-shop.com

Использование системы X Window

529

Он похож на AnotherLevel — конфигурацию менеджера окон на основе fvwm2. На рис. 23.6 показан пример рабочего стола WindowMaker. Пример рабочего стола WindowMaker

Лично нам, как владельцам рабочей станции NeXT, нравится внешний вид WindowMaker, который эмулирует оконную среду NEXTSTEP. Этот оконный менеджер имеет простое и элегантное представление, которое устраивает многих пользователей NeXT. Чтобы WindowMaker стал используемым по умолчанию менеджером окон, замените текущий менеджер окон в .xinitrc на строку: /usr/X11R6/bin.wmaker & После исследования всех доступных параметров вы найдете оконный менеджер, который вам подойдет. Следующая вещь, которую вы могли бы попробовать — это Среда модели сетевых объектов GNU (GNOME). Использование среды рабочего стола GNOME Основная цель проекта GNOME состоит в предоставлении законченной, дружественной пользователю среды рабочего стола, использующей только Open Source, т.е. свободно распространяемое программное обеспечение. Официальный Web-узел этого проекта находится на следующем URL: h t t p : // www.gnome.org/. Официальный компакт-диск Red Hat Linux поставляется с программным обеспечением GNOME. Однако вы всегда можете загрузить самые последние пакеты RPM с указанного Web-сайта или с одного из его зеркал. Так как GNOME развивается быстро, мы рекомендуем, чтобы вы посетили подобный Web-сайт, чтобы узнать о самой последней версии и попробовали ее на практике. Прежде чем вы сможете установить имеющие отношение к GNOME пакеты RPM, необходимо убедиться, что указаны пакеты umb-scheme, xscreensaver и guile. Например, чтобы проверить, установлен ли уже пакет urnb-scheme или нет, выполните: rpift -q umb-scheme Если один или несколько из этих необходимых пакетов не установлены, задайте их с компакт-диска Red Hat Linux. Затем вы сможете установить все пакеты GNOME, выполняя следующую команду из каталога gnome вашего компакт-диска Red Hat Linux:

install-gnome

www.books-shop.com

530

Глава 23

Это запустит управляемую с помощью меню программу установки, которая попросит вас выбрать различные компоненты GNOME. Bbi можете не устанавливать пакеты разработки, если вы не планируете разрабатывать приложения для GNOME. Когда вы установили пакеты GNOME, можно запустить ваш любимый оконный менеджер и загрузить рабочий стол GNOME, выполняя команду: gnome-session &

Если вы предпочитаете загружать рабочий стол GNOME по умолчанию, измените файл .xinitrc и добавьте следующую строку перед тем, как вы загружаете оконный менеджер: exec gnome-session

Когда вы запустите gnome-session в первый раз, вы увидите окно Help Browser и появится GNOME Panel (панель), как показано на рис. 23.7. Среда GNOME

Стилизованный значок ступни, который виден в нижнем левом углу рисунка, является кнопкой главного меню. Это меню встроено в панель. Она является сердцем интерфейса GNOME. Данная панель используется как репозитарий приложений, апплетов и главного меню. Вы можете запустить любое из предварительно загруженных приложений, нажимая кнопку главного меню. На рис. 23.7 представлены параметры меню первого урЪвня, которые могут быть раскрыты при выборе одного из параметров. Кнопка левой стрелки рядом со значком ступни (т.е. кнопкой главного меню) или кнопка правой стрелки в правом нижнем углу (не видная на рисунке) позволяет сократить панель до размера самой кнопки. Можно также сконфигурировать панель, чтобы прятать ее автоматически или перемещать к другому краю экрана. Для этого служит средняя кнопка мыши. Панель конфигурируется с помощью параметров, доступных в меню панели (Panel) главного меню. Вы можете также добавить новые панели на экран. Чем больше вы используете GNOME, тем больше убеждаетесь в его удобстве для пользователя. Теперь, когда вы исследовали несколько возможностей создания удобной среды X Window, выполните реальные действия в этой среде.

www.books-shop.com

531

Использование системы X Window

Использование X Window для администрирования Некоторые приложения X Window могут облегчить выполнение ряда системных административных задач. Посмотрим на то, как можно управлять пакетами RPM, используя программу glint. Использование glint Эта программа является в действительности графическим интерфейсом для управления пакетами RPM. Вы можете выполнить ее из xterm следующим образом: glint & Вы увидите окно, как на рис. 23.8. Оно показывает папки, содержащие вложенные папки и/или имена пакетов RPM. Это предустановленные пакеты вашей системы. Установленные пакеты RPM

Программа glint позволяет вам устанавливать, удалять, запрашивать, проверять и модернизировать пакеты RPM, используя интерфейс пользователя типа «укажи и щелкни». По умолчанию glint ищет пакеты RPM в каталоге /mnt/cdrom/RedHat/RPMS. Если ваш компакт-диск Red Hat Linux расположен где-то в другом месте или вы хотели бы управлять пакетами RPM, которые расположены в некоторой другой области, вы можете заставить glint проводить поиск в другом месте: 1. Нажмите кнопку Configure. Появится окно, показанное на рис. 23.9. изменение

местоположения пакетов

2. Измените путь доступа к пакетам (Package path) на желаемое местоположение и щелкните на ОК или Save. Чтобы загрузить информацию о доступных пакетах в текущем каталоге размещения пакетов, щелкните на Availbale. Это заставит glint сканировать местоположение пакетов в поисках доступных файлов RPM и загрузить о них информацию. Когда glint выполнит сканирование каталога, появится окно Avialable Packages (Доступные пакеты). Чтобы просмотреть категорию пакетов, два раза щелкните на значке папки для этой категории. Например, чтобы просмотреть пакеты в категории X11, дважды щелкните на значке X11. Каждая папка может содержать дополнительные вложенные папки. Когда вы два раза щелкните на конечной

www.books-shop.com

532

Глава 23

папке, содержащей пакеты RPM, вы увидите пакеты. Например, папка XII/ Utilities имеет пакеты, показанные на рис. 23.10. Найденные glint доступные пакеты RPM X11/Utilities

Для того чтобы выбрать пакет, щелкните на нем мышью. Вы можете выделить любое число пакетов. Например, когда вы щелкните на двух пакетах, они выделятся, как показано на рис. 23.11. Изображение И выделенных пакетов |

RPM

^

Чтобы вернуться в родительскую папку вложенной папки, щелкните на папке со значком двойной стрелки направленной вверх. Если вы не уверены, что делает пакет, вы можете запросить выделенный пакет с помощью кнопки Query. Экран запроса, как показано на рис. 23.12, выведет всю информацию о пакете. Экран запроса для двух пакетов RPM

www.books-shop.com

Использование системы X Window

533

Если вы захотите не использовать пакет для установки или модернизации, щелкните на Unselect, чтобы удалить его из списка выбора. По мере того как вы добавляете все больше пакетов для задачи установки или удаления, число выбранных пакетов в каждой папке появится внутри папки. Это помогает помнить, сколько пакетов выбрано в определенной категории. Статусная панель окна Available Packages показывает общее число выбранных пакетов и объем памяти в Кбайтах. Когда завершен выбор всех пакетов, которые вы хотите установить или модернизировать, нажмите соответствующую кнопку для выполнения .задачи. Чтобы удалить пакет из списка существующих установленных пакетов, выберите пакеты, которые вы хотите удалить, и щелкните на Uninstall. Если вы попробуете удалить пакет, который используется другим пакетом, вы получите сообщение об ошибке. Вы должны будете удалить зависимый пакет до того, как вы сможете реально удалить желаемый пакет. При удалении пакета будьте внимательны, так как можно разрушить одно или несколько приложений. Посмотрим на то, как можно управлять системой, используя приложение control panel (панель управления).

Использование панели управления

Приложение control panel (панель управления) используется для запуска различных системных административных утилит для управления редактированием уровня выполнения, задания даты и времени, конфигурирования принтера, настройки сети, конфигурирования модема, конфигурирования демона ядра и т.д. Приложение можно запустить следующим образом: control-panel & Внешний вид панели управления немного уродлив, как показано на рис. 23.13. Интерфейс приложения control-panel

Щелчок мыши на любой из больших кнопок запускает различные конфигурационные утилиты. Чтобы быстро определить назначение кнопок, переместите мышь над каждой кнопкой и обратите внимание на раскрывающееся окно с подсказкой. В нем отмечено название кнопки. Например, самая первая кнопка, которая имеет изображение двух светофоров, является редактором уровня выполнения. Когда вы перемещаете Мышь над следующей кнопкой с изображением часов, вы увидите «Time and Date» (время и дата) в качестве подсказки. Подсказки и для других кнопок являются понятными. Посмотрим на несколько доступных утилит панели управления.

Использование редактора уровня выполнения

Когда вы выполняете редактор уровня выполнения из панели управления, она выполняет программу tksysv. Эта программа выводит окно, показанное на рис. 23.14. Конфигурируемыми уровнями выполнения являются 2, 3, 4 и 5. Для добавления нового демона к определенному уровню выполнения, выберите демона из левого списка, помеченного «Available:», и щелкните на Add. В новом окне (см. рис. 23.15) вас попросят выбрать, хотите ли вы запустить или остановить новый демон. Кроме того, будет предоставлена возможность выбрать уровень выполнения. Рис. 23.15 показывает, что демон httpd добавляется к уровню выполнения 3, чтобы запускаться автоматически при начальной загрузке. Чтобы удалить демона из любого уровня выполнения, выберите его и нажмите кнопку Remove.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]

Глава 23

534

Окно редактора уровня вы полнения

Добавление httpd к уровню выполнения 3 для его автоматического запуска при начальной загрузке

Редактирование порядка загрузки демона в редакторе уровня выполнения

Если вы хотите переупорядочить последовательность загрузки определенного демона, выберите демона из соответствующего / списка уровня выполнения и щелкните на Edit. Появится окно, показанное на рис. 23.16. Введите новое число, чтобы порядок загрузки мог быть изменен. Число, большее текущего значения, позволяет вам загрузить демона после того как будут загружены один или несколько других демонов. Число, меньшее текущего значения, загружает демона перед несколькими другими демонами. Щелкните на Apply, чтобы изменить порядок запуска. Редактор уровня выполнения позволяет также быстро запустить или остановить демона. Например, чтобы запустить или остановить демон Web-сервера (httpd), выберите его из списка доступных демонов и щелкните на Execute. Вас попросят запустить или остановить демон. Нажмите подходящую кнопку. Обратите внимание, что tksysv, программа, выполняемая панелью управления как редактор уровня выполнения, сохраняет резервную копию дерева каталога /etc/гс.d в /tmp/tksysv/rc.d. Если у вас возникнут проблемы с нежелательными изменениями, вы можете восстановить первоначальную версию из резервной копии с помощью команды: ср -arf /tmp/tksysv/rc.d /etc Использование утилиты конфигурирования времени и даты Когда вы нажимаете кнопку времени и даты, панель управления выполняет программу timetool. Она выводит окно, показанное на рис. 23.17. Чтобы изменить время и дату, щелкните на той части изображения времени или даты, которую вы хотите изменить. Например, если бы ' вы захотели изменить минуты, щелкните на числах, представляющих минуты, и используйте кнопки стрелок вверх и вниз для настройки минут. Если бы вы захотели изменить месяц, то надо было бы щелкнуть на названии месяца в изображении даты. Также вы могли использовать кнопки для настройки месяца.

www.books-shop.com

Использование системы X Window

535

Конфигурирование времени и даты с помощью панели управления

Использование NETCFG См. подробности в разделе «Использование netcfg для конфигурирования адаптера сетевого интерфейса» в главе 9. Использование PRINTTOOL См. подробности в разделе «Совместное использование принтеров Linux и Windows» в главе 15.

Использование утилиты конфигурирования системы

Утилита конфигурирования системы, которую выполняет панель управления, называется Linuxconf. Подробнее см. главу 6.

Использование утилиты управления пакетами

Утилита управления пакетами, которую выполняет панель управления, называется glint. См. раздел «Использование glint» в этой главе.

Использование утилиты конфигурирования ядра См.подробности в главе 20.

Использование утилиты конфигурирования модема

Утилита конфигурирования модема, которую выполняет панель управления, называется modemtool. Она может создавать только связь, называемую /dev/modem для последовательного порта (от /dev/cuaO до /dev/cua3). Так как эта книга о серверах, мы не будем рассматривать вопросы конфигурации, связанные с модемом. Использование утилиты конфигурирования сервера Apache Утилита конфигурирования сервера Apache, которую выполняет панель управления, называется Comanche. В действительности, она нуждается в лучшем интерфейсе. Поскольку существующее не представляет никакой оперативной помощи и можно считать этот интерфейс неудобным и недружественным, то мы не рекомендуем использовать данную утилиту.

Использование утилиты поиска справки

Утилита поиска справки, которую выполняет панель управления, называется helptool. Она ищет интерактивные документы, включая справочные man-страницы, файлы info и случайные документы в каталогах /usr/doc и /usr/local/doc, для поиска соответствий ключевым словам, которые вы можете указать.

www.books-shop.com

www.books-shop.com

Приложение А Ресурсы Linux

то приложение предоставляет список ресурсов Linux. В Интернете существует много ориентированных на Linux групп новостей, списков почтовой рассылки и Web-сайтов. Перечислим ресурсы Linux, которые, скорее всего, будут существовать во все времена. Мы применяем их практически ежедневно.

Группы новостей Usenet

Следующие группы новостей Usenet могут быть удобным местом для изучения развития Linux, участия в посвященных Linux дискуссиях, а также для поиска ответов на возникающие вопросы.

Иерархия COMP.OS.LINUX

,

Linux имеет собственную иерархию групп новостей Usenet. Эти группы посвящены только Linux. Прежде чем вы отправите заметку или вопрос в любую из этих групп новостей (или любую группу новостей Usenet), убедитесь, что вы знакомы с уставом этой группы. В частности, когда вы ищите ответы на вопросы, будьте совершенно уверены, что вы прочитали доступные часто задаваемые вопросы (FAQ), справочные man-страницы и документацию how-to. Если вы посылаете вопрос, на который уже был дан ответ в FAQ или в документе how-to, есть вероятность, что некоторые люди, которые активно участвуют в этой группе, могут воспринять это не очень дружелюбно. Будьте также внимательны, когда вы посылаете один и тот же вопрос во множество групп (так называемую перекрестную рассылку) в надежде, что вы увеличите свои шансы получить ответ. До тех пор пока вы посылаете вопросы согласно назначению группы, все нормально.

COMP.OS.LINUX.ADVOCACY

(неуправляемая)

Эта группа новостей посвящена обсуждению достоинств Linux при сравнении с другими операционными системами.

www.books-shop.com

538

Приложение А

COMP.OS.LINUX.ANNOUNCE (управляемая) Данная группа новостей предназначена для всех объявлений по теме Linux. Вы найдете здесь информацию о новом программном обеспечении Linux, сообщениях об ошибках, обнаруженных дырах в защите и информацию о группах пользователей. COMP.OS.LINUX.ANSWERS (управляемая) Linux FAQ, how-to, readme и другие документы посылаются в эту группу новостей. Если у вас есть вопрос, проверьте эту группу новостей, прежде чем посылать свой вопрос в любую группу новостей Linux. COMP.OS.LINUX.DEVELOPMENTS.APPS (неуправляемая) Подобная группа новостей предназначена для разработчиков Linux, которые хотят обсуждать с коллегами вопросы разработки. COMP.OS.LINUX.HARDWARE (неуправляемая) Эта группа новостей предназначена для дискуссий о Linux. Если у вас есть вопрос о каком-то оборудовании, которое вы пытаетесь использовать с Linux, ищите помощь здесь. COMP.OS.LINUX.M68K (неуправляемая) Это группа новостей предназначена для обсуждения разработок Linux для архитектуры Motorola 68K. COMP.OS.LINUX.ALPHA (неуправляемая) Такая группа новостей предназначена для дискуссий, посвященных архитектуре Compaq/Digital Alpha. COMP.OS.LINUX.NETWORKING (неуправляемая) Эта группа новостей нужна для обсуждения вопросов, связанных с работой в сети. COMP.OS.LINUX.X (неуправляемая) Эта группа новостей используется для дискуссий, связанных с системой X Window, версией 11 и совместимым программным обеспечением, включая серверы, клиенты, библиотеки и шрифты, выполняющиеся под Linux. COMP.OS.LINUX.DEVEPMENT.SYSTEM (неуправляемая) Подобная группа новостей предназначена для хакеров ядра и разработчиков модулей. Здесь вы найдете продолжающиеся дискуссии о надлежащей разработке операционной системы Linux: ядра, драйверов устройств, загружаемых модулей и т.д. COMP.OS.LINUX.SETUP (неуправляемая) Эта группа новостей предназначена для обсуждений вопросов установки и системного администрирования. COMP.OS.LINUX.MISC (неуправляемая) Это общая корзина для иерархии comp.os.linux. Любой вопрос, неподходящий для другой группы новостей в этой иерархии, обсуждается здесь. Различные группы новостей Linux Следующие группы новостей являются основными группами новостей Linux. Большинство из них ориентировано географически и обычно используется для локальных связанных с Linux объявлений о собраниях и событиях групп пользователей Linux. • alt.uu.сотр.os.linux.questions • alt.fan.linus-torvalds

• aus.computers.linux • dc.org.linux-users • de.alt.sources.linux.patches • de.соmр.os.linux.hardware

www.books-shop.com

539

Ресурсы Linux

• • • • • • • • • • • • • • • • • • •

de.сотр.os.linux.misc de.сотр.os.linux.networking de.comp.os.x ed.linux fido.linux-ger fj.os.linux fr. сотр.os. linux nan.sys.linux hannet.ml.linux.680x0 it.сотр.linux.pluto maus.os.linux maus.os.linux68k no.linux Okinawa.os.linux tn.linux tw.bbs.comp.linux ucb.os.linux uiuc.sw.linux umich.linux

Списки почтовой рассылки Списки почтовой рассылки являются хорошим способом получения информации непосредственно в свой почтовый ящик. Если вы заинтересованы в связанных с Linux новостях, объявлениях и других обсуждениях, списки почтовой рассылки могут быть весьма полезными. Это особенно справедливо в отношении списков почтовой рассылки, которые обеспечивают возможность краткого изложения (дайджеста). Такие списки почтовой рассылки будут посылать дайджест всех ежедневных или еженедельных сообщений на ваш адрес электронной почты. Общие списки Следующие списки рассылки Linux являются общими по своей природе. Они обеспечивают общую дискуссию о новостях Linux и дают полезную информацию для начинающих пользователей Linux. LINUX-ANNOUNCE Подпишитесь на Linux-Announce, отправьте сообщение по адресу l i n u x announce- request@redhat. com со словом «subsribe» в качестве темы (SUBJECT). LINUX-LIST Пошлите сообщение по адресу linux-list-request@ssc. com со словом «subscribe» в теле сообщения. LINUX-NEWBIE Чтобы подписаться, пошлите сообщение по адресу [email protected] со словами «subscribe linux-newbie» в теле вашего сообщения. LINUXUSERS Чтобы подписаться, пошлите сообщение по адресу majordomo@dmu. ас. uk со словами «subscribe linux users» в теле сообщения.

www.books-shop.com

540

Приложение А

Списки почтовой рассылки, посвященные вопросам безопасности

Следующие списки почтовой рассылки имеют дело с вопросами безопасности Linux и компьютеров. Мы рекомендуем вам подписаться на список почтовой рассылки bugtraq. LINUX-SECURITY Этот список почтовой рассылки поддерживаемый Red Hat Software, Inc. Чтобы подписаться, пошлите сообщение по адресу [email protected] со словами «subscribe linux-security» в строке темы (SUBJECT). BUGTRAQ BugTraq не посвящен специально Linux. Однако это надежный источник предупреждений об ошибках. Чтобы подписаться, пошлите сообщение по адресу [email protected] с телом сообщения, говорящим «SUBSCRIBE bugtraq ваше_имя ваша_фамилия».

Специальные списки рассылки

Следующие списки почтовой рассылки имеют дело с двумя вопросами: Linux как серверная платформа и Linux как платформа настольного компьютера. SERVER-LINUX Чтобы подписаться, пошлите сообщение по адресу [email protected] со словами «subscribe SERVER-LINUX» в строке темы (SUBJECT). WORKSTATION-LINUX Чтобы подписаться, пошлите сообщение по адресу [email protected] со словами «subscribe WORKSTATION-LINUX» в строке темы (SUBJECT).

Web-сайты

Множество Web-сайтов предоставляют информацию о Linux. Здесь представлены лучшие из них.

Общие ресурсы

Следующие Web-сайты являются общими по своей природе. Большинство этих сайтов действуют как сайты-порталы. • http://www.redhat.com/ • http://www.linux.com/ • http://www.linuxresources.com/ • http://linuxcentral.com/ • http://www.linuxcare.com/

Публикации

Web-сайты, являющиеся официальными Web-сайтами различных публикаций о Linux. • http://www.linuxworld.com/ • http://www.linuxgazette.com/ • http://www.linuxjournal.com/

Хранилища программного обеспечения

Web-сайты, предлагающие коммерческое программное обеспечение для л Linux. • http://http.linuxmall.com/ • http://www.cheapbytes.com/ • ht i.D: // www.Isl.com/

www.books-shop.com

Ресурсы Linux

541

Ресурсы, посвященные безопасности Web-сайты, имеющие дело с компьютерной безопасностью. * http://www.cert.org/ * http://www.rootshell.com/ * www.replay.com/redhat/ Группы пользователей Локальная группа пользователей Linux также могла бы помочь вам в поиске необходимой информации по Linux. Вы можете найти или даже зарегистрировать новую группу пользователей в своей области, обратившись по следующему URL-адресу: http://www. linuxresources. com/glue/index, html.

www.books-shop.com

Книги издательства "ЛОРИ" Вы можете приобрести:

В Москве:

В

"Московский Дом Книги"

ЗАО "Диалект"

ул. Новый Арбат, 6

"Библио-Глобус" ул. Мясницкая, 6

Санкт-Петербурге:

(812) 247-1483

"Дом Книги" Невский пр-т., 24

"Дом Технической Книги"

Ленинский пр-т., 40

"Мир" Ленинградский пр-т., 78

"Молодая гвардия" ул. Большая Полянка, 28

"Компьютерная и деловая книга"

В Киеве:

"Техническая книга" (044) 419-7061

Ленинский пр-т., 38 ТД "Москва" ул. Тверская, 8

"Мир печати" 2-я Тверская-Ямская, 54

Виртуальные книжные магазины В Санкт-Петербурге WWW.BOOKS.RU, WWW.OZON.RU В Риге WWW.636.LV В Новосибирске WWW.TOP-KNIGA.RU В Нью-Йорке WWW.KNIGA.COM В Москве WWW.BOOK.RU Книги нашего издательства Вы можете заказать по почте: г.Москва, ЗАО "Кнорус" тел. (095)280-0207, 280-7254, 280-9116 г. Санкт-Петербург, "Дом Книги", отдел "Книга-почтой" тел. (812) 219-6224 г. Новосибирск, "Топ Книга", тел. (3832) 36-10-26, 36-10-27

www.books-shop.com