LINUX
СБОРНИК РЕЦЕПТОВ
Карла Шредер
Москва • Санкт-Петербург • Нижний Новгород • Воронеж Новосибирск • Ростов-на-Дону • Екатеринбург • Самара Киев • Харьков • Минск
2006
-
Карла Шредер
Linux. Сборник рецептов Перевел с английского Е. Матвеев Заведующий редакцией Руководитель проекта Технический редактор Литературный редактор Художник Корректор Верстка
А. Кривцов А. Пасечник В. Демидова А. Пасечник Е. Дьяченко В. Листова Л. Родионова
ББК 32.973-018.2 УДК 004.451
Ш86
Шредер К. Linux. Сборник рецептов. — СПб.: Питер, 2006. — 432 с: ил. ISBN 5-469-01188-7 Предлагаемое издание содержит уникальную коллекцию советов, инструментов и сценариев; вы найдете =ряд готовых отлаженных решений сложных проблем, с которыми сталкивается любой администратор, настраивающий Linux-сервер; эти решения пригодятся и при настройке небольших сетей, и при создании мощных распределенных хранилищ данных. Книга написана в уже ставшей популярной форме рецептов издательства O'Reilly в формате «Проблема-Решение-Обсуждение». Для опытных пользователей, программистов, системных администраторов, студентов вузов, аспирантов и преподавателей.
© 2005 O'Reilly Media, Inc. © Перевод на русский язык, ЗАО Издательский дом «Питер», 2006 © Издание на русском языке, оформление, ЗАО Издательский дом «Питер», 2006 Права на издание получены по соглашению с O'Reilly Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственность за возможные ошибки, связанные с использованием книги.
ISBN 5-469-01188-7 ISBN 0596006403 (англ.)
Лицензия ИД № 05784 от 07.09.01. Подписано в печать 15.12.05. Формат 70X100/16. Усл. п. л. 34,83. Тираж 3000 экз. Заказ№ 6920. ООО «Питер Принт». 194044, Санкт-Петербург. Б. Сампсониевский пр., 29а. Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 953005 — литература учебная. Отпечатано с готовых диапозитивов в ФГУП «Печатный двор» им. А. М. Горького Федерального агентства по печати и массовым коммуникациям. 197110, Санкт-Петербург, Чкаловский пр., 15.
Краткое содержание
Предисловие
16
Глава 1. Документация
19
Глава 2. Установка и модификация программ в системах на базе RPM
31
Глава 3. Установка и сопровождение программного обеспечения в системах на базе Debian
49
Глава 4. Установка программ по исходным текстам
66
Глава 5. Идентификация оборудования
72
Глава 6. Редактирование текстовых файлов в JOE и Vim
79
Глава 7. Запуск и завершение работы Linux
97
Глава 8. Управление пользователями и группами
110
Глава 9. Операции с файлами и разделами
137
Глава 10. Заплатки, настройка и обновление ядра
162
Глава 11. Запись CD и DVD
176
Глава 12. Системный загрузчик и альтернативная загрузка
193
Глава 13. Восстановление работоспособности на примере Knoppix
219
Глава 14. CUPS
230
Глава 15. Настройка видео и X Window
241
Глава 16. Архивация и восстановление
253
Глава 17. Удаленный доступ
274
Глава 18. Управление версиями
288
Глава 19. NTP
309
Глава 20. Почтовый сервер Postfix
320
Глава 21. Борьба со спамом и вредоносными программами
343
б
Краткое содержание
Глава 22. Веб-сервер Apache
356
Глава 23. Samba
379
Глава 24. Разрешение имен
409
Приложение А. Поиск документации Linux
426
Приложение Б. Информация об устройствах
428
Алфавитный указатель
429
• •
•
I
I
•
Содержание
Предисловие Для кого написана эта книга О чем рассказано в книге Платформы Благодарности От издательства
Глава 1. Документация 1.1. Введение 1.2. Общие сведения о man-страницах 1.3. Поиск нужной man-страницы 1.4. Поиск потерянных man-страниц 1.5. Чтение man-страниц без программы просмотра 1.6. Настройка путей поиска man-страниц 1.7. Использование info-страниц 1.8. Печать man-страниц 1.9. Печать info-страниц 1.10. Печать отдельных man- или info-страниц 1.11. Поиск всей документации к программе Глава 2. Установка и модификация программ в системах на базе RPM 2.1. Введение 2.2. Установка пакетов 2.3. Обновление пакетов 2.4. Удаление пакетов 2.5. Получение информации об установленных пакетах 2.6. Получение информации о пакетах, не установленных в системе 2.7. Поиск недавно установленных пакетов 2.8. Перестройка базы данных RPM 2.9. Отслеживание библиотек, построенных по исходным текстам, в системах на базе RPM 2.10. Решение проблем установки RPM 2.11. Сборка пакетов по исходным текстам
16 16 17 17 18 18
19 19 20 22 23 24 24 25 26 27 28 28 31 31 32 33 34 35 37 37 38 39 41 42
8
Содержание
2.12. Настройка параметров сборки SRPM 2.13. Установка Yum 2.14. Настройка Yum 2.15. Установка и обновление пакетов в Yum 2.16. Удаление пакетов в Yum 2.17. Получение информации об установленных пакетах в Yum 2.18. Сопровождение Yum
43 44 45 46 47 47 48
Глава 3. Установка и сопровождение программного обеспечения в системах на базе Debian
49
3.1. Введение 3.2. Поиск программ для Debian 3.3. Установка пакетов Debian с диска CD-ROM 3.4. Установка пакетов в системе на базе Debian 3.5. Удаление пакетов из системы Debian 3.6. Установка программ в Debian по исходным текстам 3.7. Обновление пакетов в Debian 3.8. Обновление системы Debian 3.9. Установка обновленной версии Debian 3.10. Создание смешанной системы Debian 3.11. Поиск программ, установленных в системе Debian 3.12. Операции с кэшем пакетов Debian 3.13. Разрешение конфликтов зависимостей в Debian 3.14. Создание локального архива Debian 3.15. Выбор пакетных зеркал для apt-proxy.conf 3.16. Включение существующего кэша пакетов в apt-proxy.conf
49 50 51 52 53 54 55 55 56 57 58 60 61 62 63 64
Глава 4.1. 4.2. 4.3.
4. Установка программ по исходным текстам Введение Подготовка системы к компиляции программ по исходным текстам Построение списка добавленных файлов для упрощения удаления программ 4.4. Установка программ по исходным текстам 4.5. Создание пакетов по исходным текстам с применением Checklnstall
Глава 5.1. 5.2. 5.3. 5.4. 5.5.
5. И д е н т и ф и к а ц и я оборудования Введение Идентификация оборудования при помощи Ispci Сбор информации об оборудовании программой dmesg Получение текущей сводки оборудования с использованием /ргос Просмотр разделов в программе fdisk
Глава 6. Редактирование текстовых файлов в JOE и Vim 6.1. Введение 6.2. Поиск команд JOE 6.3. Настройка JOE 6.4. Сохранение личной конфигурации JOE в отдельном файле 6.5. Копирование текста между файлами в JOE 6.6. Поиск и замена в JOE 6.7. Вертикальное выделение текста в JOE 6.8. Поиск и открытие файлов в JOE 6.9. Быстрое изучение Vim
66 66 66 67 68 70 72 72 73 74 76 78 79 79 81 82 83 83 84 85 86 87
Содержание
6.10. Создание автотекста в Vim 6.11. Привязка команд к клавишам 6.12. Настройка Vim 6.13. Быстрое перемещение в Vim 6.14. Сеансы Vim 6.15. Назначение редактора по умолчанию 6.16. Определение параметров компиляции Vim
88 89 90 91 92 94 95
Глава 7. Запуск и завершение работы Linux
97
7.1. Введение 7.2. Смена уровня выполнения после загрузки 7.3. Смена уровня выполнения по умолчанию 7.4. Запуск и остановка X 7.5. Управление уровнями выполнения в Debian 7.6. Создание уровней выполнения с текстовым и графическим входом в Debian 7.7. Управление уровнями выполнения в Red Hat 7.8. Ручная настройка служб, запускаемых при загрузке 7.9. Ручная остановка и запуск служб 7.10. Выключение компьютера или перезагрузка Linux 7.11. Запрет или ограничение доступа к Ctrl+Alt+ Delete 7.12. Автоматическое выключение компьютера
Глава 8. Управление пользователями и группами 8.1. Введение 8.2. Отделение обычных пользователей от системных 8.3. Определение кодов UID и GID 8.4. Создание учетной записи пользователя командой useradd 8.5. Создание учетной записи пользователя командой adduser 8.6. Изменение учетной записи пользователя 8.7. Удаление пользователя 8.8. Простое завершение процессов 8.9. Блокировка учетных записей 8.10. Управление паролями 8.11. Создание групп командой groupadd 8.12. Удаление групп командой groupdel 8.13. Создание системного пользователя 8.14. Создание системных групп командой addgroup 8.15. Изменение принадлежности к группам 8.16. Проверка целостности файлов паролей 8.17. Серийное добавление новых пользователей 8.18. Серийная замена паролей 8.19. Серийное включение пользователей в группы 8.20. Временное использование привилегий root 8.21. Временное предоставление привилегий root командой sudo 8.22. Дисковые квоты Глава 9. Операции с файлами и разделами 9.1. Введение 9.2. Настройка разрешений в числовом формате chmod 9.3. Выполнение массовых операций командой chmod
97 99 100 101 102 102 104 105 106 107 108 109
110 110 111 112 113 114 115 117 118 118 119 120 121 121 122 123 123 124 129 130 131 132 134 137 137 142 143
10
Содержание
9.4. Настройка разрешений в символьном формате chmod 144 9.5. Назначение владельца файла командой chown 146 9.6. Выполнение массовых операций командой chown 146 9.7. Создание общих каталогов с использованием setgid и бита закрепления ... 147 9.8. Назначение разрешений по умолчанию с использованием маски umask . 149 9.9. Монтирование и демонтирование съемных дисков 150 9.10. Настройка монтирования файловых систем в/etc/fstab 151 9.11. Монтирование и демонтирование файловых систем на жестких дисках 153 9.12. Определение имен устройств для mount и fstab 154 9.13. Создание файлов и каталогов 156 9.14. Удаление файлов и каталогов 157 9.15. Копирование, перемещение и переименование файлов и каталогов 158 9.16. Создание дисковых разделов Linux командой fdisk 159 9.17. Создание файловой системы в новом разделе 161 Глава 1 0 . З а п л а т к и , настройка и обновление ядра 10.1. Введение 10.2. Добавление новых возможностей в ядро 2.4 10.3. Усечение типового ядра 2.4 10.4. Обновление до последней стабильной версии ядра 2.4 10.5. Построение ядра 2.6 10.6. Добавление новых возможностей в ядро 2.6 10.7. Добавление нового загружаемого модуля ядра 10.8. Установка заплаток ядра 10.9. Удаление заплатки ядра 10.10. Создание образа initrd 10.11. Создание загрузочного диска в Debian 10.12. Создание загрузочного диска в Red Hat
162 162 164 166 168 169 170 170 171 172 173 174 174
Глава 1 1 . Запись CD и DVD 176 11.1. Введение 176 11.2. Определение адресов SCSI для записывающих дисководов CD и DVD... 179 11.3. Включение эмуляции SCSI для устройства записи CD и DVD с интерфейсом IDE/ATAPI 180 11.4. Создание компакт-диска сданными для распространения 181 11.5. Формирование файловых деревьев на компакт-дисках с данными 183 11.6. Копирование диска CD или DVD 184 11.7. Стирание диска CD-RW 185 11.8. Запись многосеансового компакт-диска сданными 186 11.9. Создание загрузочного компакт-диска 187 11.10. Разбиение больших файлов на несколько дисков 188 11.11. Запись дисков DVD сданными 189 11.12. Запись аудиодиска для стандартных проигрывателей 191 Глава 1 2 . Системный загрузчик и альтернативная з а г р у з к а 12.1. Введение 12.2. Переход с LILO на GRUB 12.3. Установка GRUB без дискеты 12.4. Установка GRUB сценарием grub-install 12.5. Подготовка системы для альтернативной загрузки Linux 12.6. Установка дополнительных экземпляров Linux в системе с альтернативной загрузкой
193 193 194 196 197 198 199
Содержание
12.7. Определение параметров загрузки в командной консоли GRUB 12.8. Настройка загрузочного раздела 12.9. Создание меню загрузки в GRUB 12.10. Настройка menu.1st 12.11. Добавление Windows 95/98/ME в систему Linux 12.12. Добавление Windows NT/2000/XP в систему с альтернативной загрузкой... 12.13. Восстановление GRUB в MBR с использованием диска Knoppix 12.14. Защита системных файлов паролем GRUB 12.15. Защита отдельных пунктов меню GRUB 12.16. Создание заставки GRUB 12.17. Загрузка Linux с использованием LILO 12.18. Альтернативная загрузка Linux с использованием LILO 12.19. Альтернативная загрузка Windows и Linux с использованием LILO 12.20. Создание загрузочной дискеты LILO 12.21. Защита LILO паролем 12.22. Создание резервной копии MBR
11
201 203 204 205 206 208 209 210 211 212 213 214 215 216 216 217
Глава 13. Восстановление работоспособности системы на примере Knoppix
219
13.1. Введение 13.2. Загрузка Knoppix 13.3. Создание загрузочной дискеты Knoppix 13.4. Сохранение конфигурации Knoppix на флэш-диске 13.5. Создание зашифрованного домашнего каталога Knoppix 13.6. Копирование файлов на другой PC с системой Linux 13.7. Копирование файлов в общий каталог Samba 13.8. Копирование файлов на диск CD-R/RW 13.9. Редактирование конфигурационных файлов в Knoppix 13.10. Установка программ из Knoppix 13.11. Восстановление потерянного пароля root 13.12. Установка Knoppix на жесткий диск 13.13. Запуск антивирусных программ на Windows PC
219 219 221 221 222 223 224 225 226 227 227 228 228
Глава 14. CUPS 230 14.1. Введение 230 14.2. Подключение принтера к автономному компьютеру с системой Linux.... 232 14.3. Обслуживание клиентов Linux 234 14.4. Совместный доступ к принтеру без разрешения имен 235 14.5. Обслуживание клиентов Windows без Samba 236 14.6. Совместный доступ к принтерам в смешанной сети с использованием Samba 237 14.7. Создание выделенного сервера печати CUPS 237 14.8. Распределенная печать с использованием классов 238 14.9. Ограничение доступа к принтерам и классам 239 14.10. Диагностика 240 Глава 1 5 . Настройка видео и X W i n d o w 15.1. Введение 15.2. Одновременное использование X и консолей 15.3. Установка нового видеоадаптера 15.4. Редактирование файла XF86Config 15.5. Включение аппаратного ускорения BXFree86/DRI
241 241 243 245 246 247
12
Содержание
15.6. 15.7. 15.8. 15.9.
Диагностика проблем с ускорением трехмерной графики Настройка startx Смена экранного менеджера Одновременный запуск разных оконных менеджеров
Глава 16. Архивация и восстановление 16.1. Введение 16.2. Применение rsync для локальной пересылки и синхронизации файлов 16.3. Безопасная пересылка данных с применением ssh 16.4. Настройка сервера архивации rsync 16.5. Защита модулей rsync 16.6. Настройка анонимного общедоступного сервера rsync 16.7. Запуск демона rsync при загрузке системы 16.8. Настройка выбора файлов 16.9. Автоматизация архивации rsync на базе ssh 16.10. Ограничение загрузки канала при использовании rsync 16.11. Настройка путей к файлам в rsync 16.12. Установка rsync на клиентах Windows 16.13. Создание «сообщения дня» в rsync 16.14. Создание загрузочного компакт-диска в Mondo Rescue 16.15. Проверка архивов Mondo 16.16. Создание загрузочного диска DVD 16.17. Использование Mondo Rescue для клонирования систем Linux 16.18. Использование mindi-kernel 16.19. Восстановление системы с диска Mondo 16.20. Восстановление отдельных файлов с диска Mondo
248 249 250 251
253 253 . 254 256 257 258 260 261 262 262 263 264 264 265 266 269 269 270 271 272 272
Глава 1 7 . У д а л е н н ы й доступ 17.1. Введение 17.2. Настройка OpenSSH 17.3. Построение новых ключей хостов 17.4. Аутентификация с использованием открытых ключей 17.5. Использование нескольких пар ключей 17.6. Вход без пароля с использованием ssh-agent 17.7. Вход без пароля с использованием keychain 17.8. Беспарольный вход для заданий сгоп 17.9. Автоматическое завершение ssh-agent при выходе 17.10. Настройка приглашения Bash для ssh 17.11. Туннелирование X через SSH 17.12. Подключение с компьютера с системой Windows 17.13. Назначение разрешений для файлов ssh
274 274 275 277 278 280 280 282 283 283 284 284 285 287
Глава 1 8 . У п р а в л е н и е версиями 18.1. Введение 18.2. Построение локального репозитария RCS 18.3. Выборка старых версий файлов в RCS 18.4. Сравнение версий файла в RCS 18.5. Управление системными конфигурационными файлами в RCS
288 288 289 291 293 294
Содержание
18.6. Использование CVS для создания однопользовательских локальных репозитариев 18.7. Включение новых файлов в репозитарий CVS 18.8. Удаление файлов из репозитария CVS 18.9. Создание общего репозитария CVS 18.10. Совместное использование репозитария группами пользователей 18.11. Обращение к удаленному репозитарию CVS 18.12. Обновление рабочих файлов в CVS 18.13. Выборка конкретных старых версий из CVS 18.14. Построение анонимного репозитария CVS 18.15. Настройка среды CVS 18.16. Вычисление объема репозитария CVS
13
296 298 299 300 301 302 303 304 305 307 308
Глава 1 9 . NTP 19.1. Введение 19.2. Настройка локального сервера времени 19.3. Подключение к локальному серверу времени 19.4. Управление доступом 19.5. Выбор пула NTP 19.6. Подключение к серверу времени при непостоянном подключении 19.7. Настройка нескольких локальных серверов времени 19.8. Аутентификация с использованием ключей NTP
309 309 310 311 312 314 315 316 317
Глава 2 0 . Почтовый сервер Postfix 20.1. Введение 20.2. Построение почтового сервера РОРЗ 20.3. Построение почтового сервера РОРЗ в Debian 20.4. Тестирование почтового сервера SMTP/POP3 20.5. Отправка интернет-почты 20.6. Прием интернет-почты 20.7. Установка Cyrus-SASL 20.8. Установка Cyrus-SASL в Debian 20.9. Настройка smtp-auth для аутентификации пользователей 20.10. Применение smtp-auth для аутентификации Postfix на другом сервере 20.11. Настройка полного доменного имени 20.12. Построение почтового сервера ШАР 20.13. Подключение пользователей 20.14. Общий доступ к папкам ШАР 20.15. Использование виртуальных доменов Postfix 20.16. Создание списка рассылки с применением couriermlm
320 320 321 324 326 328 329 329 331 332 334 335 336 337 338 340 341
Глава 2 1 . Борьба со спамом и вредоносными программами 343 21.1. Введение 343 21.2. Первоочередные меры по защите от спама и вредоносных программ .... 344 21.3. Тестирование средств борьбы со спамом в Postfix 345 21.4. Настройка антиспамовых ограничений в Postfix 346 21.5. Создание белых списков 347 21.6. Использование черных списков DNS 348 21.7. Блокировка сообщений с вложениями 350
14
Содержание
21.8. Настройка Clam Anti-Virus на сервере Postfix 21.9. Настройка SpamAssassin в Postfix
Глава 22. Веб-сервер Apache
351 354
356
22.1. Введение 356 22.2. Установка Apache 2.0 по исходным текстам 358 22.3. Добавление новых модулей после установки 360 22.4. Настройка разрешений и принадлежности файлов Apache 361 22.5. Обращение к локальному руководству Apache 362 22.6. Создание простого веб-сервера 363 22.7. Перенаправление URL в новый каталог 363 22.8. Предоставление пользователям индивидуальных веб-каталогов 364 22.9. Запуск Apache при загрузке системы 365 22.10. Многодоменный хостинг в Apache 365 22.11. Ведение отдельных журналов для виртуальных хостов 367 22.12. Предотвращение доступа к веб-сайтам локальных сетей из Интернета ... 367 22.13. Парольная защита отдельных каталогов 368 22.14. Файл robots.txt 370 22.15. Блокировка нарушителей 371 22.16. Создание пользовательских страниц ошибок 372 22.17. Настройка стандартных страниц ошибок Apache 373 22.18. Вывод содержимого каталогов без усечения имен файлов 373 22.19. Использование Content Negotiation для предоставления страниц на разных языках 374 22.20. Использование эмблем 376 22.21. Просмотр журналов обращений Apache с использованием Webalizer 377 Глава 2 3 . Samba 23.1. Введение 23.2. Построение простого автономного файлового сервера Samba для Windows 23.3. Построение одноранговой сети Windows/Linux 23.4. Включение общего доступа к файлам в Windows 23.5. Включение аутентификации на сервере Samba 23.6. Массовое преобразование системных пользователей 23.7. Подключение к Samba из Windows 95/98/ME 23.8. Шифрование паролей в Windows 23.9. Списки управления доступом (ACL) 23.10. Создание общедоступных сетевых каталогов 23.11. Работа с домашними каталогами пользователей в Samba 23.12. Построение главного контроллера домена 23.13. Подключение Windows 95/98/ME к домену Samba 23.14. Подключение клиентов Windows NT/2000 к домену Samba 23.15. Подключение клиентов Windows XP к домену Samba 23.16. Включение перемещаемых профилей 23.17. Подключение клиентов Linux к одноранговой сети или файловому серверу Samba
379 379 381 383 384 385 386 387 387 388 389 390 391 393 394 395 396 397
Содержание
23.18. Подключение клиентов Linux к рабочим группам Samba из командной строки 23.19. Подключение клиентов Linux к домену Samba из графического обозревателя 23.20. Подключение клиентов Linux к домену Samba из командной строки 23.21. Синхронизация паролей Samba и Linux 23.22. Общий доступ к принтерам Linux из системы Windows 23.23. Общий доступ к принтерам Windows из системы Linux 23.24. Запуск приложений Windows в Linux
Глава 24. Разрешение имен 24.1. Введение 24.2. Локальное разрешение имен с использованием файла hosts 24.3. Настройка сервера DHCP 24.4. Настройка клиентов dhcp 24.5. Включение статических хостов в dhcp 24.6. Создание общедоступного сервера DNS 24.7. Установка djbdns 24.8. Перемещение журналов tinydns и dnscache 24.9. Создание локального кэширующего сервера имен на базе djbdns 24.10. Настройка клиентов Linux и Windows для использования кэширующего сервера DNS 24.11. Создание общедоступного сервера DNS с использованием tinydns 24.12. Построение частного сервера DNS 24.13. Простое распределение нагрузки в tinydns 24.14. Синхронизация с другим сервером tinydns
Приложение А. Поиск документации Linux Документация Linux в WWW Веб-сайты Linux Usenet Google
Приложение Б. Информация обустройствах Веб-сайты Usenet
Алфавитный указатель
15
399 401 402 403 403 404 405
409 409 411 412 413 414 415 417 418 418 420 421 423 424 425
426 426 426 427 427
428 428 428
429
Предисловие
Итак, вы принадлежите к относительно неопытных пользователей Linux. Вы установили Linux, вам удалось войти в систему, пошарить в Интернете, отправить и получить электронную почту... а дальше что? Несмотря на успешное выполнение некоторых простейших задач, вы чувствуете себя словно пилот самолета, летящего на автопилоте. В вашем распоряжении масса замечательных возможностей (во всяком случае, так вам сказал ваш знакомый, большой знаток в области Linux), но как за них взяться? Что где находится и как работает? Что это за штуковина под названием grep, о которой так часто говорят? И как наладить работу Samba? И где находится #$% Л документация? Мир Linux/Unix отлично документирован. Нет, я серьезно! Вы сможете найти ответ на любой вопрос; нужно только знать, где искать. Man-страницы, info-страницы, файлы README, документация в формате HTML, сами программы... Не нужно быть великим программистом, чтобы отыскать полезную информацию в исходных текстах, потому что все необходимые сведения часто содержатся в комментариях. Среди тысяч виртуальных сообществ Интернета всегда найдется одно (или несколько) для конкретной программы из Вселенной Linux. Почти у каждой программы, какой бы малой она ни была, существует собственный список рассылки. У каждого дистрибутива Linux имеются свои списки рассылки и форумы пользователей. Я уже не говорю о многочисленных книгах и журналах. Получается, что настоящая проблема с документацией Linux — не ее нехватка, а получение нужной информации без долгих и самоотверженных поисков.
Для кого написана эта книга Книга предназначена для читателей, которые желают решать практические задачи. Конечно, понимать базовую теорию полезно, но если вам не удается добиться нужного результата, пользы от теории немного. По этой причине я постараюсь включать поменьше теоретических рассуждений и побольше практических советов с подробными, пошаговыми инструкциями. В книгу включены многочисленные ссылки на дополнительные источники информации. От читателя потребуется некоторый опыт работы в Linux. Быть знатоком не обязательно, но нужно по крайней мере уметь загружать систему и завершать ра-
Предисловие
17
боту с ней, запускать приложения, работать в WWW и ориентироваться в файловой системе. Читатель должен знать, как получить доступ к командной строке и использовать ее, и обладать навыками работы в графической среде. Он должен понимать, что Linux является полноценной многопользовательской системой и что в работе следует по возможности использовать непривилегированную учетную запись, переключаясь на привилегии root только в случае необходимости. Предполагается, что читатель является администратором отдельного компьютера или локальной сети и может получить привилегии root в случае необходимости. Может быть, вы стремитесь в полной мере управлять работой своего Linuxкомпьютера, или создать свой собственный почтовый или веб-сервер, или создать небольшую сеть. А может, вы — системный администратор Windows, которому неожиданно потребовалось подключить Windows-клиентов к серверам Linux... или включить серверы Linux в существующую сеть... или интегрировать компьютеры с Linux и Windows в одной смешанной сети. А может, вам вообще нет дела до Windows, и вы просто хотите освоить системное администрирование Linux.
О чем рассказано в книге Для Linux существуют тысячи программных пакетов. Почти все они делают чтото полезное, поэтому заранее понятно, что рассмотреть все темы (или хотя бы их большинство) попросту невозможно. Решения о том, какой материал включить в книгу, а какой оставить за пределами рассмотрения, принимались в соответствии с моими представлениями о базовых навыках администрирования Linux (возможно, у вас эти представления будут другими). В книгу были включены программы, которые я считаю лучшими в своей категории: djbdns, GRUB, Apache 2, vim и Postfix, а также испытанные временем ветераны вроде LILO. В книге приводятся полезные сценарии для выполнения типовых операций: О массовое создание учетных записей; О массовое изменение паролей; О поиск всей установленной документации к программе; О поиск «бесхозных» библиотек в системах на базе RPM и их включение в базу данных RPM. В книгу не вошли настольные и вспомогательные приложения типа Open Office, KMail, FireFox, Konqueror, Gimp, GnuCash и т. д. — книга посвящена построению инфраструктуры. Если вы освоите основные принципы администрирования и сопровождения Linux-системы, дальше можно будет двигаться куда угодно.
Платформы В мире существуют тысячи дистрибутивов Linux. Свои дистрибутивы создают отдельные компании, кампусы и даже просто группы единомышленников. Тем не менее дистрибутивы делятся (пусть и не очень четко) на две большие категории: системы на базе RPM, представленные в книге Red Hat и Fedora, и системы на базе apt, представленные Debian. Семейство Debian бурно развивается и пополняется такими представителями, как Knoppix, Xandros, Libranet, Unbuntu и Linspire.
18
Предисловие
Даже если ваш дистрибутив не принадлежит ни к одной из этих категорий (скажем, Slackware или Gentoo), основные принципы практически не изменяются. Ядро остается тем же; программы и утилиты остаются теми же; оконные менеджеры остаются теми же; принципиальные различия существуют только в способе установки программ. Впрочем, это не означает, что между дистрибутивами Linux нет других отличий. Одна из классических проблем — различия в местонахождении файлов в разных дистрибутивах. Привыкайте, эта проблема никуда не денется. В книге будет показано, как получить информацию о местонахождении конфигурационных, исполняемых файлов и документации для вашего конкретного дистрибутива.
Благодарности Я благодарна редактору O'Reilly Майклу Лукидесу (Michael Loukides). Его хороший вкус, зоркий глаз, терпение и неумолимая настойчивость существенно улучшили эту книгу. Глупые компьютеры понимают все буквально и не прощают ошибок при вводе. Спасибо техническому рецензенту Дженн Весперман ( Jenn Vespermann) и ее вниманию к мелочам! Я бесконечно благодарна Аккане Пек (Akkana Peck), Дженн Весперманн, Полу Хайнлайну (Paul Heinlein) и Питеру Сэмюэльсону (Peter Samuelson), внесшим свой вклад в книгу. Сердечное спасибо всему сообществу Linuxchix, включая Дженн Весперманн (доброжелательный диктатор Linuxchix), Дэнсер Весперманн (Dancer Vespermann), Danamania, Колби (Colby), Evilpig, Элмут Беренс (Almut Behrens), гуру Mandrake Эндрю (Andrew), Hamster, Piglet, Вэл Хенсон (Val Hanson), Питера Энвина (Peter Anvin), Рика Роуза (Rik Rose), Девдаса Бхагата (Devdas Bhagat), Дэвида Норта (David North), Телзу Гвинн (Telsa Gwynne), Марию Блэкмор (Maria Blackmore), Мередид Лафф (Meredyd Luff), Кай Мактейн (Kai MacTane) и Эринн Кларк (Erinn Clark). Да здравствует Linuxchix! Наверняка я забыла о ком-нибудь, кто терпеливо сносил мои бесконечные приставания. Напомните о себе, и я внесу изменения во втором издании.
От издательства Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение! На веб-сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.
•.
Глава 1
Документация
1.1. Введение Документация к программам Linux существует в избытке — вопрос только в том, как ее найти. Не ищите стопки красивых, глянцевых печатных описаний: большинство Linux-программ не продается в блестящих коробках, а распространяется через Интернет. Существует и другая сложность: в соответствии с великими традициями Unix, многие задачи в Linux решаются совместной работой множества мелких специализированных программ, поэтому любой дистрибутив Linux состоит из огромного количества отдельных программ. Дистрибутивы общего назначения типа Mandrake или SuSE содержат тысячи программ, а в архивах Debian хранятся свыше 12 000 пакетов. Организация и сопровождение печатной библиотеки в таких условиях создали бы немало трудностей, но к счастью, все программы документированы. Какой бы вопрос у вас ни возник, на него всегда можно найти ответ.
man и info: универсальные руководства Linux Практически у каждой программы, написанной для Linux, имеется своя man-страница. Как правило, man-страницы не предназначаются для освоения программы новичками. Они создаются для других целей: документирование синтаксиса команды, описание всех параметров и ключей, а также общедоступность. Даже если вы окажетесь на компьютере, полностью отрезанном от внешнего мира, в вашем распоряжении всегда будет информация из man-страниц. А поскольку man-страницы интегрируются с программами, которым они принадлежат, только установленные программы будут иметь man-страницы, причем версии этих страниц будут относиться именно к вашей системе. Info-страницы обычно содержат более подробную информацию. Включенные в них гиперссылки используются для перехода к различным узлам, или главам, документа, а также для создания перекрестных ссылок на другие info-страницы. Нередко info-страницы представляют собой переформатированные man-страницы. Но в некоторых случаях (прежде всего, в программах проекта GNU) info-страницы
20
Глава 1. Документация
отличаются большей детализацией, в них присутствует учебный материал и подробные примеры.
Другая документация В различных местах вашей системы также прячутся многочисленные файлы README, CHANGELOGS, RELEASE NOTES, COPYRIGHT, INSTALL, интегрированные справочные системы и документация в формате HTML. Да, в целом творится изрядная путаница. Не волнуйтесь, в этой главе вы научитесь быстро находить нужную информацию, а удобный сценарий Python облегчит процесс поиска. На многих веб-сайтах хранятся полные архивы man- и info-страниц. Они пригодятся вам в том случае, если нужная страница отсутствует в вашей системе или вы хотите прочитать ее без загрузки и установки новых программ. Вы быстро найдете их поиском в Google. Коммерческие дистрибутивы Linux — такие, как Red Hat, SuSE, Mandrake, Xandros и Linspire — содержат превосходные руководства пользователя. У каждого серьезного дистрибутива Linux имеется богатый выбор электронной документации. Полезную и справочную информацию также можно найти при помощи поисковых систем, в списках рассылки, конференциях Usenet и на всевозможных веб-сайтах, посвященных Linux.
Графические оболочки справочных систем Существует несколько хороших графических программ для просмотра man- и infoстраниц: О Konqueror — браузер и файловая оболочка KDE также содержит превосходную программу просмотра man- и info-страниц. Просто введите man:foo или info:/foo в адресной строке. Konqueror позволяет легко напечатать нужную информацию и отобрать отдельные man- или info-страницы для печати; О Yelp — программа просмотра для Gnome; отображает man- и info-страницы, а также справочные документы Gnome. Поддерживает индексирование и поиск; О Pinfo — удобная консольная программа просмотра man- и info-страниц на базе ncurses. Поддерживает поиск по регулярным выражениям и возможность добавления новых документов.
1.2. Общие сведения о man-страницах Проблема Вы пытаетесь использовать какую-нибудь программу, но никак не можете заставить ее сделать то, что требуется. Итак, следуя стандартному совету «RTFM» (Read The Fine Man page), вы находите нужные страницы, читаете их... и ничего не можете понять.
1.2. Общие сведения о man-страницах
21
Решение Разберитесь в структуре man-страниц; изучите условные обозначения команд и их параметров, и вы поймете, что man-страницы на самом деле очень полезны.
Комментарии С точки зрения Linux все man-страницы в системе являются частью единого руководства. Это руководство состоит из следующих разделов: 1 — исполняемые программы или команды оболочки; 2 — системные функции; 3 — библиотечные функции; 4 — специальные файлы (обычно находящиеся в /dev); 5 — форматы файлов и соглашения; 6 — игры; 7 — разное; 8 — команды системного администрирования; 9 — нестандартные функции ядра; п — новая документация, которая позднее может быть перемещена; 1 — локальная документация, специфическая для вашей системы. Каждая отдельная программа, утилита или функция представлена в этом руководстве отдельной страницей. Поиск страницы для программы или команды обычно сводится к вводу команды man foo, где foo — имя программы. Вероятно, вам также попадались нумерованные ссылки на man-страницы вида grep(l). Такая ссылка обозначает страницу man grep из раздела 1. Она вызывается следующим образом: $ man I grep Некоторые man-страницы входят в несколько секций. Команда man foo отобразит только первую из них. Для получения полного списка следует указать ключ -f: $ man - f man
man (1) an interface to the online reference manuals man (7) macros to format man pages Каждая man-страница делится на секции. Имена секций бывают разными, но чаще всего встречаются следующие: NAME, SYNOPSIS, DESCRIPTION, OPTIONS, FILES, EXAMPLES, SEE ALSO, BUGS and AUTHOR. Описание синтаксиса команды находится в секции SYNOPSIS man-страницы и выглядит следующим образом: имя_команды [необязательные ключи] обязательные_элементы
При описании ключей команды используются следующие обозначения: О жирный шрифт — вводится точно так, как показано; О курсив — обозначает аргумент, заменяемый конкретным значением. В зависимости от используемой программы просмотра вместо курсива может использоваться подчеркивание текста или жирный шрифт; О [-abc] — все ключи в квадратных скобках являются необязательными и их можно комбинировать друг с другом;
22
Глава 1. Документация
О [-а|-Ь|-с] — ключи, разделенные символом «|» (вертикальная черта), не могут комбинироваться друг с другом; О аргумент... — многоточие означает, что в данной позиции допускается перечисление нескольких аргументов. Элементы списка обычно разделяются пробелами, но иногда вместо них используются запятые; О [выражение]... — многоточие означает, что в данной позиции допускается перечисление нескольких выражений. Короткие ключи могут вводиться в двух форматах: -abc или -а -ь -с Длинные ключи всегда перечисляются по отдельности и обозначаются двойными дефисами: --optionl --option2 --option3 Длинные ключи особенно полезны в сценариях; их содержательные имена помогают вспомнить, что делает сценарий. Большую часть объема man-страницы занимает список ключей.
См. также man(l).
1.3. Поиск нужной man-страницы Проблема Нужно найти программу или утилиту для выполнения конкретной задачи (скажем, для подсчета слов в файле), но вы не знаете, где искать. Ведь если знаешь, где искать, то тогда и искать незачем, верно?
Решение Проведите поиск по ключевым словам командой apropos или man -k. Например, чтобы найти команду для подсчета слов в файле, введите следующую строку: $ apropos count words или $ man -k count words american-english (5) - a list of english words grpconv (8) - convert to and from shadow passwords and groups. grpunconv (8) - convert to and from shadow passwords and groups. kmessedwords (1) - a letter order game for KDE lpasswd (1) - add. change, or delete digest passwords. pwconv (8) - convert to and from shadow passwords and groups. pwunconv (8) - convert to and from shadow passwords and groups. shadowconfig (8) - toggle shadow passwords on and off we (1) - print the number of newlines. words, and bytes in files
1.4. Поиск потерянных man-страниц
23
Выбор команды неважен; apropos и man -k делают одно и то же. Список обширный, но, похоже, нам нужна программа we. Не забывайте о ключе -f для вывода всех версий man-страницы: $ man -f manpath
manpath (1) manpath (5)
- determine search path for manual pages - format of the /etc/manpath.config f i l e
Комментарий Упомянутые команды выполняют поиск по ключевым словам в секциях DESCRIPTION man-страниц. Количество искомых слов может быть произвольным, но чем больше слов, тем больше результатов вы получите, потому что команда поочередно ищет каждое слово.
См. также apropos(l),man(l).
1.4. Поиск потерянных man-страниц Проблема Вам не удается найти man-страницу для установленной программы, хотя уверены, что она должна находиться в системе.
Решение Иногда база данных man-страниц повреждается из-за изменений, вносимых пользователями, или некорректной установки man-страниц. Для начала попробуйте провести поиск командой whereis -m: Swhereis -m cat cat:/usr/man/manl/cat.1.gz /usr/share/man/manl/cat.1.gz Страница обнаружена. Попробуйте прочитать ее командой man: $man /usr/man/manl/cat.l.gz
Если не получится, попробуйте заново построить базу данных man командой mandb: # mandb
Если и это не поможет, проверьте общесистемный поиск с использованием команд Locate и grep: tlocate / cat. | egrep -w 'cat\.[l-93[a-zA-Z]*[.gz]?'
Команда подойдет для любой man-страницы — достаточно заменить cat искомым именем. Если ни одно из этих решений не помогло добраться до нужной страницы, попробуйте воспользоваться сценарием finddoc из раздела 1.11. Если и сценарий не найдет страницу, значит, она отсутствует в вашей системе.
24
Глава 1. Документация
См. также whereis(l), mandb(8). Утилита grep существует в нескольких разновидностях; за подробностями обращайтесь к grep(l).
1.5. Чтение тап-страниц без программы просмотра Проблема Система, в которой вы работаете, была серьезно повреждена. Вы не можете прочитать man-страницу, потому что программа просмотра не работает.
Решение Попробуйте прочитать man-страницу напрямую программами zcat и nroff: $ zcat /usr/man/manl/cat.l.gz |nroff -man | less Последнее средство — прочитайте низкоуровневый код страницы программой zLess: $ zless /usr/man/manl/cat.l.gz Л " DO NOT MODIFY THIS FILE! I t was generated by help2man 1.32. .TH CAT " 1 " "JULY 2003" "cat ( c o r e u t i l s ) 5.0" "User Commands" .SH NAME cat V c o n c a t e n a t e f i l e s and p r i n t on t h e standard output .SH SYNOPSIS .B c a t [\fIOPTION\fR] [ \ f I F I L E \ f R ] . . .
Выглядит некрасиво, но понять можно.
Комментарий Nroff — «обертка» для форматирования тап-страниц в groff. Groff— программа форматирования документов, позволяющая генерировать документы разных форматов (HTML,. pdf, печатные копии, info-страницы и т. д.) на основе одного исходного файла.
См. также mandb(8), locate(l), grep(l), nroff(l), groff(l), zless(l), zcat(l); раздел 1.6.
1.6. Настройка путей поиска тап-страниц Проблема У вас постоянно возникают сложности с нахождением тап-страниц. После применения средств, описанных в разделе 1.4, выясняется, что большинство отсутствующих страниц находятся в каталоге, о котором man, похоже, ничего не знает. Возможно, вновь установленная программа разместила свои man-страницы в ка-
1.7. Использование info-страниц
25
ком-то странном каталоге (скажем, /opt/man). А может, вы хотите разместить часть страниц в нестандартном каталоге. Как настроить man на поиск этих страниц?
Решение Отредактируйте файл /etc/manpath.config. Допустим, в путь поиска нужно добавить каталог /opt/man. Включите его в /etc/manpath.config: # Поля, включаемые в каждый автоматически # сгенерированный путь MANPATH MANDATORY_MANPATH /usr/man MANDATORY_MANPATH /usr/share/man MANDATORY_MANPATH /usr/XllR6/man MANDATORY_MANPATH /usr/locai/man MANDATORY_MANPATH /opt/man Все, готово. Теперь man найдет man-страницы, находящиеся в новом каталоге. При создании нестандарного каталога man-страниц не забудьте создать подкаталоги разделов: $ Is /opt/man/local manl man2 man3 man4 man5 тапб man7 man8 man9 Включать все нумерованные подразделы не обязательно — достаточно разделов для тех man-страниц, которые будут там храниться. Если вы будете использовать подкаталоги (например, /opt/man и /opt/man/ local), укажите их именно в таком порядке: MANDATORY_MANPATH /opt/man/local MANDATORY_MANPATH /opt/man Подкаталоги должны указываться перед родительскими каталогами, в противном случае программа просмотра man-страниц их проигнорирует.
Комментарии Чтобы узнать текущий путь поиска man-страниц, выполните команду manpath без параметров: $ manpath /usr/local /man:/usr/share/man:/usr/XHR6/man:/usr/man
См. также manpath(l); manpath(5).
1.7. Использование info-страниц Проблема Вы решили поближе познакомиться с info-страницами и вызвали info tar (или любую другую info-страницу по своему выбору). Однако разобраться в ней не такто просто. Как лучше всего освоить их?
26
Глава 1. Документация
Решение Воспользуйтесь встроенным учебником info. Введите в командной строке строку info, нажмите h и выполните инструкции. Обучение занимает 15-30 минут, и это время будет потрачено с пользой.
Комментарий Хотя некоторые пользователи считают, что механизм перемещения по info-страницам слишком усложнен, с info-страницами все же стоит познакомиться. Хотя работать с info-страницами сложнее, чем с man-страницами, (обычно) они проще для понимания. Освоившись с основными приемами перемещения, вы сможете очень быстро найти нужные сведения. Существует ряд удобных программ просмотра info-страниц, в том числе pinfo, Konqueror и Yelp. Pinfo работает в консольном режиме, а для Konqueror и Yelp необходима система X. Программа Konqueror особенно удобна для поиска и печати отдельных страниц.
См. также info info.
1.8. Печать man-страниц Задача Требуется напечатать man-страницу в удобочитаемом формате. Вы попытались применить команду man foo | Lpr, но результат выглядит сомнительно: поля слишком малы, а все форматирование теряется.
Решение С ключом -t man-страница форматируется специально для печати. Страница man finger хорошо подходит для экспериментов, потому что она состоит всего из двух листов: % man -t finger | lpr Вывод на сетевой принтер: $ man -t finger | 1рг -Р printername Получение списка доступных принтеров: $ lpstat -p -d Возможно и другое решение. Следующая команда форматирует страницу в HTML и отправляет ее в браузер по вашему выбору: $ man -Hmozilla finger Далее остается лишь отдать команду печати в браузере. Проследите за тем, чтобы между -Н и именем браузера не было пробелов.
1.9. Печать info-страниц
27
Комментарий Во все основные дистрибутивы Linux входит поддержка CUPS (Common Unix Printing System). CUPS поддерживает команды как System V (lp), так и Беркли (Lpr). В настоящем разделе использованы команды Беркли. Вот их аналоги для System V: $ man -t finger | lp Вывод на сетевой принтер: $ man -t finger | lp -d printername
См. также Man(l), lpr(l), lp(l); глава 14; CUPS Software Users Manual (http://localhost:631/ documentation.html).
1.9. Печать info-страниц Проблема Требуется напечатать несколько info-страниц, но, похоже, в info нет встроенной команды печати.
Решение Воспользуйтесь lpr: $ info finger | lpr
Однако в зависимости от настроек принтера в распечатке могут оказаться слишком маленькие поля или странные переносы строк. Отформатируйте выходные данные при помощи параметров lpr: $ info finger | lpr -о cpi=12 -о page-left=54 -о page-right=54 -о page-top=54 \ -о page-bottom=54
Числовые значение задаются в пунктах, то есть 1/72 дюйма. В представленном примере на странице создаются одинаковые поля по 3/4 дюйма.
Комментарий Во все основные дистрибутивы Linux входит поддержка CUPS (Co; non Unix Printing System). CUPS поддерживает команды как System V (lp), i t Беркли (lpr). В настоящем разделе использованы команды Беркли; далее пр1 одятся их аналоги для System V. Печать info-страницы: $ info finger | lp
Печать info-страницы с параметрами форматирования lp: $ info finger | l p -о cpi=12 -о page-left=54 -о page-right=54 -о page-top=54 \ -о page-bottom=54
28
Глава 1. Документация
См. также info info, lpr(l), lp(l); глава 14; CUPS Software Users Manual (http://localhost:631/ documentation.html).
1.10. Печать отдельных man- или info-страниц Проблема Многие man- и info-документы весьма длинны — скажем, man bash занимает 33 печатных страницы. Требуется напечатать лишь часть описания. Как огранизовать выборочную печать страниц?
Решение Экспортируйте man- или info-страницу в текстовый файл командой col. После этого вы сможете легко выбрать печатаемые страницы. Следующие команды показывают, как сделать это для страниц man bash или info bash: t man bash | col -b > bash.txt $ info bash | col -b > bash.txt
Комментарий Если просто ввести команду man bash > bash.txt, результат будет выглядеть убого. Команда col -b приводит распечатку в порядок, убирает из нее лишние переводы строк и символы Backspace. Это особенно важно для перевода man-страниц в текстовый формат, в man-страницах часто встречаются символы Backspace, которые затем отображаются в текстовых файлах в виде пустых квадратов или повторяющихся символов.
См. также col(l).
1.11. Поиск всей документации к программе Проблема Требуется найти все файлы README и H0WT0, все журналы изменений, руководства, примеры и прочую документацию, прилагаемую к установленной программе.
Решение Воспользуйтесь finddoc — замечательным сценарием Python, любезно предоставленным замечательной Акканой Пек.
1.11. Поиск всей документации к программе
29
Имя сценария может быть произвольным. Не забудьте разрешить его исполнение: $chmod +x finddoc
В командной строке указывается только имя сценария и название программы, для которой ищется документация. Пример: $ ./finddoc grep
/usr/share/doc/grep /usr/share/doc/grep-dctrl /usr/share/doc/grep-dctrl.changelog.gz Выходные данные фильтруются другими командами или направляются в файл: $ ./finddoc | grep -i examples |lpr $ ./finddoc | grep -i faq $ ./finddoc j grep -1 examples > python-examples.txt
Листинг 1.1. Программа finddoc #!/usr/bin/env python # # # #
Finddoc: Сценарий для поиска документации Linux-программ. При создании собственной копии сценария обязательно сохраните начальные пробелы в том виде, в котором они приводятся в тексте. потому что они необходимы для работы Python.
# Поиск документации по заданным строкам, без учета регистра символов # и только по целым словам. Сценарий зависит от "locate" # и предполагает, что база данных locate содержит актуальную информацию. # # Copyright 2003 by Akkana Peck. # Допускается использование, распространение или модификация программы # на условиях GPL. import sys. os, string, re # Имена файлов, которые мы будем считать относящимися к документации. # Редактируйте по своему усмотрению. Следите за тем. чтобы # новые имена добавлялись только в нижнем регистре, docfilenames - [ \ "changelog". \ "readme", \ "install". \ howto . \ "authors", \ "news", \ "todo". \ "config", \ "sample" \ samples \ example . \ "examples", \ "ref", \ "guide", \ "manual", \ "quickstart", \
., л продолжение •&>
30
Глава 1. Документация
Листинг 1.1 {продолжение) thanks . \ "notes". \ "features", \ "faq". \ "acknowledgement". \ "bugs", \ "problems" \ def system out (cmdstr) : retlist = [] fp = os.popen(cmdstr) while 1: s - fp.readlineO if not s : break retlist.append(s) fp.closeO return retlist # mainO for arg in sys.argv : #print string.split(arg. " \t./") files = system_out("locate " + arg + " | grep -w " + arg): for path in files : #print path # Особый случай для файлов, в пути которых присутствуют слова # "man", "doc" или "info": i f (string.findtpath, "/man") >= 0) \ or (string.find(path. "/doc") >=* 0) \ or (string.find(path. "/info") >- 0) : print path. continue # Проверить, совпадает ли с каким-либо именем в файле: base = os.path.basename(path) for nam in docfilenames : if base ~ "" : continue # Для поиска по части слова # Поиск только по всему слову: # Make aA regexp to search for nam as full-word only pat - " " + nam + "$" if (re.compile(nam).search(base, 1)) : print path, base = "" continue
См. также locate(l), grep(l).
Глава 2
Установка и модификация программ в системах на базе RPM 2.1. Введение В наши дни установка дистрибутива Linux производится без особых проблем. Вставьте диск CD-ROM в дисковод, задайте несколько конфигурационных параметров и отправляйтесь пить чай, пока идет установка. Современные версии Linux превосходно распознают оборудование, быстро устанавливаются (обычно за 30 минут и менее) и требуют не более одной промежуточной перезагрузки.
Компиляция системы по исходным текстам (старый подход) Сопровождение системы Linux также прошло большой путь. Благодаря пакетам и интеллектуальным средствам разрешения зависимостей своевременное обновление системы и исправление ошибок упростилось и стало порождать меньше ошибок. В наши дни молодежь получает все готовенькое. В доисторические времена не было дисководов CD-ROM — вместо широкополосного подключения приходилось использовать коробки дискет. Чтобы установить новую программу, нам, ветеранам, приходилось подолгу загружать архивы или копировать их с дискет, а затем компилировать их по исходным текстам. Зависимости? Все проблемы приходилось решать самим, без малейшей помощи со стороны новомодных утилит. Все проходило примерно так: # t a r -xvf someprogram.tar # ./configure # make
Вызов make завершался неудачно из-за неразрешенных зависимостей. Тогда приходилось загружать архив программы с необходимыми библиотеками, что на модеме со скоростью на 300 бод (такой, с резиновой присоской, крепится на телефоне) занимало около 6 часов. Я провела это время за работой в саду. Когда пересылка была закончена, я вернулась, распаковала новый архив и повторила попытку: # ./configure # make
32
Глава 2. Установка и модификация программ в системах на базе RPM
Снова длинная цепочка сообщений об ошибках, указывающих на новые неразрешенные зависимости. Загружаем новый архив, снова работа в саду. К тому моменту, когда все было установлено и нормально работало, помидоры вырастали до размеров дыни. Хорошо, что в те времена мы были такими умными, что могли бы обойтись и без компьютеров. Почему возникали эти мучения с зависимостями? Потому что в Linux используются общие библиотеки, которые динамически подключаются на стадии выполнения. Многие программы, совершенно не связанные друг с другом, пользуются одними библиотеками; такая архитектура повышает скорость и эффективность системы. Программы расходуют меньше памяти и места на диске, становятся более компактными, что упрощает их распространение. Но по мере эволюции и усложнения системы Linux становилось все труднее справляться с построением системы по исходным текстам. Так программы стали оформляться в виде пакетов. В пакет входят откомпилированные библиотеки; сценарии, выполняемые до и после установки; файловые индексы; сценарии удаления и т. д. Каждый пакет знает все, что ему необходимо знать для разрешения своих зависимостей. Информация обо всех файлах, установленных из пакетов, хранится в системной базе данных пакетов.
Средства разрешения зависимостей Впрочем, ситуация не столь безоблачна. Самой популярной системой управления пакетами для Linux является RPM (Red Hat Package Manager). RPM — мощная система; она осуществляет проверку зависимостей и версий, а также отслеживает все установленные пакеты в базах данных RPM. Но RPM не может произвести выборку дополнительных пакетов для разрешения зависимостей или управлять связями между пакетами. Оказавшись в тупике из-за проблем зависимости, RPM лишь сообщает, какие пакеты нужно установить; пользователю приходится самостоятельно искать пакеты и устанавливать их. При этом могут возникнуть новые конфликты зависимостей, и простая установка быстро выходит из-под контроля. Подобные ситуации называются «кошмаром RPM». Для систем на базе RPM было разработано несколько программ разрешения зависимостей, в том числе apt-rpm, urpmi, Yum и Ximian Red Carpet. В конкретных дистрибутивах имеются превосходные программы установки/разрешения зависимостей — скажем, up2date в Red Hat или YaST в SuSE. В этой главе рассматриваются основы RPM и программа Yum, которая изначально разрабатывалась для систем на базе RPM. Для многих пользователей Yum обеспечивает оптимальное сочетание богатства возможностей и простоты использования.
2.2. Установка пакетов Проблема Вы хотите знать, как устанавливать программные пакеты в Red Hat и других аналогичных системах.
2.3. Обновление пакетов
33
Решение Воспользуйтесь системой управления пакетами RPM. Команда установки в Red Hat имеет следующий синтаксис: # грт -1 пакет
Например, следующая команда устанавливает графический редактор Tuxpaint. Ключ -v обеспечивает выдачу подробных сообщений, а ключ -h отображает индикатор хода установки в виде строки из символов #: # rpm -ivh tuxpaint-9.13-1.i386.rpm
Preparing.. .#######»############## [ЮО*] 1
J-
!
J-
It It tt It II It It II II II It It It tt tt It tt II It It Г1 II It II U
г 1 t\ А П/ ~l
. t u x p a i n t //1!IIIIIIIIIItitfffffДпЗД-fffrfffffffff L100*J
Следующая команда проверяет установку без ее фактического выполнения: # rpm -ivh --test tuxpaint-9.13-1.1386.rpm
Preparing,. .ff////W##f####titftfttfttttf [1СШ] *
Комментарий Самой распространенной проблемой с RPM является «кошмар RPM», то есть бесконечная цепочка неразрешенных зависимостей. Вот некоторые рекомендации по ее предотвращению: О не оставляйте неразрешенные зависимости. Они не исчезнут сами по себе, а лишь будут скрываться во тьме и расти со временем; О качество пакетов RPM не гарантировано. Любой желающий может слепить пакет и отправить его для распространения. По возможности старайтесь выбирать пакеты RPM, построенные специально для вашего дистрибутива и платформы. PLD (Polished Linux Distribution) строит качественные пакеты RPM для всех систем на базе х86; О когда потребуется построить программу по исходным текстам, используйте утилиту Checklnstall. Checklnstall генерирует пакеты для Red Hat, Debian и Slackware, поэтому вы получаете дистрибутив со всеми преимуществами непосредственной компиляции и системы управления пакетами (см. раздел 4.5).
См. также rpm(8); RPM.org (http://www.rpm.org/); Maximum RPM (http://www.rpm.org/max-rpm/ index.html). •
2.3. Обновление пакетов Проблема Вышла новая версия программы с новыми возможностями и исправлениями ошибок. Требуется обновить установленный пакет RPM.
34
Глава 2. Установка и модификация программ в системах на базе RPM
Решение Воспользуйтесь флагом -U: #rpn -Uvh tuxpaint-9.13.-l.i386.rpm
Чтобы предварительно протестировать команду, введите: #rpm -Uvh --test tuxpaint-9.13.-l.i386.rpm
Комментарий Вместо ключа -i (установка, install) может использоваться ключ -U (обновление, Upgrade). При этом может выполняться как обновление, так и установка пакета; команда работает в обоих случаях. Ключ -II заменяет старый пакет. Если вы хотите установить несколько версий одного пакета (скажем, дсс) или несколько разных ядер, не используйте ключ -U — только -i.
См. также rpm(8); RPM.org (http://rpm.org); Maximum RPM (http://www.rpm.org/max_rmp/ index.html).
2.4. Удаление пакетов Проблема Некая программа вам надоела, и вы хотите ее удалить. А может, вы случайно установили ненужную программу. Итак, требуется удалить пакет RPM из системы.
Решение Задача решается командой rmp -e: # rpm -ev tuxpaint
Вводить полное имя пакета (например, tuxpaint-9.13.-l.i386.rpm) не обязательно; достаточно одной метки. Чтобы удалить сразу несколько программ, перечислите их, разделяя пробелами: # rpm -ev tuxpaint SDLttf SDLttf-devel SDLimages
Чтобы установка производилась без проверки зависимостей: # rpm -ev --nodeps tuxpaint
Предварительное тестирование командной строки перед выполнением осуществляется командой # rpm -ev --test tuxpaint SDLttf SDLttf-devel SDLJmages
Комментарий Если RPM сообщает, что удалить пакет невозможно, потому что от него зависят другие пакеты, вам придется либо удалить остальные пакеты, либо оставить пакет в системе. В некоторых случаях (например, при замене Sendmail) зависимости приходится разрывать. Новая почтовая программа — Postfix, Exim или qmail —
2.5. Получение информации об установленных пакетах
35
разрешит зависимости Sendmail, но сначала Sendmai нужно удалить, а это неизбежно приведет к нарушению всех зависимостей.
См. также rpm(8); Maximum RPM (http://www.rpm.org/max-rpm/index.html).
2.5. Получение информации об установленных пакетах Проблема Требуется узнать, какие пакеты установлены в системе, какие файлы входят в пакет или к какому пакету принадлежит тот или иной файл. Эта информация может понадобиться по разным причинам; скажем, вы хотите точно узнать, какая версия программы установлена в системе или к какому пакету принадлежит тот или иной файл. А может быть, какой-то файл был случайно изменен, и вы хотите знать, что именно вы сломали.
Решение Воспользуйтесь информационными запросами RPM. Все запросы начинаются с rpm -q. Следующая команда проверяет по базе данных RPM, установлена ли программа: $ rpm -q tuxpaint
tuxpaint-9.13-1 Для проведения поиска установленного пакета по его частичному имени без учета регистра символов используется команда: $ rpm -qa | grep -1 kde
lockdev-1.0.1-1.3 kdebase-3.1.4-6 kdeutils-3.1.4-1 kdegames-3.1.4-4
Вывод списка всех файлов установленного пакета: $ rpm -ql kdegames
/usr/bin/atlantik /usr/bin/kasteroids /usr/bin/katomic ... Вывод списка документации к приложению: $ rpm -qd kdegames | grep katomic /usr/share/doc/HTML/en/katomic/common /usr/share/doc/HTML/en/katomic/index.docbook ... Вывод списка конфигурационных файлов пакета: $ rpm -qc openssh
/etc/ssh/moduli
36
Глава 2. Установка и модификация программ в системах на базе RPM
Вывод списка конфигурационных файлов системной команды: $ rpm -qcf /usr/bin/ssh
/etc/ssh/ssh_config
Вывод списка всех установленных пакетов: $ гпр -qa setup-2.5.27-1.1 tzdata-2003d-l bzip2-libs-l.0.2-10
Сохранение списка в файле с параллельным просмотром на экране: $ rpm -qa | tee rpmlist.txt Определение того, к какому пакету принадлежит тот или иной файл: $ rpm -qf /usr/bin/tuxkart
tuxkart-0.2.0-3
Запросы RPM не обрабатывают символические ссылки и сообщают, что файл «не принадлежит ни к одному пакету». Чтобы найти файл, на который указывает символическая ссылка, воспользуйтесь командой $ namei -/tuxkart
f: tuxkart
1 tuxkart -> /usr/games/tuxkart d/ d usr d games - tuxkart Вывод информации о пакете: $ rpm -qi kdegames Name :kdegames Relocations/usr Version :3.1.4 Vendor:Red Hat. Inc. Release :2 Build date: Mon 13 Oct 2003 Install date:Tue Nov 5.2003 Build host: daffy.perf.redhat.com Group : Amusements/Games Source RPM:kdegames-3.1.4-2.src.rpm Size :16167441 License: GPL Signature :DSA/SHA1. Tue 28 Oct 2003 Key ID b446dO4f2a6fd2 Packager :Red Hat. Inc. <http://bugzilla.redhat.com/bugzi11a> Summary :K Desktop Environment - Games Description : Included with this package are: kenolaba, kasteroids. kblackbox, kmajongg. kmines. konquest, kpoker. kreversi, ksame. kshisen. ksokoban. ksmiletris. ksnake. ksirtet, katomic. kjumpingcube, ktuberling
Комментарий Для поиска документации к конкретному приложению также можно воспользоваться сценарием finddoc из раздела 1.11.
См. также rpm(8); раздел 1.11; Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.7. Поиск недавно установленных пакетов
37
2.6 Получение информации о пакетах, не установленных в системе Проолемэ Требуется получить информацию о зависимостях нового пакета; узнать, какие файлы в него входят или присутствует ли в нем конкретный файл.
Решение Для выполнения запросов к пакетам, не установленным в системе, в командную строку добавляется ключ -р. Следующая команда выводит список всех файлов документации: $ грш -qpd tuxpaint-9.13-l.i386.rpm
/usr/share/doc/tuxpaint-9.13-l/AUTHORS.txt /usr/share/doc/tuxpaint-9.13-l/CHANGES.txt
'"sr'share'doc/№nt-"3-1't0PYI"G-"t
I .8.5
Вывод списка всех файлов: $ rpm -qpl tuxpaint-9.13-l.i386.rpm
/etc/tuxpaint/tuxpaint.conf /usr/bin/tuxpaint
Вывод списка зависимостей пакета: $ rpm -qpR tuxpaint-9.13-1.i386.rpm /bin/sh SDL >- 1.2.4 SOLJmage
Комментарий Любую информацию о конкретных пакетах можно получить до их загрузки из таких архивов RPM, как http://freshrpms.net, http://rpmfind.net или http:// rpm.pbone.net. 1
См. также rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html); FreshRPMs (http:// freshrpms.net/); rpmfind (http://rpmfnd.net); rpm.pbone (http://rpm. pbone.net).
2.7. Поиск недавно установленных пакетов Проблема Несколько дней назад вы установили несколько новых пакетов, но забыли, какие именно.
38
Глава 2. Установка и модификация программ в системах на базе RPM
Решение Добавьте в командную строку ключ —last: # rpm -qa --last
Команда выводит список установленных пакетов, начиная с тех, которые устанавливались последними.
Комментарий Если список получится слишком длинным, передайте его less или head: rpm -qa — last|head.
См. также rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.htmL).
2.8. Перестройка базы данных RPM Проблема Похоже, база данных RPM в вашей системе повреждена или содержит устаревшую информацию, потому что она не отвечает на запросы о заведомо установленных RPM. А может быть, вы существенно переработали свою систему и хотите быть уверенными в том, что база данных RPM содержит актуальную информацию.
Решение Попробуйте построить заново базу данных RPM с правами root: # rpm --rebuiiddb
или построить ее заново: # rpm --initdb
Решение Необходимость в перестройке базы данных RPM возникает редко, но вреда эта операция не принесет. При любом внесении серьезных изменений в систему будет неплохо перестроить базу данных RPM. При сравнении размеров /var/h'b/rpm/ packages до и после запуска rpm —rebuilddb иногда можно заметить некоторое уменьшение, поскольку в процессе перестройки из базы данных исключаются неиспользуемые части.
См. также rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.9. Отслеживание библиотек в системах на базе RPM
39
2.9. Отслеживание библиотек, построенных по исходным текстам, в системах на базе RPM Проблема В одной системе должны использоваться как программы, построенные по исходным текстам, так и пакеты RPM. Но RPM ничего не знает о библиотеках, построенных по исходным текстам, и ошибочно выдает сообщения о неразрешенных зависимостях.
Решение Воспользуйтесь сценарием rpm-orphan-find. Сценарий находит все библиотеки в вашей системе, а затем сравнивает результаты с содержимым базы данных RPM. Все «бесхозные» библиотеки объединяются в новый, виртуальный пакет .rpm. Пакет не содержит файлов, а только список обеспечиваемых зависимостей. Сценарий запускается как любой сценарий Bash: # chmod +x rpm-orphan-find # ./rpm-orphan-find
После завершения работы сценария установите новый пакет, и прежде «бесхозные» библиотеки будут включены в базу данных RPM. Спасибо Полу Хайнлайну (Paul Heinlein) и Питеру Сэмюэльсону (Peter Samuelson) за этот замечательный сценарий. Листинг 2.1. Программа rpm-orphan-find #!/bin/bash
# # # ##
rpm-orphan-find. сценарий для поиска "бесхозных" библиотек в системах на базе RPM и их преобразования в виртуальный пакет .rpm Авторы - Пол Хайнлайн и Питер Сэмюэльсон
# Copyright 2003 # Допускается использование, распространение или модификация # программы на условиях GPL. 0S=$(uname -s) LIBS="/lib / u s r / l i b $(cat / e t c / I d . s o . c o n f ) " NAME=$(echo ${OS}-base-libs | t r ' [ A - Z ] 1 ' [ a - z ] ' ) VER-1.0: REL=1 TMPSPEC=$(mktemp /tmp/${NAME}.spec.XXXXXX)
exec 9>$TMPSPEC cat < < _ e o f _ >&9 Summary: SOS Base Virtual Package Name: $NAME Version: $VER Release: $REL продолжение тУ
40
Глава 2. Установка и модификация программ в системах на базе RPM
Листинг 2.1 {продолжение) Group: System Environment/Base License: None eof found=0: orphan=0; echo "Scanning system libraries SNAME version $VER-$REI " find $LIBS -type f \( -name '*.so.*' -o -name '*.so' \) | while read f do ((found++)) if ! rpm -qf $f >/dev/null 2>&1 then ((orphan++)) echo "Provides: $(basename $f)" >&9 fi echo -ne "Orphans found: $orphan/$found...\r" done echo '': echo '' cat « _ e o f _ >&9 ^description This is a virtual RPM package. It contains no actual files. It uses the 'Provides' token from RPM 3.x and later to list many of the sharedlibraries that are part of the base operating system and associated subsets for this SOS environment. «prep # nothing to do «build # nothing to do «install # nothing to do fclean # nothing to do 2post # nothing to do «files eof exec 9>&rpmbuild -ba STMPSPEC; rm STMPSPEC
См. также rpm(8), rpmbuild(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.10. Решение проблем установки RPM
41
2.10. Решение проблем установки RPM Г-.
Г-
Проблема
Попытка установки пакета RPM завершается с сообщением «Error: Failed dependency». Добро пожаловать в «кошмар зависимостей»!
Решение Соберите воедино все пакеты, необходимые для разрешения зависимостей, и установите их все сразу. Пример: # rpm -ivh tuxpaint-0.9.13-l.i386.rpm error: Failed dependencies SDLjimage is needed by tuxpaint-0.9.13-1 SDL_ttf is needed by tuxpaint-0.9.13-1 1ibSDL_image-1.2.so.O is needed by tuxpaint-0.9.13-1 libSDL_ttf-2.0.so.O is needed by tuxpaint-0.9.13-1 # rpm -ivh tuxpaint-0.9.13-l.i386.rpm SDL_image-1.2.3-4.i386.rpm SDLjttf-2.0.6I.i386.rpm
Программа установки сортирует их и устанавливает в правильном порядке. Что делать, если RPM жалуется на отсутствие файла или пакета, а вы абсолютно уверены в том, что он установлен? Возможно, база данных RPM содержит ошибки; попробуйте перестроить ее: # rpm - -rebuilddb
Если это не помогло, переустановите якобы отсутствующий пакет с ключом --replacepkgs: # rpm -ivh --replacepkgs SDL_ttf-2.0.6-l.i386.rpm
Если вы твердо уверены в том, что необходимые библиотеки существуют в вашей системе, попробуйте провести форсированную установку, не обращая внимания на ошибки: # rpm -ivh --force tuxpaint-2002.10.20-1.i386.rpm
или откажитесь от проверки зависимостей: # rpm -ivh --nodeps tuxpaint-2002.10.20-l.i386.rpm
Если конфликт зависимостей так и не удалось разрешить, попробуйте установить новую программу и все ее зависимые пакеты из пакетов, сгенерированных по исходным текстам (см. раздел 2.11).
Комментарий Где найти необходимые пакеты? Начните с домашней страницы той программы, которую вы пытаетесь переустановить. Обязательно прочтите всю имеющуюся документацию. Сейчас появилось множество разных дистрибутивов на базе RPM, поэтому постарайтесь раздобыть пакеты, построенные для вашей конкретной системы. Вот некоторые из крупнейших общедоступных архивов RPM: о FreshRPMs — http://freshrpms.net; о rpmfind - http://rpmfind.net; О rpm.phone — http://rpm.phone.net.
42
Глава 2. Установка и модификация программ в системах на базе RPM
См. также rpm(8); RPM.org (http://www.rpm.org/); Maximum PRM (http://www.rpm.org/maxrpm/index.html).
2.11. Сборка пакетов по исходным текстам Проблема Установить готовый пакет не удается из-за того, что он несовместим с вашей системой на двоичном уровне. А может, вы просто предпочитаете компилировать приложения в своей системе или хотите сначала отредактировать исходный код, а затем построить пакет.
Решение Постройте новую программу из пакета RPM с исходными текстами (SRPM, Source RPM). Загрузите SRPM (в данном примере tuxpaint-2002.10.20-l.src.rpm) в каталог по вашему усмотрению. Проследите за тем, чтобы он подходил для вашей поставки Linux. Запустите программу установки пакета: # rpm -ivh tuxpaint-2002.10.20-l.src.rpm
Команда помещает исходные тексты в каталог/usr/src/SOURCES, а файл spec — в каталог/usr/src/SPECS: # Is /usr/src/SOURCES tuxpaint-2002.09.29.tar.gz tuxpaint-Makefile.patch tuxpaint-stamps-2002.09.29.tar.gz tuxpai nt.desktop tuxpai nt-opt.patch $ Is /usr/src/SPECS tuxpaint.spec
Далее построите файл spec: # rpmbuild -bb tuxpaint.spec
Новый пакет RPM создается в каталоге /usr/src/RPMS/i386: # Is /usr/src/RPMS/i386 tuxpaint-2002.10.20-1.i386.rpm
Теперь у вас имеется новый пакет RPM с программой Tuxpaint, откомпилированный для вашей системы.
Комментарий В вашей системе исходные тексты могут храниться в другом каталоге. В Fedora 1, как и в некоторых ранних версиях используется каталог /usr/src/redhat/RPMS/. В других поставках используется каталог/usr/src/RPM/RPMS. Разберитесь, и вы найдете нужный каталог. Построение пакетов по исходным текстам не избавляет от «кошмара RPM». Оно всего лишь гарантирует двоичную совместимость с системными библиоте-
2.12, Настройка параметров сборки SRPM
43
ками и оптимизацию RPM для архитектуры вашей системы. Соблюдение зависимостей придется обеспечивать вручную, а это далеко не так просто, как кажется. Обратите внимание: rpmbuild и rpm — два отдельных пакета.
См. также rpmbuild(8), rpm(8); RPM.org (http://rpm.org/); Maximum PRM (http://www.rpm.org/ max-rpm/index.html).
2.12. Настройка параметров сборки SRPM Проблема В вашей системе действуют особые требования, из-за которых в приложениях должны присутствовать особые возможности, не используемые по умолчанию. По этой причине вы хотите контролировать параметры компиляции SRPM, чтобы обеспечить включение нужных возможностей в приложение. •
Решение Сначала загрузите и установите исходный пакет RPM: # rpni -ivh samba-3.0.0-15.src.rpm
Затем перейдите в каталог SPECS и откройте файл spec: # cd /usr/src/redhat/SPECS # vim samba.spec Найдите секцию с параметрами %configure: ^configure \
--with-acl-support \ --with-automount \ --with-fhs \
Добавьте или удалите параметры конфигурации, сохраните и закройте файл spec, а затем постройте пакет, как описано в разделе 2.11: # cd /usr/src/redhat/SPECS # rpmbuild -bb tuxpaint.spec
Комментарий Где найти список параметров? Перейдите в каталог SOURCES и распакуйте архив с исходными текстами: # cd /usr/src/redhat/SOURCES # tar xzvf samba-3.0.0.tar.bz2 Как упоминалось в разделе 2.11, в вашей системе может использоваться другой каталог исходных текстов.
44
Глава 2. Установка и модификация программ в системах на базе RPM
Найдите в распакованном архиве сценарий configure и запустите его встроенную команду: # cd /usr/src/redhat/S0URCES/samba-3.0.0/source # ./configure --help 'configure' configure t h i s package to adapt to many kinds of systems Optional Packages: with-PACKAGE[=ARG] without-PACKAGE with-fhs with-privated=DIR
use PACKAGE [ARG=yes] do not use PACKAGE Use FHS-compliant paths Where to put smbpasswd
Настроив директиву %configu re по своему усмотрению, сохраните и закройте файл. Создатели пакетов не могут удовлетворить потребности всех пользователей. Настройка SRPM позволит легко обеспечить именно тот набор параметров конфигурации, который нужен в вашем конкретном случае. В наше время настройка конфигурации SRPM чаще всего применяется для добавления или настройки поддержки аутентификации. Существует много разных внутренних модулей аутентификации (LDAP, MySQL, BerkeleyDB, PostgreSQL) и много разных аутентификационных протоколов. С точки зрения безопасности рекомендуется включать только те возможности, которые будут реально использоваться. '•
См. также rpmbuild(8), rpm(8); RPM.org (http://www.rpm.org/); Maximum PRM (http://www.rpm.org/ max-rpm/index.htrnl).
2.13. Установка yum Проблема Мне надоело постоянно попадать в «кошмар RPM». Работать должен компьютер, а не пользователь.
Решение Воспользуйтесь yum (Yellow dog Updater Modified). Программа yum является стандартной для дистрибутива Fedora; в других системах ее придется устанавливать дополнительно: # rpm -ivh yum-2.0.4-1.noarch.rpm
Затем загрузите ключи GPG, необходимые для загрузки из проекта Fedora: # rpm --import http://www.fedora.us/FEDORA-GPG-KEY
Дополнительные ключи можно найти в каталогах загрузки, таких как http:// download.fedora.redhat.eom/pub/fedora/tinux/core/2/i386/os/. Понадобятся ключи для всех архивов, на работу с которыми будет настроен yum. Включите следующую строку в файл /etc/yum.conf, чтобы проверка ключей осуществлялась автоматически: gpgcheck=l
2.14. Настройка yum
45
Теперь можно устанавливать новую программу: # yum install tuxpaint
Первая загрузка Yum займет около 30 минут, потому что она будет сопровождаться загрузкой списков пакетов: Gathering header information file(s) from server(s) Server: Fedora Linux / stable for Red hat Linux 9 (i386) Server: Red Hat Linux 9 П386) Server: Red Hat Linux 9 П386) updates Finding updated packages Downloading needed headers getting /var/cache/yum/fedora-stable/headers/leafnode-0-1.9.430.fdr.l.rh90.i386.hdr getting /var/cache/yutn/fedora-stable/headers/libzvt-devel -02.0 .1-0.fdr,5.rh90.i386.hdr Dependencies resolved I w i l l do the following: [ i n s t a l l : tuxpaint-2002.10.20-l.i386.rpm] Is t h i s ok [y/N]:
Ответьте утвердительно, и на этом все будет закончено. •
Комментарий FreshRPMs — хороший источник качественных пакетов. Зеркала yum находятся по адресу http://ayo.freshrpms.net. Ваш пакет yum из FreshRPMs будет заранее настроен на использование архивов FreshRPMs. He забудьте установить ключ GPG: # rpm --import http://freshrpms.net/packages/RPM-GPG-KEY.txt
Включение gpgcheck=l в файл yum.conf и импортирование ключей гарантирует автоматическую проверку сигнатур пакетов. Этот простой, удобный способ гарантирует, что устанавливаемые пакеты не подвергались злонамеренным модификациям или искажениям в процессе пересылки.
См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/); зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net).
2.14. Настройка yum Проблема Требуется сменить источник, из которого yum загружает программы.
Решение Отредактируйте список источников загрузки в файле /etc/yum.conf. Допустим, вы хотите использовать некоторые зеркала Fedora по адресу http://www.fedora.us/wiki/ FedoraMirrorList:
46
Глава 2. Установка и модификация программ в системах на базе RPM
University of Southern California. USA ftp: //mi rrors.use.edu/pub/1i nux/fedora/ http://mi rrors.use.edu/pub/1i nux/fedora/
Теперь отредактируйте файл /etc/yum.conf, используя стандартные записи в качестве образца: [base] name=Fedora Core $releasever - Sbasearch - Base baseurl=http://mirrors.kernel.org/fedora/core/$releasever/$basearch/os baseurl=http://mi rrors.use.edu/pub/1i nux/fedora/$releasever/$basearch/os
Комментарий Сетевой этикет предписывает по возможности пользоваться зеркалами, чтобы не перегружать главный сайт по адресу http://fedora.redhat.com.
См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/); зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net); Fedora Mirror List (http://www.fedora.us/wiki/FedoraMirrorList).
2.15. Установка и обновление пакетов в yum Проблема Требуется узнать, как устанавливать и обновлять пакеты и как выполнять обновление системы.
Решение Сначала обновите список пакетов: # yum check-update
Новые пакеты устанавливаются командой # yum -у install tuxkart
Флаг -у включает режим автоматизированной установки (с положительными ответами на все вопросы). Чтобы обновить один пакет, воспользуйтесь командой # yum update gltron Обновление нескольких пакетов: # yum update gltron ktron tuxracer Обновление всех установленных пакетов: # yum update
Поиск устанавливаемого пакета: # yum search quake
Допустим, вам нужна конкретная библиотека, но вы не знаете, какой пакет предоставляет ее. Найдите ее с помощью yum:
2.17. Получение информации об установленных пакетах в yum
47
# yum provides 1 i b c 6 . 1 - 1 . s o . 2
Комментарий Одна из самых замечательных особенностей Yum состоит в том, что программа хорошо интегрируется с существующими системами. Yum читает готовую базу данных RPM и создает новый список пакетов, после чего ей можно пользоваться.
См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/); зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net); Fedora Mirror List (http://www.fedora.us/wiki/FedoraMirrorList).
2.16. Удаление пакетов в yum Проблема Требуется удалить некоторые пакеты из системы.
Решение Yum позволяет решить и эту задачу: # yum remove gltron
Одновременное удаление нескольких пакетов: # yum remove gltron ktron tuxkart xpoker
Комментарий Yum также удаляет пакеты, которые перестали быть необходимыми. yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/).
2.17. Получение информации об установленных пакетах в yum Проблема Требуется узнать, какие пакеты установлены в системе, или получить информацию о конкретных пакетах.
Решение Используйте команды запросов yum. Следующая команда выводит список всех установленных пакетов: # yum list installed
48
Глава 2. Установка и модификация программ в системах на базе RPM
Поиск конкретных пакетов: # yum l i s t installed | grep -i tux tuxracer i386 0.61-23 tuxracer i386 0.2.0-3
Вывод информации о пакете: # yum info tuxracer
Отображение пакетов, для которых имеются обновления: #yum l i s t updates
Комментарий Ту же самую информацию можно получить посредством запросов RPM, но при помощи yum это делается чуть удобнее.
См. также yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/).
2.18. Сопровождение yum Проблема Вы хотите избавиться от скопления загруженных пакетов в системе или позаботиться о том, чтобы Yum работал со свежими пакетами вместо кэшированных.
Решение Воспользуйтесь параметром clean. Следующая команда удаляет все каптированные пакеты: # yum clean packages
Загрузка обновленных заголовков пакетов: # yum clean headers
Удаление из системы старых, ненужных заголовков: # yum clean oldheaders
Удаление кэшированных пакетов и старых заголовков с сохранением текущих заголовков: # yum clean a l l
Комментарий Локальный кэш пакетов и заголовков рекомендуется периодически обновлять. Это предотвратит появление труднообъяснимых ошибок, а при установке и обновлении будут использоваться обновленные пакеты.
См. также yum(8), yum.conf(5); домашняя страница yum (http://Linux.duke.edu/projects/yum/).
.
Глава 3
Установка и сопровождение программного обеспечения системах на базе Debian 3.1. Введение Дистрибутив Debian известен своей исключительной стабильностью и надежностью, а также замечательной системой управления пакетами/разрешения зависимостей apt Установка новых приложений осуществляется очень просто: # apt-get программа Выборка и установка библиотек, от которых зависит работа приложения, производятся автоматически. Apt — изощренная, интеллектуальная программа, а официальный архив программного обеспечения Debian поддерживает жесткие стандарты качества пакетов. Официальный программный архив Debian содержит более 12 000 программ; это больше, чем у любой другой платформы. Dpkg — аналог RPM для Debian, обладающий дополнительными возможностями; он также выполняет базовую настройку конфигурации. Например, при установке Postfix dpkg запрашивает кое-какую информацию о системе, устанавливает стартовые и конфигурационные файлы и инициализирует программу. Debian существует в трех разных версиях: стабильной, тестовой и нестабильной (также существует четвертая версия для искателей приключений — экспериментальная). Они обозначаются терминами Woody, Sarge и Sid. Версия Woody чрезвычайно консервативна. Пакеты допускаются в версию Woody только после обширной проверки зависимостей и исправления всех дефектов безопасности. Версии Sarge и Sid содержат новые пакеты, не прошедшие столь подробного тестирования. «Заплатки» безопасности быстро выпускаются для Woody и весьма нерегулярно — для Sarge и Sid. Какую версию использовать? Наиболее очевидный выбор — стабильная версия (Woody), надежная, как скала. Тем не менее за надежность приходится расплачиваться: программы в Woody на месяцы, а иногда и на годы отстают от даты официального выпуска. Woody идеально подходит для серверов. Для настольных систем и рабочих станций более актуальны тестовая версия (Sarge) и нестабильная версия (Sid). И несмотря на устрашающие названия («тестовая», «нестабильная»), они работают вполне нормально.
50
Глава 3. Установка и сопровождение в системах на базе Debian
Кодовые обозначения выглядят симпатично, но не стоит использовать их в конфигурационных файлах. Нестабильной версии всегда будет соответствовать обозначение Sid, но Woody и Sarge не всегда будут связываться со стабильной и тестовой версиями — когда-нибудь текущая тестовая версия Sarge будет повышена до статуса стабильной, а текущая версия Woody уйдет на покой. При грамотном сопровождении система Debian постоянно обновляется без переустановки, поэтому не стоит нарушать ее работу использованием кодовых обозначений, которые со временем изменятся. Далее перечислены кодовые названия версий. Все они позаимствованы из фильма «История игрушек»: О Buzz — Базз Световой Год, космонавт (1.1); О Rex — тираннозавр Рекс (1.2); О Во - Б о Пип (1.3.x); О Hamm — Хэм, свинья-копилка (2.0); О Slink — собака Слинки (2.1); А теперь версии 3.x: О Woody — ковбой (стабильная версия); О Sarge — командир армии зеленых солдатиков (тестовая версия); О Sid — испорченный мальчишка, ломающий игрушки (нестабильная версия).
3.2. Поиск программ для Debian Проблема Вам понадобились программы для системы Debian. В Сети можно найти многие гигабайты программного обеспечения — но где найти программы, упакованные для Debian? И как выбрать архив?
Решение Пакеты Debian устанавливаются из официальных архивов пакетов Debian, неофициальных архивов и с дисков CD-ROM. Источники указываются в файле /etc/apt/sources.list, после чего система управления пакетами Debian используется для установки пакетов из источников. Списки адресов сайтов для загрузки программ: О официальное зеркало Debian — http://www.debian.org/mirror/; О неофициальные архивы APT — http://www.apt-get.org. Список поставщиков дисков CD-ROM по всему миру: О http://www.debian.org/CD/vendors/; Для поиска отдельных пакетов можно воспользоваться страницей поиска Debian: О http://www.debian.org/distrib/packages/.
3.3. Установка пакетов Debian с диска CD-ROM
51
Следующим шагом должно стать редактирование файла/etc/apt/sources.list и занесение в него выбранных источников.
Комментарий При наличии нескольких источников apt-get всегда использует самую новую версию пакета. Список начинается с наиболее предпочтительных источников, поскольку apt-get обрабатывает список от начала к концу. Редактирование файла sources.list — абсолютно законный, простой способ управления установкой программ. Занесите в файл все записи, которые вы когдалибо планируете использовать, и закомментируйте строки, не задействованные в конкретной установке. В список sources.List рекомендуется включить официальные зеркала Debian, чтобы снять нагрузку с серверов Debian.org. Полный список официальных зеркал находится по адресу http://www.debian.org/mirror/. ВНИМАНИЕ Заплатки безопасности распространяются только с адреса http://www.debian.org/security/ и не копируются на зеркалах.
См. также sources.list(5); официальный список зеркал Debian (http://www.debian.org/mirror/); страница поиска пакетов Debian (http://www.debian.org/distrib/packages).
3.3. Установка пакетов Debian с диска CD-ROM Требуется установить пакеты с компакт-диска. Процесс, описанный в предыдущем разделе, предполагает, что программы загружаются из архива. Как включить ссылку на CD-ROM в файл sources.list?
Решение Измените файл /etc/apt/sources.list командой apt-cdrom; это единственный способ включения архивов на CD-ROM в sources.list. Диск должен находиться в дисководе, но монтировать его не обязательно. Затем введите команду: # apt-cdrom add Using CD-ROM mount point /cdrom/ Unmounting CD-ROM Please insert a Disc in the drive and press enter Mounting CD-ROM Identifying.. [OeabcO3dlO414e59dfal622326e2Oda7-2] Scanning Disc for index files.. Found 1 package indexes and 0 source indexes. This Disc is called: 'Libranet GNU/Linux 2.8.1 CD2' Reading Package Indexes...Done
52
Глава 3. Установка и сопровождение в системах на базе Debian
Wrote 1271 records. Writing new source l i s t Source List entries for this Disc are: deb cdrom:[Libranet GNU/Linux 2.8.1 CD2]/ archive/ Repeat this process for the rest of the CDs in your set.
Используйте ключ -d, чтобы добавить данные компакт-диска из другого дисковода: # apt-cdrom -d /cdroml add Идентификация диска: $ apt-cdrom ident Using CD-ROM mount point /cdrom/ Mounting CD-ROM Identifying.. [Oeabc03dl0414e59dfal622326e20da7-2] 1 Stored Label: 'Libranet GNU/Linux 2.8.1 CD2 $
Комментарий apt-get всегда выбирает из всех доступных источников новейшие версии устанавливаемых пакетов. Мир Linux быстро развивается, поэтому самая свежая информация всегда находится в Интернете. Чтобы выполнить принудительную установку программы с компакт-диска, закомментируйте все остальные строки в файле sources.list. ПРИМЕЧАНИЕ Не забывайте выполнять команду apt-get update при каждом изменении файла sources.list.
См. также apt-cdrom(8), apt-get(8); Debian on CD, архивы ISO (http://www.debian.org/CD/http-ftp/).
3.4. Установка пакетов в системе на базе Debian Проблема Все архивы программного обеспечения, компакт-диски и т. д. не принесут никакой пользы, если вы не умеете устанавливать программы. Итак, вы хотите знать, как установить новый пакет в Debian.
Решение Воспользуйтесь командой apt-get install: # apt-get install tuxkart
Установка пакета с перезаписью файлов: # apt-get install •-reinstall tuxkart
3.5. Удаление пакетов из системы Debian
53
Чтобы установить сразу несколько программ, перечислите их, разделяя пробелами: # apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga Загрузка программ без установки или распаковки: # apt-get -d install tuxkart Чтобы протестировать команду перед выполнением, присоедините к строке ключ —dry-run: # apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga --dry-run
Комментарий Для определения имен пакетов используйте страницу поиска Debian по адресу http://www.debian.org/distrib/packages/. Имена пакетов Debian часто отличаются от своих аналогов из RPM. Например, программа CyrusSASL оформляется в пакет sasl-2.x.rpm, а в Debian она разбивается на несколько пакетов с именами libsasl-*. Не забудьте выполнить команду apt-get update после изменения/etc/apt/sources. List и периодически запускайте ее, чтобы получать обновленную информацию из архивов пакетов. apt-get загружает и устанавливает (а при необходимости и удаляет) все пакеты, необходимые для разрешения всех зависимостей.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).
3.5. Удаление пакетов из системы Debian Проблема Требуется удалить пакет или несколько пакетов из системы Debian.
Решение Воспользуйтесь командой apt-get remove: # apt-get remove tuxpaint Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: tuxkart 0 upgraded. 0 newly installed. 1 to remove and 79 not updated. Need to get OB of archives. After unpacking 188 kB disk space will be freed. Do you want to continue? [Y/n] у (Reading database ... 141283 files and directories currently installed.) Removing tuxkart...
54
Глава 3. Установка и сопровождение в системах на базе Debian
Предварительное тестирование команды remove: # apt-get remove tuxpaint --dry-run Удаление всех следов существования пакета, включая конфигурационные файлы: # apt-get --purge remove tuxpaint
Чтобы удалить сразу несколько программ, перечислите их, разделяя пробелами: # apt-get remove tuxkart gltron frozen-bubble tuxracer nethack gaiaga
См. также Apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).
3.6. Установка программ в Debian по исходным текстам Проблема Требуется откомпилировать программу в системе (вместо установки двоичных файлов Debian). Возможно, вы хотите отредактировать код программы или запустить пакет из тестовой или нестабильной версии в стабильной (перекомпиляция обеспечивает построение правильных зависимостей).
Решение Воспользуйтесь командой apt-get source и содействием dpkg. Для начала загрузите заголовки и библиотеки, от которых зависит устанавливаемая программа, в каталог, в котором будет строиться пакет: # cd /usr/src # apt-get build-dep tuxkart
Загрузка и сборка пакета: # apt-get -b source tuxkart Установка пакета: # dpkg -1 tuxkart.deb
Комментарий Построение пакетов .deb по исходным текстам чаще всего выполняется с целью использования пакетов из тестовой или нестабильной версии в стабильной. Перекомпиляция настраивает зависимости для стабильной версии. Если потребуется установить программу, отсутствующую в архивах Debian, постройте .deb при помощи Checklnstall — утилиты, создающей пакеты RPM, .deb и Slackware (см. раздел 4.5).
См. также apt-get(8), dpkg-source(l); локальная документация (/usr/share/doc/Debian/apt-howto); раздел 4.5.
3.8. Обновление системы Debian
55
3.7. Обновление пакетов в Debian Проблвмэ Требуется обновить пакет в системе Debian, потому что новая версия обладает расширенными возможностями или в ней исправлены ошибки.
Решение Воспользуйтесь командой apt-get install: # apt-get install gltron Reading Package Lists... Done Building Dependency Tree... Done The following packages will be upgraded: gltron 1 upgraded, 0 newly installed, 0 to remove and 78 not upgraded. Need to get 89.5kB of archives. After unpacking 266kB of additional disk space w i l l be used. Get:l ftp://ftp.debian.org sid/main gltron 3.53 [89.5kB] Fetched 89.5kB in 5s (16.8kB/s) Preconfiguring packages... (Reading database... 141286 f i l e s and directories currently installed.) Preparing to replace adduser 3.52 (using .../archives/adduser_3.53_all.deb)... Unpacking replacement g l t r o n . . . Setting up adduser (3.53)... # О б н о в л е н и е н е с к о л ь к и х пакетов: # apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga
Комментарий Команды обновления отдельных пакетов не существует. Команда apt-get install всегда устанавливает последнюю версию пакета.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).
3.8. Обновление системы Debian Проблема Требуется обновить все пакеты в системе и заменить их новейшими версиями.
Решение Убедитесь в том, что файл /etc/apt/sourcs.list содержит ссылки на нужные источники, а затем выполните команду apt-get upgrade.
56
Глава 3. Установка и сопровождение в системах на базе Debian
Всегда начинайте с обновления списков пакетов: # apt-get update
Следующая команда обновляет все установленные пакеты, но не удаляет пакеты для разрешения зависимостей: # apt-get -u upgrade
Обновление всех установленных пакетов с удалением или установкой пакетов по мере необходимости для разрешения всех зависимостей: # apt-get -u dist-upgrade
Флаг -и позволяет заранее просмотреть список всех изменений. Обновление может занять несколько часов, в зависимости от скорости подключения к Интернету и количества загружаемых пакетов.
Комментарий Чтобы флаг -и применялся по умолчанию, отредактируйте (или создайте) файл /etc/apt/apt.conf. // Всегда перечислять обновляемые пакеты // и запрашивать подтверждение у пользователя APT::Get::Show-Upgraded "true": Перед каждым выполнением команды apt_get dist_upgrade сначала выполните команду apt-get upgrade, чтобы снизить вероятность ошибок при выполнении distupgrade.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).
3.9. Установка обновленной версии Debian Проблема Требуется перейти на более новую версию Debian (например, с Woody на Sarge).
Решение Прежде всего отредактируйте файл /etc/apt/sources.list, чтобы в нем содержались только записи Sarge. Затем выполните следующие команды: # apt-get update # apt-get -u upgrade # apt-get -u dist-upgrade Флаг -и позволяет сначала просмотреть список изменений. В зависимости от скорости подключения к Интернету и количества необходимых пакетов процедура может занять несколько часов.
3.10. Создание смешанной системы Debian
57
Комментарий В какой-то момент Sarge повышается до статуса стабильной версии, a Woody «уходит на покой». Когда это произойдет, обновите свою систему так, как описано в настоящем разделе.
См. также apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).
3.10. Создание смешанной системы Debian Проблема Требуется установить базовую систему в стабильной версии, а также некоторые программы из тестовой версии. Другими словами, вы хотите иметь абсолютно надежную базовую систему, но в некоторых программах вам необходимы дополнительные возможности, присутствующие только в более новых версиях.
Решение Отредактируйте файл /etc/apt/sources.List так, чтобы в нем содержались ссылки на источники как для стабильной, так и тестовой версий (за информацией о файле sources.list обращайтесь к разделу 3.2. Затем отредактируйте /etc/apt/apt.conf и задайте версию по умолчанию (в нашем примере это стабильная версия). Затем при установке или обновлении пакетов нужная версия выбирается при помощи флага -t. Отредактированный (или созданный) файл /etc/apt/apt.conf должен выглядеть примерно так: // Версия системы по умолчанию. // Допустимые значения: woody, sarge, sid // (или stable, testing, unstable) APT::Default-Release "stable":
Далее производится обновление списков пакетов: # apt-get update
Сейчас по умолчанию используется стабильная версия, поэтому указывать ее при установке пакетов не обязательно. Следующая команда устанавливает Tuxkart из стабильной версии: # apt-get install tuxkart Для установки пакета из тестовой версии (Sarge) воспользуйтесь ключом -t: # apt-get -t testing install tuxkart
Чтобы гарантированно получить конкретную версию, укажите номер пакета: # apt-get install tuxkart=0.2.0-3
58
Глава 3. Установка и сопровождение в системах на базе Debian
Комментарий Сопровождение смешанной системы требует осторожности, особенно если в качестве базовой версии используется Woody. По мере «старения» Woody могут возникнуть проблемы двоичной совместимости с Sarge/Sid. Различия между ключевыми системными файлами (такими как libc и дсс) могут стать настолько серьезными, что пакеты Sarge/Sid не будут устанавливаться в Woody. Если это произойдет, попробуйте построить пакеты по исходным текстам (см. раздел 3.6).
См. также apt.conf(5), sources.List(5); страница поиска пакетов Debian (http://www.debian.org/ distrib/packages).
3.11. Поиск программ, установленных в системе Debian Проблема Требуется узнать, какие пакеты установлены в системе, к какому пакету относятся те или иные файлы и что находится в отдельных пакетах.
Решение Воспользуйтесь средствами обработки запросов dp kg. Следующая команда выводит список всех установленных пакетов и направляет его в файл: $ dpkg -1 | tee dpkgiist
Поиск всех пакетов, удовлетворяющих критерию поиска, и вывод информации об их состоянии: $ dpkg - I '*gnome*'
Desired=Unknown/Install/Remove/Purge/Но Id | Status^tot/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status.Err: uppercase=bad) ||/ Name Version Description pn gnome <none> (no description available) un gnome-about <none> (no description available) ii gnome-applets 2.4.2-1 Various applets f o r GNOME 2 panel re
gnome-bin
1.4.2-18
Miscellaneous binaries used by GNOME
Поиск установленных пакетов, удовлетворяющих критерию поиска: $ dpkg -1 | grep gnome
Вывод списка файлов, входящих в пакет: $ dpkg -L gnome-applets /usr/share /usr/share/lintian
3.11. Поиск программ, установленных в системе Debian
59
/usr/share/lintian/overrides /usr/share/lintian/overrides/gnome-applets ... Следующая команда определяет, к какому пакету относится файл: $ dpkg -S boing.wav
tuxkart-data: /usr/share/games/tuxkart/wavs/boing.wav Вывод полной информации о пакете: $ dpkg -s kpoker
Package: kpoker Status: i n s t a l l ok installed P r i o r i t y : optional Section: games Installed-Size: 428 Maintainer: Daniel Schepler <schepler@debian.org> Source: kdegames Version: 4:3.1.5-1 ....
Комментарий Таблица, выводимая командой dpkg -I, выглядит довольно загадочно, поэтому я приведу расшифровку. $ dpkg -I gnome*
Desi red=Unknown/Instal1/Remove/Purge/Hoi d | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed j / Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description pn un ii re
gnome <none> (no description available) gnome-about <none> (no description available) gnome-applets 2.4.2-1 Various applets f o r GNOME 2 panel gnome-bin 1.4.2-18 Miscellaneous binaries used by GNOME
В строке pn gnome поднимитесь от буквы р наверх по «стрелке». Она приведет вас к строке Desired=Unknown/InstaU/Remove/Purge/Hold с расшифровками первого символа (Purge в данном случае). От следующего столбца, п, стрелка ведет к строке Status. По ней можно определить, что символ п означает Not/Installed. В третьем столбце отображается код ошибки. В нашем случае он пуст (и хорошо). Как указано в конце строки, любые символы верхнего регистра в столбцах Status и Err ни к чему хорошему не приведут. Получаем: пакет gnome когда-то был установлен в системе, но потом он был удален. Код un означает, что пакет никогда не устанавливался. Код ii означает, что пакет установлен. Код гс означает, что пакет был установлен, а затем удален, но после него остались конфигурационные файлы. Состав этих файлов определяется легко: $ dpkg -L gnome-bin
/etc/1ogcheck/ignore.d.server/gnome-bi n /etc/logcheck/ignore.d.workstation/gnome-bin
60
Глава 3. Установка и сопровождение в системах на базе Debian
См. также dpkg(8).
3.12. Операции с кэшем пакетов Debian Проблема Требуется обеспечить актуальность кэша пакетов и списков пакетов, чтобы программа apt работала правильно, без возникновения ложных проблем с зависимостями.
Решение Воспользуйтесь программами apt и dpkg. Не забывайте выполнять команду apt-get update после модификации файла /etc/apt/sources.list, а также регулярно выполняйте ее, чтобы список пакетов оставался актуальным. Следующая команда выводит список загруженных, но не установленных пакетов: $ dpkg ••yet-to-unpack
Проверка нарушенных зависимостей: $ apt-get check Удаление каптированных пакетов, которые стали ненужными: $ apt-cache autoclean Удаление всех кэшированных пакетов: $ apt-cache clean Вывод списка частично установленных пакетов: $ dpkg --audit
Если вызов dpkg -audit возвращает какие-либо результаты, как в следующем случае: $ dpkg •-audit
vpw (no information available) для начала убедитесь в том, что возвращаемый пакет существует: $ dpkg
- I vpw
Package 'vpw' is not installed and no info is available Если пакет существует, либо завершите установку, либо удалите ее. Если пакет не установлен, поищите соответствующую запись в /var/lib/dpkg/available и /var/ Lib/dpkg/status и удалите ее.
Комментарий Кэш пакетов запросто может занимать десятки, если не сотни мегабайт. Загляните в /var/cache/apt/archives и проверьте сами. Чтобы сэкономить место на диске, создайте локальный кэш пакетов в своей сети (см. раздел 3.14).
3.13.
Разрешение конфликтов зависимостей в Debian
61
См. также dpkg(8), apt_cache(8), apt-get(8); локальная документация (/usr/share/doc/Debian/ apt-howto); The Debian Reference Manual (http://qref.sourceforge.net/).
3.13. Разрешение конфликтов зависимостей в Debian Проблема
•
Программа не устанавливается из-за проблем с зависимостями, или команда apt-get dist-upgrade оставляет пакеты, которые нужно удалить.
Решение Существует несколько команд, которые могут пригодиться для решения этой задачи; в этом разделе они перечисляются в том порядке, в котором их стоит попробовать. Допустим, проблемы возникли с пакетом tibpam-modules, который не желает обновляться: # apt-get install libpam-modules The following packages have unmet dependencies: libpam-modules: Depends: Iibdb3 (>=3.2.9-19.1) but 3.2.9-19 is to be installed E: Broken packages Если вы работаете в смешанной системе, для начала попробуйте указать версию: # apt-get i n s t a l l -t stable libpam-modules
Если это не помогает или система не является смешанной, попробуйте воспользоваться системой разрешения конфликтов Debian: # apt-get -f install Затем выполните команду: # dpkg --configure -a
И снова повторите команду: # apt-get -f install
Если будет получен следующий ответ, значит, попытка завершилась неудачей: Reading Package Lists... Done Building Dependency Tree... Done 0 upgraded, 0 newly installed. 0 to remove and 1 not upgraded. Теперь проверьте, что произойдет при удалении существующего пакета libpammodules: # apt-get remove --dry-run libpam-modules Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED:
62
Глава 3. Установка и сопровождение в системах на базе Debian
adduser adminmenu apache at base-config courier-imap courier-imap-ssl courier-pop courier-pop-ssl cron cupsys cupsys-driver-gimpprint diet-elements dict-foldoc dictgcide diet-jargon dict-vera dict-wn dictd gdm2... .... WARNING: The following essential packages w i l l be removed This should NOT be done unless you know exactly what you are doing! login libpam-modules (due to login)
В данном случае исправление конфликтов зависимостей потребует едва ли не полной перестройки системы. Чаще проблемы ограничиваются несколькими пакетами. В этом случае начинайте удалять наименее важные из них, пока конфликты зависимостей не будут разрешены, а затем переустановите все пакеты, которые вам нужны. Если apt-get -u dist-upgrage отображает какие-либо задержанные (held) пакеты, от них лучше избавиться. Пакеты удерживаются из-за конфликтов зависимостей, которые не удается разрешить apt. Попробуйте воспользоваться следующей командой для поиска и исправления конфликтов: # apt-get -о Debug::pkgProblemResolver=yes dist-upgrade
Если исправить конфликты не удается, команда завершается с сообщением О upgraded. О newly i n s t a l l e d , 0 t o remove and 6 not upgraded.
Удаляйте held-пакеты один за одним, каждый раз запуская dist-upgrade, пока не останется ни одного задержанного пакета. Затем установите заново все необходимые пакеты. Не забудьте использовать ключ —dry-run, чтобы заранее знать обо всех последствиях: # apt-get remove --dry-run libsdl-peri
Комментарий В «монолитных» системах подобные конфликты версий встречаются редко. Пользователи смешанных систем сталкиваются с ними чаще. Чтобы предотвратить их, будьте чрезвычайно осмотрительны при выборе устанавливаемых программ — при первой установке Debian потратьте немного времени и выберите каждый необходимый пакет.
См. также dpkg(8), apt-get(8); Debian User's List с архивами (http://lists.debian.org/debian-user/).
3.14. Создание локального архива Debian Проблема Требуется создать в локальной сети хранилище пакетов для общего пользователя. Локальный архив особенно полезен в том случае, если пользователи сети совместно используют низкоскоростное подключение к Интернету. Вместо того чтобы загружать файлы из Интернет-архивов, рабочие станции Debian загружают их из локального архива.
3.15.
Выбор пакетных зеркал для apt-proxy.conf
63
Решение Воспользуйтесь программой apt-proxy: # apt-get proxy
Apt-proxy запускается автоматически после установки. Теперь отредактируйте секцию add_backend/debian/ файла /etc/apt-proxy/aptproxy.conf так, чтобы она содержала ссылки на географически близкие зеркала (список зеркал с пакетами находится по адресу http://www.debian.org/mirror/list). Затем отредактируйте файл /etc/apt/sources.list на клиентских компьютерах так, чтобы он содержал ссылку на сервер apt-proxy. По умолчанию используется порт 9999: deb http://ip-or-hostname:9999/main stable main contrib non-free deb http://ip-or-hostname:9999/non-US stable/non-US main contrib non-free deb http://ip-or-hostname:9999/security stable/updates main contrib non-free
Запустите apt-get update на клиентских машинах, и локальный архив начнет работать. Каждый раз, когда клиентский компьютер в локальной сети устанавливает программу, эта программа будет кэшироваться на сервере apt-proxy. Последующие запросы того же пакета будут обслуживаться из локального кэша.
Комментарий Большинству параметров в файле/etc/apt-proxy/apt-proxy.conf, кроме источников пакетов, можно оставить значения по умолчанию. Исключение составляет частота «обновлений», определяющая периодичность загрузки списка пакетов. По умолчанию соответствующая секция выглядит так: # Максимальная частота обновлений (в минутах) # Высокие значения снижают нагрузку. BACKENDJREO240 Я обычно устанавливаю значение этого параметра равным 1440; ежедневной проверки вполне достаточно. Действительно важные события происходят не так часто. Проверку следует производить хотя бы раз в день главным образом для своевременной установки обновлений безопасности.
См. также apt-proxy(8), apt-proxy.conf(5); официальный список зеркал Debian (http://www. debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).
3.15. Выбор пакетных зеркал для apt-proxy.conf Проблема Пакетные зеркала, содержащиеся по умолчанию в файле apt-proxy.conf, разбросаны по всему земному шару. Как выбрать те из них, которые вы хотите использовать? В идеальном варианте хотелось бы использовать зеркальные сайты, находящиеся поближе к вашему компьютеру.
64
Глава 3. Установка и сопровождение в системах на базе Debian
Решение По умолчанию записи /etc/apt-proxy.apt-proxy.conf выглядят так: add_backend /debian/ $APT_PROXY_CACHE/debian/ http://ftp.us.debi an.org/debian/ http://ftp.de.debian.org/debian/ http://ftp.uk.debian.org/debian/ +ftp.us.debian.org::debian/
\ \ \ \ \
На сайте http://www.debian.org/mirror/list приведен текущий списокзеркал Debian. Например, вот некоторые германские зеркала в mirror/list: DE Germany
ftp.de.debian.org /debian/ /debian/ ftp2.de.debian.org /debian/ /debian/ ftp.tu-clausthal.de /pub/1inux/debian/ /pub/linux/debian/ debian.uni-essen.de /debian/ /debian/ Замените стандартные записи apt-proxy.conf своими, предваряя каждую запись префиксом http://: add_backend /debian/ \ $APT_PROXY_CACHE/debian/ \ http://ftp.de.debi an.org/debi an/ \ http://ftp2.de.debi an.org/debi an/ \ http://ftp.tu-clausthal.de/pub/linux/debian/ \ Файлы /etc/apt/sources.list на клиентских компьютерах изменять не нужно.
Комментарий Команды ping и traceroute помогут определить, какие зеркала обладают минимальным временем отклика. Дело в том, что географическая близость еще не гарантирует быстрого отклика. Указание трех источников обеспечивает необходимую избыточность, apt-proxy опрашивает их по порядку: если первый источник не отвечает, опрашивается второй и т. д.
См. также apt-proxy(8), apt-proxy.conf(5), apt-proxy-import(8); официальный списокзеркал Debian (http://www.debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).
3.16. Включение существующего кэша пакетов в apt-proxy.conf Проблема На сервере apt-proxy уже существует довольно большой кэш пакетов. Вы хотели бы, чтобы профамма apt-proxy использовала его вместо того, чтобы загружать все пакеты заново.
3.16. Включение существующего кэша пакетов в apt-proxy.conf
65
Решение Сначала запустите apt-get update по крайней мере на одном клиентском компьютере, чтобы инициализировать кэш. Затем на сервере выполните команду # apt-proxy-import -d /var/cache/apt/archives
См. также apt-proxy(8), apt-proxy.conf(5), apt-proxy-import(8); официальный списокзеркал Debian (http://www.debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).
'
'-
.
•
-..••
• '•
-Ь
»•
• ,*V
'..-•'
Глава 4
Установка программ по исходным текстам
й
I iШ
L
4.1. Введение Несмотря на многочисленные системы управления пакетами и разрешения зависимостей, в некоторых случаях вариант с построением программы по исходным текстам оказывается предпочтительным. Например, нужная вам программа может не существовать в виде пакета, или вы хотите изменить состав ее встроенных функций, или оптимизировать ее для архитектуры своего процессора. Многие опытные администраторы рекомендуют строить программы, критические с точки зрения безопасности (например, ssh и все серверы), по исходным текстам. При построении программы по исходным текстам обязательно ознакомьтесь со всеми инструкциями. Хотя процедура configure-make-install стала относительно стандартной, существует множество исключений, зависящих от прихоти автора программы. Нередко в процессе построения необходимо указывать различные параметры конфигурации, и информацию о них можно найти только в документации. Если вы предпочитаете использовать пакеты, в вашем распоряжении все программы для самостоятельного построения пакетов RPM и .deb. Впрочем, на освоение этих программ потребуются немалые усилия. Существует третий вариант: Checklnstall — превосходная утилита, упрощающая построение пакетов RPM, Debian или Slackware по исходным текстам.
4.2. Подготовка системы к компиляции программ по исходным текстам Проблема Известно, что для компиляции программ из исходным текстов потребуется компилятор... и наверное, еще какие-нибудь утилиты. Но какие именно?
4.3. Построение списка добавленных файлов для упрощения удаления программ
67
Решение Необходимые программы делятся на две категории: О основные средства разработки, общие для всех систем Linux; О конкретные библиотеки или утилиты для компилируемых программ. Общие средства разработки Linux: О GNU coreutils — большой набор важнейших системных утилит: shellutils, fileutils и textutils. Полный список можно найти по адресу http://www.gnu.org/ software/coreutils/ (также можно воспользоваться командой info coreutils); О GNU binutils — утилиты для работы с двоичными файлами (http://www.gnu.org/ software/binutils); О gcc — коллекция компиляторов GNU, в том числе для языков С, C++, Objective-C, Fortran, Java и Ada, а также библиотеки для этих языков; О GNU tar — утилита для создания архивов исходных текстов (как правило, имена файлов заканчиваются суффиксом.tar); О gunzip — утилита сжатия, часто используемая в сочетании с tar. Имена таких файлов заканчиваются суффиксом tar.gz; О bunzip2 — формат сжатия для упаковки и распаковки архивов; имена файлов заканчиваются суффиксом .bz2; О make — утилита для чтения параметров конфигурации и построения файлов программ. В документации к приложению должна содержаться вся информация, необходимая для его успешной сборки.
Комментарии Большинство дистрибутивов Linux включает установку Core Development Tools или что-нибудь в этом роде, поэтому вам не придется отлавливать программы и устанавливать их по отдельности. Требования, специфические для конкретной программы, перечисляются в документации. Поищите в архиве с исходными текстами файлы README, INSTALL и другую документацию. Прочитайте все от начала и до конца. При запуске конфигурационный сценарий проверяет наличие в системе всех обязательных элементов. Если какой-либо из этих элементов отсутствует, сценарий завершается с кодом ошибки и сообщает, что необходимо сделать.
4.3. Построение списка добавленных файлов для упрощения удаления программ Проблема Требуется узнать, какие файлы устанавливаются в системе при построении программы по исходным текстам. Это позволит вам найти и удалить все перечисленные
68
Глава 4. Установка программ по исходным текстам
файлы, когда надобность в них отпадет. Некоторые авторы программ предусмотрительно включают режим make uninstalL для «чистого» удаления программы, но многие этого не делают.
Решение Стандартными средствами Linux сгенерируйте список всех файлов в системе перед установкой. Затем сгенерируйте аналогичный список после установки и сравните два списка командой diff. В результате вы получите список установленных файлов. В следующем примере используется программа JOE ( Joe's Own Editor): A
# find / | grep -v -e / p r o c / -e Vtmp/ -e ~/dev/ > j o e > p r e i n s t a l l . l i s t
Откомпилируйте и установите новую программу, затем сгенерируйте список файлов после установки: # find / | grep -v -e */proc/ -e */tmp/ -e */dev/ > joe>postinstall.list
Затем создайте список установленных файлов, сравнив два списка командой diff: $ diff joe-preinstall.list joe-postinstall.list > joe-installed.list
Комментарий Совместное использование find и grep позволяет исключить каталоги, не входящие в конечный список. Ключ grep -v включает подробный вывод. Параметр -еЛ означает «исключить следующий каталог». Мы исключаем каталоги /ргос и /tmp, потому что они содержат временные данные и постоянно меняются. Файлы в каталоге /dev находятся под управлением системы, поэтому их тоже можно исключить. Исключение каталогов также является важной мерой безопасности — при ручном удалении программ по списку diff содержимое каталогов /ргос, /tmp и /dev ни в коем случае не должно изменяться.
См. также grep(l),find(l),diff(l).
4.4. Установка программ по исходным текстам Проблема Требуется построить программу по исходным текстам, но вам трудно разобраться в дебрях tar-архивов, Ьг2-архивов, make-файлов и т. д.
Решение Распакуйте tar-архив. Запустите сценарий configure, затем make и install.
4.4. Установка программ по исходным текстам
69
Начните с каталога, в котором хранятся tar-архивы и каталоги с исходными текстами. В следующем примере используется программа JOE (Joe's Own Editor): # cd /usr/src/downloads # tar zxvf joe-2.9.8.tar.gz # cd joe-2.9.8 #ls # less README # less INFO # ./configure --help # ./configure «options, i f needed> # make # make i n s t a l l | tee joe-makeinstall
Последняя команда сохраняет выходные данные установки в текстовом файле joe-makeinstall. Некоторые программы архивируются утилитой bunzip2 вместо более традиционной утилиты gzip. Распаковка архивов .bz2 осуществляется так: # tar jxvf joe-2.9.8.tar.bz2
Удаление программ, построенных по исходным текстам, производится командой # make uninstall
Такой способ работает только в том случае, если автор программы включил поддержку make uninstall. Если файлы приходится удалять вручную, сохраните вывод make install в текстовом файле. Другой способ — построение списка установленных файлов (см. раздел 4.3).
Комментарий Описанная в этом разделе процедура считается стандартным способом удаления программ, построенных по исходным текстам. Тем не менее не все авторы программ следуют общепринятым правилам. Обязательно просмотрите всю документацию к программе. Прежде всего обратите внимание на параметры конфигурации. Некоторые программы (такие, как Apache) поддерживают десятки параметров компиляции. Для обеспечения безопасности откомпилируйте поддержку только тех возможностей, которые будут реально использоваться. Это особенно важно для серверов, доступ к которым осуществляется из непроверенных сетей (скажем, почтовых и веб-серверов). Аргументы в пользу компиляции программ по исходным текстам: О вы можете включить поддержку тех возможностей, которые вам необходимы; О оптимизация программ для конкретной архитектуры; О полный контроль над ходом установки. Впрочем, есть и недостатки: О возможные проблемы с обновлением и удалением; О до «кошмара зависимостей» рукой подать; О на компиляцию большой программы может потребоваться несколько часов.
70
Глава 4. Установка программ по исходным текстам
Некоторые серверы должны строиться по исходным текстам. Например, вебсервер Apache строится по исходным текстам для обеспечения полной настройки и оптимизации. Что касается настольных систем, они слишком сложны и громоздки для самостоятельной компиляции. В таких случаях проще воспользоваться пакетными дистрибутивами Linux.
См. также info tar, make(l), bzip2(l).
4.5. Создание пакетов по исходным текстам с применением Checklnstall Проблема Требуется построить пакет Slackware, Red Hat или Debian по исходным текстам, потому что приложение, которое вы хотите установить, не существует в виде нужного пакета. Вы почитали кое-какую документацию по построению пакетов, и эта задача выглядит очень сложной. Нет ли более простого пути?
Решение Воспользуйтесь Checklnstall. Выполните следующие команды (в данном примере, как и в предыдущем, используется программа JOE в системе Debian): # mkdir /doc-pak # tar zxvf joe-2.9.8.tar.gz # cd joe-2.9.8 # ./configure jf make # check-install -D
Checklnstall заменяет make install, поэтому команда должна выполняться из корневого каталога дерева исходных текстов. Выполните инструкции, отображаемые в процессе работы. Программа строит и устанавливает .deb, в чем нетрудно убедиться: $ dpkg -1 | grep joe
ii
joe
2.9.801
joe's own editor, my fave
Все, программа установлена и готова к работе. Копия пакета остается в каталоге исходных текстов. Следующая команда строит пакет Slackware: # checkinstall -S Построение пакета RPM: # checkinstall -R
4.5. Создание пакетов по исходным текстам с применением Checklnstall
71
Комментарий В каталоге doc-pak программа Checklnstall размещает файлы README и прочую документацию программы. Если не создать каталог doc-pak, Checklnstall спросит, хотите ли вы создать каталог документации по умолчанию. Если ответить отрицательно, пакет останется без документации. Checklnstall использует «родную» систему управления пакетами: RPM в Red Hat, installpkg в Slackware, .apt в Debian. Чтобы удалить пакет Checklnstall, воспользуйтесь программой управления пакетами своей системы. Checklnstall поддерживает любые сценарии установки. Пример: # # # #
checkinstall checkinstall checkinstall checkinstall
-D make installpackages -R make modules_insta11 -S i n s t a l l . s h -D setup
He забудьте изучить файл README устанавливаемой программы, а также прочую прилагаемую документацию. Не все пакеты с исходными текстами следуют традиционной процедуре configure-make-make install. В отдельных случаях используются другие сценарии установки, как в приведенном выше примере. Checklnstall еще не позволяет создать пакет без его автоматической установки. Вероятно, эта возможность появится в будущих версиях.
См также Домашняя страница Checklnstall (http://asic-linux.com.mx/~izto/checkinstall/news.php)
Глава 5 Идентификация оборудования
5.1. Введение В Linux имеются хорошие утилиты для получения подробной информации о внутренних устройствах компьютера. Даже если сесть за совершенно незнакомый компьютер, через считанные минуты вы получите полный список всех его компонентов. Такие утилиты не только избавляют вас от необходимости снимать кожух и копаться во «внутренностях» компьютера, но и помогают найти драйверы или узнать, поддерживается ли вообще данное устройство в Linux. Мы живем в дурацком Windows-центрическом мире: чтобы проверить, существуют ли для модема, сетевой или видеокарты драйверы Linux, обычно необходимо знать чипсет, использованный в устройстве. Количество чипсетов не так уж велико, но они делятся на множество торговых марок и моделей. Некоторые фирмы-производители меняют чипсеты, не изменяя номер модели, так что на номер модели рассчитывать не стоит. Зная чипсет, можно найти драйверы.
Списки совместимости Большая часть оборудования PC неплохо поддерживается в Linux, поскольку доблестные программисты продолжают выдавать новые драйверы (порой с минимальной поддержкой со стороны фирм-производителей). Впрочем, к выбору оборудования следует подходить осторожно. Даже если устройство имеет драйверы для Linux, иногда для него не существует удобных вспомогательных программ или не поддерживается полный набор возможностей, доступных для пользователей Windows. Первым и наиболее надежным источником информации станет веб-сайт вашего дистрибутива Linux. На большинстве таких сайтов публикуются списки HCL (Hardware Compatibility Lists). Если для какой-то конкретной разновидности Linux такого списка не существует, возьмите список из другого дистрибутива. Устройство, которое работает в одном дистрибутиве, должно работать во всех. Различаться будут только уровни прямой поддержки. Например, Mandrake и Linspire обеспечивают расширенную поддержку звуковых карт и видеоадаптеров. Другие дистрибутивы могут работать с теми же устройствами, но, возможно, вам придется найти и установить драйверы самостоятельно. Иногда для этого даже приходится компилиро-
5.2 Идентификация оборудования при помощи Ispci
73
вать модули ядра (что не вызывает ни малейших сложностей у настоящих асов Linux — так, мелкое неудобство). Таким образом, начните с источников информации по вашему дистрибутиву. Еще один способ быстро найти информацию по конкретному устройству — провести поиск в Google Groups вида debian linux riva tnt2 Как правило, вы сразу же получаете целый набор полезных ссылок. И наконец, стоит посетить веб-сайт производителя устройства. Иногда такие сайты преподносят приятный сюрприз — на них удается найти информацию no Linux.
Чем плохи двоичные драйверы Некоторые производители оборудования ограничивают поддержку Linux двоичными драйверами. По возможности избегайте их. Двоичные драйверы откомпилированы для конкретной архитектуры и версии ядра. Программу так легко перекомпилировать, чтобы она правильно работала в вашей системе, что лишать такой возможности пользователей попросту глупо. Пакетные системы (такие, как Red Hat, SuSE и Debian) ограждают нас, конечных пользователей, от этих проблем, поскольку производители пакетов делают всю работу за нас; однако и им необходимы исходные тексты. Линус Торвальдс говорит: «...Я разрешаю модули, содержащие только двоичные файлы, но хочу, чтобы люди знали: предполагается, что такие модули работают только в одной версии ядра, для которой они были откомпилированы. Если они работают в других версиях, это не более чем приятная неожиданность».
5.2. Идентификация оборудования при помощи Ispci Проблема Вы оборудуете новую рабочую станцию или устанавливаете Linux на компьютер, работавший под управлением другой ОС. Вам хотелось бы знать, все ли компоненты — видеокарта, модем, Ethernet, звуковая карта — будут работать под Linux. Производители не могут (или не хотят) сказать, работают ли их продукты под Linux. Чтобы узнать, существуют ли для этих устройств драйверы Linux, нужно знать их чипсеты. Возможна и другая ситуация: вы хотите знать, какие компоненты установлены внутри компьютера. Но при этом вам не хочется браться за отвертку, снимать кожух и копаться внутри.
Решение Воспользуйтесьь программой прогр Ispci: # /sbin/lspci -vv
74
Глава 5. Идентификация оборудования
Следующая команда выводит сводку всех устройств, подключенных к шине PCI: $ /sbin/lspci 00:00.0 Host bridge: VIA Technologies. Inc. VT8363/8365 KT133/KM133] (rev 02) 00:01.0 PCI bridge: VIA Technologies. Inc. VT8363/8365 KT133/KM133 AGP] 00:06.0 Ethernet controller: Linksys Network Everywhere Fast Ethernet 10/100 model NC100 (rev 11) Флаги -v или -vv используются для вывода более подробной информации: $ /sbin/lspci -v 0000:01.00.0 VGA compatible controller: 3Dfx Interactive. Inc. Voodoo 3 (rev 01) (progi f 00 [VGA]) Subsystem: 3dfx Interactive. Inc.: Unknown device 1252 Flags: 66MHz. fast devsel, IRQ 10 Memory at d4000000 (32-bit, non-prefetchable) [size=32M]
Если вы ищете драйверы, возьмите выходные данные Lspci (например, VT8363/ 8365 или 3Dfx Interactive, Inc. Voodoo 3 (rev 01)) и проведите по ним поиск в Google.
Комментарий Программа lspci получает часть данных от шины PCI, а затем добавляет к ним дополнительную информацию из внутренней базы данных /usr/share/misc/pci.ids. Даже существует специальная команда для обновления этого файла: # update-pelids
Если к системе подключено устройство, не распознаваемое lspci (скажем, очень старое и экзотическое устройство ISA), вам придется открыть корпус и посмотреть, что это такое. Также можно попробовать запустить dmesg (см. раздел 5.3).
См. также lspci(8).
5.3. Сбор информации об оборудовании программой dmesg Проблема При всех своих достоинствах шина PCI — день вчерашний. Чаще требуется получить список всех устройств в системе, не только устройств PCI: это и устройства USB, и устройства SCSI, конфигурация памяти и даже процессор.
Решение Воспользуйтесь программой dmesg. Программа выводит список всего оборудования, обнаруженного ядром. Чтобы просмотреть весь вывод dmesg, введите команду $ dmesg | less
5.3. Сбор информации об оборудовании программой dmesg
75
Выходные данные dmesg также можно отфильтровать для поиска конкретных устройств. Так, следующая команда выводит список всех устройств PCI: $ dmesg I grep -i usb Вывод списка устройств ISA: $ dmesg isapnp: isapnp: isapnp:
] grep - i isa Scanning f o r PnP c a r d s . . . SB audio device q u i r k - i n c r e a s i n g port range Card 'SupraExpress 56i Voice'
Определение объема физической памяти в системе: $ dmesg | grep -i memory Memory: 256492/262080k a v a i l a b l e (1467k kernel code. 5204 reserved. 516k data. 96k i n i t . OK highmem)
Вывод списка устройств IDE, использующих подсистему эмуляции SCSI в ядре 2.4 и более старых версий: $ dmesg | grep -i scsi Kernel command l i n e : root=/dev/hda6 ro hdb=scsi hdc=scsi ide_setup: hdb=scsi ide_setup: hdc=scsi SCSI subsystem driver Revision: 1.00 hdb: attached ide-scsi driver hdc: attached ide-scsi driver scsio : SCSI host adapter emulation for IDE ATAPI devices
А вот как выглядят «настоящие», не эмулированные устройства SCST: $ dmesg | grep -i scsi SCSI subsystem driver Revision: 1.00 scsiO: Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev. 6.2.8 <Adaptec aic7892 Ultral60 SCSI adapter» aic7892: Ultral60 Wide Channel A, SCSI Id=7. 32/253 SCBs ...Vendor: IBM-PSG Model:DPSS-336950M M Rev: S9HA Attached scsi disk sda at scsiO, channel 0. id 0. lun 0 (scsi0:A:0): 160.000MB/S transfers (80.000MHz DT. offset 63. 16bit) SCSI device sda: 71096640 512-byte hdwr sectors (36401 MB) Partition check: sda: sdal sda2sda3 sda4 < sda5 sda6 > Далее показана информация о камере USB, подключенной к системе, включая ее местонахождение в файловой системе. Обычно информация об устройстве USB занимает десяток строк и более: % dmesg | grep -i usb ... usb.с: r e g i s t e r e d new d r i v e r ibmcam icmcam.c: IBM PC Camera USB camera found (model 2. r e v . 0x030a) usbvideo.c: ibmcam on /dev/videoO: canvas=352x240 videosize=352x240
Вывод информации о последовательных портах: $ dmesg | grep -i tty ttySOO at 0x03f8 (irq = 4) is a 16550A Вывод информации о процессоре (или процессорах): $ dmesg | grep -i cpu Initializing CPU#0 CPU: LI I Cache: 64K (64 bytes/line). D cache 64K (64 bytes/line)
76
Глава 5. Идентификация оборудования
CPU: L2 Cache: 64K (64 bytes/line) Intel machine check reporting enabled on CPU#0. CPU: After generic, caps: 0183f9ff clc7f9ff 00000000 00000000 CPU: Common caps: 0183f9ff clc7f9ff 00000000 00000000 CPU: AMD Duron(tm) Processor stepping 01
Обратите внимание: при поиске возвращаются только те строки, в которых присутствует искомая подстрока. Часто дополнительная информация содержится в соседних строках и находится прямым просмотром файла: Initializing CPU#0 Detected 801.446 MHz processor.
Комментарий Программа dmesg всегда выводит обновленную информацию даже при частой смене оборудования (например, при подключении и отключении устройств USB).
См. также dmesg(8).
5.4. Получение текущей сводки оборудования с использованием /ргос Проблема Требуется отслеживать состояние работающей системы в реальном времени, получать информацию о физической памяти и процессоре, идентифицировать диски и т. д.
Решение Прочитайте данные из виртуальной файловой системы /ргос. Для чтения данных из /ргос следует применять только cat и утилиты, предназначенные специально для этой цели (например, sysctl, Lspci, ps и top). Синтаксис cat остается неизменным: $ cat /proc/файл
Выполняя с/ргос те же операции, что и с обычными файловыми системами, вы сможете легко найти нужную информацию. Информация об оборудовании хранится в каталогах с соответствующими именами: $ Is /ргос bus cmdline cpuinfo devices dma driver filesystems ide kcore kmsg ksyms loadavg meminfo misc modules mounts mtrr partitions pci scsi swaps sys t t y
Вывод информации о процессоре: $ cat /proc/cpuinfo processor : 0 vendor id : AuthenticAMD
5.4. Получение текущей сводки оборудования с использованием /ргос
cpu family model model name stepping cpu MHz
77
6 3 AMD Duron(tm) Processor 1 801 .442
Вывод информации о физической и виртуальной памяти: $ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 262746112 237740032 25006080 0 11575296 150138880 Swap: 534601728 81661952 452939776 MemTotal: 256588 kB MemFree: 24420 kB Вывод информации о жестком диске IDE: $ cat /proc/ide/via VIA BusMastering IDE Configuration Driver Version: 3.37 South Bridge: VIA vt82c686a Revision: ISA 0x22 IDE 0x10 Highest DMA rate: UDMA66 Вывод информации о геометрии диска (как физической, так и логической): $ cat /proc/ide/ideO/hda/geometry physical 39870/16/63 logical 2501/255/63
Идентификация диска: $ cat /proc/ide/ideO/hda/model IBM-DTLA-305220
Вывод информации об устройствах SCSI (обратите внимание: команда не различает устройства, подключенные к шине SCSI, и устройства IDE, использующие подсистему эмуляции SCSI; в данном случае речь идет о дисководах CD-ROM с интерфейсом IDE): $ cat /proc/scsi/scsi Attached devices: Host: scsiO Channel: 00 Id: 00 Lun: 00 Vendor: TOSHIBA Model: DVD-ROM SD-M1202 Rev:1020 Type: CD-ROM ANSI SCSI revision: 02 Host: scsiO Channel: 00 Id: 01 Lun: 00 Vendor: LITE-ON Model: LTR-24102B Rev:5S54 Type: CD-ROM ANSI SCSI revision: 02
Комментарий Как упоминалось выше, для чтения данных из /ргос следует использовать только cat и утилиты, предназначенные специально для этой цели. Программы постраничного вывода типа less или more выводят другие данные, потому что они читают /ргос заново с каждой страницей. Также не рекомендуется использовать текстовый редактор или любую программу с возможностью записи, чтобы не создавать риска повреждения системы.
78
Глава 5. Идентификация оборудования
См. также ргос(5).
5.5. Просмотр разделов в программе fdisk Проблема Требуется просмотреть все разделы на жестком диске или дисках. Возможно, вы хотите знать, как распределено свободное место на диске, хотите «вернуть» старые разделы Windows, задействовать неиспользуемый раздел под виртуальную память или узнать номер /dev для раздела. Программа fdisk также выводит информацию о файловой системе раздела и объеме свободного пространства.
Решение Воспользуйтесь программой fdisk. Вывод информации обо всех разделах на всех жестких дисках: # /sbin/fdisk -1 Disk /dev/hda: 20.5 GB. 2057674520 bytes 255 heads, 63 sectors/track. 2501 cylinders Units - cylinders of 16065 * 512 - 8225280 bytes Device Boot Start End Blocks Id System /dev/hdal * 1 893 7172991 7 HPFS/NTFS /dev/hda2 894 1033 1124550 с W95 FAT32 (LBA) /dev/hda4 1034 2501 11791710 f W95 Exf d (LBA) /dev/hda5 2437 2501 522081 82 Linux swap /dev/hda6 1034 1670 5116639+ 83 Linux /dev/hda7 1671 2436 6152863+ 83 Linux Вывод таблицы разделов для отдельного диска: # /sbin/fdisk -I /dev/hda Disk /dev/hda: 20.5 GB. 20576747520 bytesDisk /dev/hda: 20.5 GB, 20576747520 bytes 255 heads. 63 sectors/track, 2501 cylinders Units - cylinders of 16065 * 512 = 8225280 bytes
Комментарий По выходным данным fdisk также можно узнать, какой тип файловой системы находится на любом разделе. В рассмотренном примере используются два разных типа файловых систем Windows (HPFS/NTFS, FAT32) и расширенный раздел Windows, в котором были построены файловые системы Linux и раздел виртуальной памяти.
1_м. также fdisk(8).
mm
Jв?
Глава 6
Редактирование текстовых файлов в ЗОЕ и Vim
6.1. Введение Освоение текстового редактора — важный навык для каждого, кто хочет быть грамотным, достойным пользователем Linux. Проблема выбора редактора сама по себе интересна, так как в мире Linux существует много текстовых ASCII-редакторов. Это объясняется двумя причинами. Во-первых, создание текстового редактора является хорошим (и достаточно типовым) проектом для программиста-новичка; во-вторых, текстовый редактор — сугубо личный инструмент. Гуру Linux часто пишут или изменяют текстовые редакторы, руководствуясь своими капризами... то есть специфическими требованиями. Пользователи Linux частенько ввязываются в перепалки по поводу текстовых редакторов (особенно «Emacs против Vim»). Занятие веселое, но бессмысленное. Найдите тот редактор, который лучше всего подходит для ваших потребностей и темперамента. Красота Linux (и концепции свободно распространяемого программного обеспечения вообще) заключается в богатстве выбора пользователя. В этой главе мы рассмотрим JOE (Joe's Own Editor) и Vim, который является потомком vi. Почему не Emacs? Emacs — замечательная программа; большая, сложная, с бесконечными возможностями настройки и расширения. Это не простой текстовый редактор, а скорее интегрированная среда. В Emacs пользователи могут читать почту и конференции Usenet, писать программы, играть в игры, создавать собственные макросы и комбинации клавиш, имитировать оконные среды при отсутствии X Window и даже консультироваться с психиатром (М-х doctor). Emacs может сделать что угодно... если вы знаете, как этого добиться. Но для тех, кому нужно просто отредактировать текстовый файл, этого многовато. Emacs «весит» более 22 Мбайт, тогда как JOE и Vim помещаются на одной дискете, да еще остается свободное место. JOE и Vim хорошо подходят для повседневной работы по редактированию конфигурационных файлов. Конечно, они также могут использоваться для написания любых текстов — статей, веб-страниц, программ и т. д. Чем лучше вы печатаете, тем производительнее будет ваша работа. В идеальном случае руки не должны отрываться от клавиатуры, а глаза — от экрана.
80
Глава 6. Редактирование текстовых файлов в JOE и Vim
JOE является «однорежимным» редактором; иначе говоря, ввод команд и редактирование текста осуществляются на одном экране. Vim работает в двух режимах: нормальном/командном режиме и режиме вставки/редактирования. В нормальном режиме все вводимые данные интерпретируются как команды. В режиме вставки все интерпретируется как обычный текст. Это приводит в недоумение некоторых новичков, которые впервые берутся за Vim — ведь в программе нет анимированного «помощника», который бы объяснил, что они должны переключаться между двумя режимами, и показал, как это делается. Vim — серьезный, мощный инструмент, но, как вы узнаете из этой главы, освоить его не так уж трудно. СОВЕТ Существует прекрасная бесплатная программа обучения навыкам печати для Linux, которая называется Gtypist (http://www.gnu.org/software/gtypist/gtypist.html). Она обучает как раскладке Qwerty, так и раскладке Дворака и содержит учебные курсы на английском, чешском, русском, испанском, немецком, французском и норвежском языках. Как и большинство программ на базе ncurses, она лучше смотрится на текстовой консоли, чем в X.
vi/Vim, универсальный редактор Vi (официально произносится «ви-ай», хотя я люблю говорить «ви» в рифму с «фи», чтобы позлить фанатов) — общедоступный текстовый редактор. В какой бы разновидности системы Linux вы ни работали, в вашем распоряжении всегда будет vi или один из его потомков. У vi существует множество клонов: Vim, elvis, vile, calvin, Vigor, viper, virus и т. д. Проекты такого рода появляются и исчезают, но Vim, elvis и vile широко используются и активно развиваются. Vim — самый популярный из всех потомков vi. При запуске vi во многих дистрибутивах Linux (таких, как Red Hat, Debian и Mandrake) запускается Vim. Программа поддерживает окна и цветовое выделение синтаксиса, содержит обширную электронную справку и документацию. Впрочем, даже если в вашем распоряжении окажется только древняя версия vi, навыки работы в Vim вам пригодятся.
Редактор JOE: «пять в одном» Редактор JOE обладает целым рядом приятных особенностей. В частности, он работает в нескольких режимах и имеет собственную справочную систему. Вы можете запустить JOE и сходу взяться за работу, не заботясь о чтении документации. Конечно, это не лучший способ, но в крайнем случае он сработает. JOE поддерживает три режима эмуляции: О jstar (WordStar); О jpico (Pico); О jmacs (hmacs) и два собственных режима, JOE и RJOE. В ограниченном режиме RJOE («Restricted JOE») могут открываться только файлы, указанные в командной строке. После запуска редактора в режиме RJOE вы не сможете открыть новые файлы в редакторе или открыть новый сеанс командной оболочки. Таким образом, режим RJOE хорошо подходит для sudo-пользователей, поскольку он предотвраща-
6.2. Поиск команд JOE
81
ет выход в режим командной строки с привилегиями root. Все пять режимов работают из одного 200-килобайтного исполняемого файла.
См. также joe(l), vi(l); Gtypist (http://www.gnu.org/software/gtypist/gtypist.html).
6.2. Поиск команд JOE Проблема Как заставить JOE сделать что-нибудь полезное? Для этого необходим полный список команд JOE для всех его режимов. Притом справка нужна в электронном виде, чтобы ее можно было использовать во время работы.
Решение Включите режим электронной справки, поддерживаемый во всех режимах JOE. Для запуска JOE в режиме справки воспользуйтесь командой $ joe -help
Комментарий В Joe используется много трехклавишных команд. Каретка ( л ) обозначает клавишу Ctrl. Нажмите первые две клавиши вместе (например, Ctrl+K), затем отпустите их и нажмите третью клавишу. Далее перечислены базовые команды вызова справки: о
JOEHRJOE:
•
Л
К Н . — включение/отключение режима вывода справки;
• Esc. — перебор справочных экранов, Esc, — перебор в обратном направлении, о Jpico: • AG . — включение/отключение режима вывода справки; • Esc . — перебор справочных экранов, Esc , — перебор в обратном направлении. О Jmacs: Л • Х Н . — включение/отключение режима вывода справки; Л • Х. — перебор справочных экранов, ЛХ., — перебор в обратном направлении. О Jstar: • A J H . — включение/отключение режима вывода справки; • Esc. — перебор справочных экранов, Esc, — перебор в обратном направлении.
См. также joe(l).
82
Глава 6. Редактирование текстовых файлов в JOE и Vim
6.3. Настройка JOE Проблема JOE поддерживает много режимов и параметров командной строки. Требуется настроить его конфигурацию по умолчанию, чтобы редактор запускался в нужном вам состоянии.
Решение Создайте персональный файл .joerc с описанием нужной конфигурации и сохраните его в своем домашнем каталоге. Для начала загляните в /etc/joe, где хранятся файлы инициализации JOE по умолчанию: $ Is /etc/joe jmacsrc joerc jpicorc jstarrc rjoerc terminfo Воспользуемся файлом joerc для «обычного» JOE, который не пытается прикидываться кем-то другим. Скопируйте файл в свой домашний каталог и сделайте его скрытым, сохранив прежнее имя: $ joe -linums -help /etc/joe/joerc *K D Name of f i l e to save ГС to abort): -/.joerc Could not make backup f i l e . Save anyway (y,n.*C)? Y File -/.joerc saved Л « » означает клавишу Ctrl. Регистр символов команд не имеет значения; К D — то же самое, что k d. Хотя .joerc позволяет управлять всеми аспектами работы JOE вплоть до мелочей, самые полезные параметры собраны в первых двух секциях. Например: -marking Текст между *К В и курсором выделяется (используется с -lightoff) -force Вставка завершающего перевода строки при сохранении файла -lightoff Снятие выделения после копирования или перемещения блока -exask *K X всегда запрашивает подтверждение имени файла Неактивные параметры начинаются с пробела или символа табуляции. Чтобы активировать параметр, удалите начальный пробел и убедитесь в том, что строка сдвинута до предела влево.
Комментарии Одна из приятных особенностей JOE заключается в том, что программа работает с копией исходного файла. Оригинал сохраняется в виде резервной копии (впрочем, эта возможность тоже настраивается и ее можно отключить в .joerc).
См. также joe(l); раздел 6.4.
6.5. Копирование текста между файлами в JOE
83
6.4. Сохранение личной конфигурации JOE в отдельном файле 1роблбмэ rc-файлы JOE весьма велики, и уследить за всеми изменениями нелегко. Как отделить ваши изменения от параметров, сохранивших прежние значения?
Решение Сохраните изменения в отдельном файле, который в нашем примере будет называться .joercprefs. Загрузите этот файл, включив следующую строку в начало .joerc, в любую позицию до начала «первой секции». Обязательно включите начальное двоеточие и выровняйте директиву по левому краю: :include .joercprefs
Комментарий Сохранение всех изменений в отдельном файле окажет вам неоценимую помощь. Учтите, что .joercprefs не замещает .joerc — параметры, явно включенные или отключенные в .joerc, сохраняют свое состояние, что бы ни говорилось в .joercprefs. Однако параметры .joerc, начинающиеся с пробела, игнорируются и потому могут включаться и отключаться в .joercprefs.
См. также joe(l).
6.5. Копирование текста между файлами в JOE Проблема Хорошо, уговорили — собственный файл -/.joercprefs нужен. Но как создать файл без дубликатов или параметров, конфликтующих с исходным файлом -/.joerc?
Решение Откройте в JOE два окна: для -/.joerc и для нового файла-/.joercprefs. Скопируйте нужные параметры из -/.joerc в -/.joercprefs. Сначала создайте резервную копию оригинала -/.joerc: $ ср -/.joerc -/.joerc.bak
Откройте -/.joerc, затем откройте второе окно и присвойте имя новому файлу: $ joe -linums -help -/.joerc "К О "К Е Name of f i l e to edit (*C to abort): -/.joercprefs
84
Глава 6. Редактирование текстовых файлов в JOE и Vim
Л
Переключение между окнами осуществляется командами 1 Р и К N. Иногда Л с поиском нужного окна возникают проблемы; команда К I переключает режимы показа всех окон/скрытия неактивных окон. А Л Пометка копируемых блоков текста производится командами К В и К К. УсЛ тановите курсор в точке вставки и скопируйте текст клавишами К С.
Комментарий Файл -/.joerc очень велик; возможно, вам будет удобнее отобразить только неактивные параметры. Чтобы отобрать их, воспользуйтесь командой фильтрации JOE:
-к/ $ grep '"[space]]'
Теперь вы сразу увидите неактивные команды и сможете скопировать те из них, которые хотите активировать, в файл -/.joercprefs. Вы также можете отобразить только активные параметры: $ grep •*[*[:space:]] 1
Команда АК X сохраняет -/.joercprefs и завершает работу. Теперь изменения хранятся отдельно от основного файла, что упрощает их дальнейшее отслеживание и редактирование.
См. также joe(l).
6.6. Поиск и замена в JOE Проблема Вы редактируете документ и находите особенно раздражающую ошибку, которая повторяется снова и снова. Какие возможности предлагает J O E для поиска и замены слов, текстовых строк и знаков препинания в документе?
Решение Команда АК F обеспечит любые потребности в области поиска и замены. Для проведения нетривиального поиска применяются специальные служебные последовательности, называемые регулярными выражениями. Итак, введите команду ЛК F. Клавиши Т и i позволяют выбрать из списка предыдущий критерий поиска и замены. Комбинация AL продолжает поиск без применения замены. Допустим, вы хотите найти в документе все вхождения слова «nucular» и заменить их правильным написанием «nuclear». Вот как это делается: "К F Find ("С to abort): \<nucular\> (I)gnore (R)eplace (B)ackwards Bloc(K) Ш Г С to abort): r Replace with (*C to abort): nuclear Replace (Y)es (N)o (R)est (B)ackup (X to abort)? r
6.7. Вертикальное выделение текста в JOE
85
Обратите внимание на последовательности \< и \ > . Они указывают JOE, что поиск должен ограничиваться целыми словами. Без них JOE найдет все вхождения строки, даже находящиеся внутри других слов. Возможно, вместо замены написания вы предпочтете заключить неверное слово в кавычки: Replace with ГС to abort): "\&" Или еще более экзотический вариант: Replace with ГС to abort): "It's nuclear, not "\&" dammit!!" Поиск совпадения только в начале строки: rnucular Поиск совпадения только в конце строки: nucularU Чтобы найти пропуски, нажмите «пробел» и символ табуляции в квадратных скобках: Поиск любого из символов, указанного в квадратных скобках (для поиска без учета регистра символов): \[Nn]ucular
См. также joe(l); раздел «The special search sequences» в электронной справке JOE.
6.7. Вертикальное выделение текста в JOE Проблема Вы долго строили таблицу, а теперь вам потребовалось поменять столбцы местами. Другими словами, требуется выделить вертикальный фрагмент текста — например, первое слово в нескольких строках, фрагменты текста в середине нескольких строк или столбец данных.
Решение Воспользуйтесь режимом прямоугольного выделения. Режим включается командой АТ X. Выделите блок текста командами *К В и ЛК К, а затем выполните с ним нужную операцию.
Комментарий Некоторые полезные команды, выполняемые с блоками текста: О ЛК В, ЛК К — пометка/снятие пометки с начала и конца блока; О АК М - перемещение блока в текущую позицию курсора; О ЛК С — копирование блока в текущую позицию курсора;
86
Глава 6. Редактирование текстовых файлов в JOE и Vim
А
О К Y - удаление блока текста; Л
О К — перемещение блока вправо; О *К — перемещение блока влево; Л
О КА — выравнивание текста по центру; Л
О К / — открытие окна командной строки для выполнения команды обработки текста.
См. также joe(l); справочная система JOE.
6.8. Поиск и открытие файлов в JOE Проблема У вас много работы. Вам приходится редактировать множество файлов, выполнять огромное количество операций. Постоянно запускать и завершать JOE неудобно. Вы предпочитаете найти нужный файл и открыть его, не выходя из JOE.
Решение Для поиска файлов в J O E используйте команды *KR и АКЕ. Эти команды либо открывают существующий файл, либо создают новый файл: А КЕ Name of the f i l e to edit ГС to abort): Имена существующих файлов расширяются клавишей Tab. В данном примере введите да, а затем два раза нажмите Tab. JOE автоматически вставляет звездочку при нажатии Tab, так что вводить этот символ не нужно. Л
К Е Name of the f i l e to edit (AC to abort): .ga* .gaby/ .gaim/ .gaimrc .galeon/
Клавиша Enter осуществляет переход «вниз» по дереву файлов, a Backspace — «вверх», по направлению к корневому каталогу. Клавиша Tab выбирает файл. Следующая команда вставляет существующий файл в позиции курсора: Ч R Name of the f i l e to edit (AC to abort): Запомните команды управления окнами: О АК0 — открытие нового окна; О ЛК1 — отображение всех окон/скрытие неактивных окон; О ЛКР и *KN — перемещение между окнами.
Комментарий Хотя J O E не обладает собственной поддержкой мыши, вы можете копировать и вставлять данные из других приложений мышью в сеансах X. Это функция тер-
6.9. Быстрое изучение Vim
87
минала, а не JOE. Используйте классический метод Unix: выделите текст мышью, а затем щелкните средней кнопкой мыши. Комбинации клавиш AV и ЛС имеют другой смысл в JOE.
См. также joe(l).
6.9. Быстрое изучение Vim • DO бл е м а Вы проделали изрядную домашнюю работу, возможно — прочитали раздел «Введение» к этой главе и решили использовать Vim. Итак, требуется как можно быстрее освоить Vim и притом с самого начала встать на правильный путь.
Решение Запустите программу обучения Vim; для этого достаточно ввести vimtutor в командной строке. Через 30-60 минут вы будете управляться с программой, как бывалый профессионал. Это самый лучший и быстрый способ.
Комментарии Возможно, из учебного курса вы узнаете все команды, которые вам когда-либо понадобятся. За дополнительной информацией о миллионах возможностей Vim обратитесь к превосходному руководству пользователя Брэма Муленаара (Bram Moolenaar), автора Vim. Руководство включено во внутреннюю справочную систему Vim, а также существует в нескольких электронных версиях по адресу http://vimdoc.sourceforge.net (HTML для поиска, PDF и HTML для печати). Чтобы вызвать руководство пользователя в Vim, введите команду :help Клавиши управления курсором используются для перебора оглавления, а комА бинация ] открывает главу. Вы также можете сразу перейти к конкретной теме: :he!p quickref :help tutor :he!p usr 06.txt
Поиск по критерию с выводом списка вариантов: :help vimrc
Вместо Enter нажмите AD. Результат будет выглядеть примерно так: :help vimrc vimrc vimrc-intro vimrc vimrc-filetype _vimrc vimrc-example.vim
system-vimrc gvimrc .gvimrc
_gvimrc :mkvimrc
88
Глава 6. Редактирование текстовых файлов в ЗОЕ и Vim
Выберите нужный вариант :help vimrc-exampie.vim
Если вы недавно работаете в Vim, для начала потренируйтесь с учебным курсом Vim. Следующие разделы посвящены настройке рабочей среды и управлению Vim.
См. также vimtutor(l); страница документации vim.org (http://www.vim.org/docs.php); страница vimdoc на сайте SourceForge (http://vimdoc.sourceforge.net/).
6.10. Создание автотекста в Vim Проблема Вам приходится часто вводить повторяющиеся фрагменты текста: уведомления об авторских правах, комментарии к программному коду, подписи и т. д. Вам хотелось бы как-то оптимизировать процесс ввода.
Решение Воспользуйтесь сокращениями Vim. Сокращения создаются в нормальном режиме: :ab th This is an example of a Vim abbreviation. Чтобы воспользоваться сокращением, переключитесь в режим вставки и введите символы th, за которыми следует пропуск (пробел, символ табуляции или возврат курсора). Просмотр списка всех сокращений: tab Удаление сокращения: :unabbreviate th Удаление всех сокращений: :abclear Сокращения, как и все параметры конфигурации Vim, можно сохранять в файле -/.vimrc.
Комментарий Сокращения могут использоваться для автоматического исправления орфографии (раздел 6.6) — просто определите свои стандартные ошибки в виде сокращений. Этот прием лучше всего подходит для исправления опечаток (например, teh вместо the).
См. также Справочная система vim (:help map.txt); раздел 6.12.
6.11. Привязка команд к клавишам
89
6.11. Привязка команд к клавишам Пооблема Некоторые команды Vim слишком длинны и сложны. Вы создали собственную коллекцию пользовательских команд и теперь хотели бы назначить комбинации клавиш для их вызова.
Решение Команда тар связывает нажатия клавиш с произвольной командой или текстовой строкой в нормальном режиме; команда тар! определяет нажатия клавиш для режима вставки. Чтобы просмотреть текущие назначения, введите команду :тар или :тар! без параметров. ВНИМАНИЕ Будьте осторожны при создании собственных привязок — не используйте клавиши, с которыми в Vim уже связаны операции, поскольку команда т а р выполнит ваше требование и заменит их, не сказав ни слова. Кстати говоря, по этой причине стоит сначала как следует освоить Vim, а уже потом приступать к экспериментам с привязкой.
Новая привязка создается командой вида :map <F3> :runtine! syntax/2htm1.vim Команда включает теги HTML в текущий документ в новом окне. Для ее активации будет использоваться клавиша F3. Удаление привязок осуществляется командой вида :unmap <F3> Имена клавиш Esc, <CR> и <F2>-<F12> приходится записывать в особом виде, потому что при простом нажатии клавиша выполнит ту команду, которая за ней закреплена. В следующем примере с клавишей F3 связывается команда, которая включает режим вставки, заключает слово между тегами HTML и выходит из режима вставки, чтобы вы могли продолжить печать: :map <F3> i<B><Esc>ea</B><Esc>a Приведу несколько примеров привязок режима вставки для быстрого добавления тегов HTML. Они быстро работают, потому что выполняются без выхода из режима вставки. Маловероятно, чтобы такие комбинации запятых с буквами встретились в обычном тексте. :map! :тар!
.ah <A href=""> .а </А>
:тар! .b <B><Esc>ea</B><Esc>a :тар! ,1 <I><Esc>ea</I><Esc>a :тар! .1 <LI><Esc>ea</LI><Esc>a
Комментарий Самыми безопасными для привязки являются клавиши F2-F12 и Shift+F2-F12. Но на практике они обычно быстро заканчиваются. Комбинации «запятая+буква»,
90
Глава б. Редактирование текстовых файлов в JOE и Vim
не встречающиеся в обычных текстах, позволяют создать столько привязок, сколько потребуется. Полная информация о встроенных привязках Vim выводится командой :help map-which-keys. Также можно запросить у Vim справку по конкретной клавише или комбинации: :help CTRL-V :help F5 :help /b
Помните, что названия клавиш CTRL и F5 должны записываться; не нажимайте их на клавиатуре.
См. также Справочная система vim (:help 2html.vim, :help key-mapping).
6.12. Настройка Vim Проблема При выходе из программы вся настройка теряется. Конечно, вам не хочется заново вводить все сокращения и привязки при запуске. Как настроить рабочую среду Vim с сохранением сокращений и нестандартных привязок?
Решение
•
Создайте файл ~/.vi m re с нужными параметрами. Либо создайте файл заново, либо скопируйте и отредактируйте глобальный файл /etc/vim/vimrc. Что можно сохранить в файле -/.vimrc? Любые значения параметров Vim. Чтобы узнать имена всех параметров, введите команду :set a l l
aleph=224 noarabic arabicshape noallowrevins noaltkeymap
Затем посмотрите, что означает каждый параметр: :help noaltkeymap
Следующая команда открывает информацию о параметрах в виде справочной страницы с гиперссылками: :help options
Комментарий Во время чтения документации Vim его гибкость и колоссальные возможности настройки производят огромный эффект. Начните с самого начала, как показано ниже, и не обращайте внимания на хитроумные возможности «для фанатов» до тех пор, пока они вам не потребуются.
6.13. Быстрое перемещение в Vim
91
В следующем примере файла -/.vimrc продемонстрированы три важных возможности Vim: настройка параметров запуска, сокращений и клавиатурных привязок. Апостроф является признаком строки комментария. " Персональный файл vimrc. создан 4/22/2004 " " Отключение режима совместимости с vi " для использования всех возможностей Vim set nocompatible ' 4 пробела на позицию табуляции set tabstop=4 " Расширенные возможности забоя set backspacedndent.eol.start Выделение синтаксиса включено по умолчанию syntax on " Автоматическое определение типа файла " для выделения синтаксиса.
П1^?!„?1™1!!.,1"™..?" г.
Сокращения •"""""м""м"'
"""
«*
"""""""""" •
:map! :map! :map! :map! :map!
.ah <A href=""> .a </A> .b <B><Esc>ea</B><Esc>a .i <I><Esc>ea</I><Esc>a .1 <LI><Esc>ea</LI><Esc>a
"""
'м"""
:ab Qu Carl a Has Gone Fishing, Back Much Later :ab Co Copyright (c) 2004 Carla Schroder all rights reserved :ab Em carla@bratgrrl.com :ab Wb http://tuxcomputing.com „п „ ,,_!, Добавление тегов HTML в режиме вставки
Все изменения, внесенные в -/.vimrc, вступают в силу при следующем запуске Vim.
vim(l); справочная система vim (:help vimrc, :help usr_O5.txt, :help ab).
9NH&
6.13. Быстрое перемещение в Vim Проблема Вы редактируете большой документ или несколько файлов одновременно, и вам приходится часто перемещаться туда-сюда между разными секциями. Но на перемещения уходит время, и вы постоянно сбиваетесь с текущей позиции.
Решение Воспользуйтесь маркерами Vim для сохранения позиции курсора (по аналогии с книжными закладками).
92
Глава 6. Редактирование текстовых файлов в JOE и Vim
Существуют 52 закладки: a-z и A-Z. В командном режиме установите курсор в нужную позицию и введите команду та Чтобы вернуться к маркеру, введите команду 'а
(Обратите внимание: апостроф обратный, а не прямой!) Маркеры нижнего регистра работают только в границах одного файла. Для перехода к другому файлу следует использовать маркеры верхнего регистра. Допустим, вы пометили позицию в файле configstuff.txt: шА Если теперь ввести команду * А в любом открытом файле или окне, Vim перейдет к отмеченной позиции configstuff.txt, открыв файл в случае необходимости. Маркеры верхнего регистра хранятся в файле -/.viminfo, поэтому они восстанавливаются в следующем сеансе. Нумерованные маркеры — удобная возможность Vim, которая не требует вмешательства с вашей стороны. В момент завершения работы Vim запоминает последнюю позицию курсора. При следующем запуске Vim можно вернуться к этой позиции командой "О
См. также Справочная система vim (:help mark-motions, :hetp viminfo).
6.14. Сеансы Vim Проблема Вы работаете над большим проектом; работа прерывается на ночь. Хорошо бы сохранить все: параметры, привязки, открытые файлы, открытые окна, позицию и размер окон... словом, все, что обычно пропадает при завершении работы?
Решение Нет проблем — создайте сеанс (session). Сеанс Vim сохраняет всю рабочую среду и восстанавливает ее в прежнем виде при следующем запуске сеанса. Достигнув точки, в которой вам хотелось бы сохранить свою рабочую среду, сохраните все открытые файлы, затем задайте имя сеанса: :wall rmksession myarticle.vim
В данном примере создается файл сеанса myarticle.vim. Чтобы вернуться к сохраненному сеансу, введите команду $ vim -S myarticle.vim
6.14. Сеансы Vim
93
После работы в этом сеансе у вас есть два варианта. Либо сохраните все изменения под тем же именем: rmksession! myarticle.vim
либо организуйте доморощенный «контроль версии», сменив имя сеанса: :mksession myarticle_rev2.vim
Также возможно перейти к другому сеансу без завершения программы: :wall :mksession! myarticle_rev2.vim
:source myarticle.vim У сеансов есть еще одно интересное применение: создайте идеальную рабочую среду и сохраните ее на будущее: $ vim :help "W w :vertical split /-
Результат показан на рис. 6.1. Session Edit view Bookmarks Settings Help 'help.txt*
Viat version fi.l. Last change: 2Q01 Sep 14 VIM - main help file
Use "j" ClGse this window use Get out of Vim Use Move around
Jump to a subject With the mouse jump back let specific help
к
the cursor keys, 01: "h" to go left, h 1 j to go down, "k" to go up, "1" to go right. ":q<Bnt#o*. ":qal<Bnt*E>* (careful, all changes ace lost!».
Position the cunot on a tag between Ibasiej and hit CTRL-;. ":set mouse=a'1 to enable the mouse (in к teem ОС GUI) . Double-click the left mouse button on a tag between ibfttsj. Type CTRJ..--T C LCTPRXi-0(repeat to go further back). It is possible to go directly to whatever you want help on, by giving an argument to then:help" command |:h«lpj. It is possible to further specify the context:
&с«39 ? toe кит; board shortcut! S o r t e d by сшив i„bafc,-,.svp,,o « /hoa«/cai:ia/ AbiSuite/ -in-city/ Trash/ acrobat/ adobe/
New, i'l.l
Рис. 6.1. Создание идеальной рабочей среды Увеличьте окно с деревом файлов и уменьшите окно справки, чтобы вам было удобно с ними работать. Команда AW w используется для переключения между окнами, а команда AW + (или - ) — для изменения их размеров. Добившись идеального результата, сохраните конфигурацию командой :mksession 3pane.vim (рис. 6.2).
Глава 6. Редактирование текстовых файлов в JOE и Vim
94
Session EH» View' BaoKmarKs Settings Help
lp.txt*
For Vis v«L'»ion 6.1. Last change: 2001 Sep 14 VIM - main help file
Move around: close this window:
Use the cursor keys, or "h" to go Lett, " j " to go down, "k" to go up, "1" to go right, use ":q<]SfttBE>'.
к h
1 j
| P r e s s ? t o r Keyboard shortcuts Sorted by nenc С -bate,*, .swp, -o
Abi3uite/ Lin-city/ Trash/ acrobat/ adobe/ aCtvcstep/ aptitude/ avm/ blackbox/ blucfish/ designer/ dia/ dillo/ emelfm/ fblevels/
_JBut, П5ПЯ j Shell Nc 3
Рис. 6.2. Внесение изменений и сохранение сеанса
Комментарий Файлы сеансов рекомендуется хранить в отдельном каталоге, чтобы их можно было легко найти при необходимости.
4«Mi т а к ж е Справочная система vim (:help session, :help usr_08.txt).
6.15. Назначение редактора по умолчанию Проблема Некоторые программы (например, crontab и quota) используют редактор по умолчанию. Чаще всего им оказывается какое-нибудь убогое древнее страшилище, а вы стали поклонником Vim и JOE. Как назначить в качестве редактора по умолчанию ту программу, которая вам нравится?
Решение Отредактируйте переменные окружения в файлах ~/.bashrc или ~/.bash_profile. Файл -/.bashrc является предпочтительным, потому что он распространяется на
6.16. Определение параметров компиляции Vim
95
все экземпляры командного процессора, открытые во время сеанса. Содержимое файла ~/.bash_profile читается только во время входа в систему. Включите в ~/.bashrc следующие строки: EDITOR=vim VISUAL=$EDITOR export EDITOR VISUAL Разумеется, вы можете задать любой редактор по своему выбору. Обычно рекомендуется использовать консольные текстовые редакторы вроде JOE, Pico, Vim или Emacs. Также можно выбрать редактор X вроде Kwrite или GEdit, но учтите, что в некоторых ситуациях система X может быть недоступна, поэтому такой выбор подходит не всегда. Важно использовать обе переменные, VISUAL и EDITOR. Старое название VISUAL является пережитком прошлого, но некоторые программы по-прежнему используют его. Проследите за тем, чтобы файл -/.bashrc был включен в ~/.bash_profile: # include .bashrc if it exists if [ -f -/.bashrc ]; then source -/.bashrc
См. также bash(l).
6.16. Определение параметров компиляции Vim Проблема У вас возникли трудности с Vim. Похоже, некоторые возможности программы не были включены при компиляции. Как узнать, какие параметры использовались при компиляции Vim?
Решение Запустите Vim и введите команду :version
Команда выводит все параметры компиляции и местонахождение инициализационных файлов в системе.
Комментарий Далее приводится упрощенный пример выходных данных :version. Знаком «+» помечены включенные возможности, а знаком «-» — отключенные. По этим данным можно легко определить, придется ли вам перекомпилировать Vim, чтобы использовать нужную возможность. :version
VIM - Vi IMproved 6.2 (2003 Jun 1. compiled Apr 1 2004 23:39:33) Included patches: 1-298. 300-426
96
Глава 6. Редактирование текстовых файлов в JOE и Vim
Compiled by Norbert Tretkowsky (nobse@debian.org) Big version with GTK2 GUI. Features included (+) or not (-): +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent +clientserver -hanguljinput +iconv +insert_expand +jumplist system vimrc user vimrc user exrc system gvimrc user gvimrc system menu fall-back for
file: file: file: file: file: file: $VIM:
"$VIM/vimrc" "$HOME/.vimrc" "$HOME/.exrc" "$VIM/gvimrc" "$HOME/.gvimrc" "SVIMRUNTIME/menu.vim" "/usr/share/vim"
Compilation: gcc -c - I . -Iproto -DHAVE+CONFIG H -DFEAT_GUI_GTK -I/usr/include/gtk2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0
См. также Справочная система vim (:help version).
.
Глава 7
Запуск и завершение работы Linux 7.1. Введение Существует множество способов запуска и остановки системы Linux. Также не стоит забывать о сценариях инициализации, управляющих запуском различных процессов, и о различных уровнях выполнения системы (runlevels), в каждом из которых может работать свой набор процессов. Выполните следующую команду: $ ps axfl
Найдите процесс с номером 1 (вывод сокращен, в вашей системе выходные данные команды будут содержать больше столбцов и строк): UID PID PPID STAT TTY TIME COMMAND О 1 О S ? 0:03 init Это init, предок всех процессов в системе Linux. Обратите внимание: идентификатор родительского процеса PPJD (Parent Process ID) равен 0, потому что init является первым процессом, стартующим после запуска ядра. Процесс загрузки Linux проходит примерно так: 1. BIOS инициализирует оборудование и читает загрузочный сектор. 2. Главная загрузочная запись (MBR, Master Boot Record) запускает загрузчик операционной системы, который передает управление ядру. 3. Ядро инициализирует периферийные устройства, загружает драйверы, монтирует корневую файловую систему и вызывает/sbin/init. 4. Программа /sbin/init запускает все процессы пользовательского уровня. Она читает/etc/inittab и переходит к активизации дополнительных сценариев, указанных в /etc/inittab. 5. Дальнейшие действия зависят от дистрибутива. В Debian следующим выполняется сценарий /etc/init.d/rcS, который передает управление в каталог/etc/ rc*.d, указанный в /etc/inittab. По умолчанию Debian работает на уровне 2, поэтому выполняются все сценарии из каталога /etc/rc2.d (запуск в стиле SysV).
98
Глава 7. Запуск и завершение работы Linux
В Red Hat следующим выполняется сценарий /etc/rc.d/rc.sysinit, а затем сценарии из каталога, соответствующего уровню выполнения (обычно /etc/rc3.d или /etc/rc5.d). Процедура запуска в Slackware ближе к процедуре запуска BSD: в системе имеется один каталог /etc/red, в котором находится сценарий init для каждого уровня выполнения. Впрочем, в ней также присутствуют некоторые аспекты SysV. В системах Red Hat и Debian каталоги /etc/rc*.d содержат не стартовые сценарии, а символические ссылки на сценарии в /etc/init.d. Создание ссылок на основной каталог сценариев/etc/init.d предотвращает излишнее дублирование. Кроме того, имена ссылок определяют способ запуска слуисб. Для примера возьмем запись $ I s -go S20cupsys
lrwxrwxrwx
1 16 Sep 9 17:51 S20cupsys -> . ./init.d/cupsys
Префикс S20 означает, что служба cupsys должна запускаться с приоритетом 20. Чем ниже значение, тем выше приоритет. Запись K20cupsys означает, что служба должна быть «убита» (что поделаешь, мир Linux жесток). Этот простой механизм гарантирует, что службы запускаются и останавливаются так, как вам потребуется, и в правильном порядке.
Уровни выполнения Стандартная схема уровней выполнения Linux: О 0 — остановка; О 1 — однопользовательский режим; О 2-5 — многопользовательский режим; О 6 — перезагрузка. Уровни выполнения в дистрибутивах Debian: О 0 — остановка; О 1 — однопользовательский режим; О 2-5 — многопользовательский режим; О 6 — перезагрузка. Уровни выполнения в дистрибутивах Red Hat: О 0 — остановка; О 1 — однопользовательский текстовый режим; О 2 — не используется (определяется пользователем); О 3 — многопользовательский текстовый режим; О 4 — не используется (определяется пользователем); О 5 — многопользовательский графический режим; О 6 — перезагрузка. Уровни выполнения в дистрибутивах Slackware: О 0 — остановка; О 1 — однопользовательский режим;
7.2. Смена уровня выполнения после загрузки
99
О 2 — не используется (то же, что 3); О 3 — многопользовательский текстовый режим; О 4 — многопользовательский графический режим; О 5 — не используется (то же, что 3); О 6 — перезагрузка. В других дистрибутивах могут существовать другие варианты. Уровни 7-9 теоретически существуют, но на практике не используются. Чтобы понять, что происходит на каждом уровне, достаточно прочитать каталоги rc*.d.
7.2. Смена уровня выполнения после загрузки Проблема Где-то в процессе установки системы Linux вы выбрали «загрузку в текстовом режиме» или «загрузку в графическом режиме». Возможно, вы не до конца понимали, что означают эти режимы — а может, понимали, но теперь вам нужен графический интерфейс вместо скучной текстовой консоли. А может, у вас возникли проблемы с графическим интерфейсом, и теперь вы хотите перейти на уровень с минимальным набором служб для диагностики.
Решение Используйте init. Сначала проверьте текущий уровень выполнения: # /sbin/runlevel N5
«N» означает, что уровень после загрузки не изменялся. Если бы это произошло, то в выходных данных отображался бы исходный уровень. Для смены уровня выполнения необходимо обладать правами root: # /sbin/init 3
Команда останавливает все службы уровня 5 и запускает службы уровня 3. Происходящее напоминает «частичную перезагрузку». Все пользователи принудительно выводятся из системы. При решении особо серьезных проблем иногда требуется переключиться на уровень 1: # /sbin/init 10
Команда останавливает X и переводит вас в командный процессор с правами root, с ограниченным набором служб и без X. В Red Hat после спуска на уровень 1 не нужно вводить пароль root, поэтому не предоставляйте доступ к init sudo-пользователям.
Комментарий В Red Hat, Fedora, Mandrake и Slackware смена уровня выполнения является одним из способов закрытия сеанса X, так как на уровне 3 загружается текстовая
100
Глава 7. Запуск и завершение работы Linux
консоль. Тем не менее это весьма радикальный способ, поскольку он останавливает и перезапускает все службы и выводит из системы всех текущих пользователей. Зачем изменять уровень выполнения при помощи init? Возможны разные причины: О переход на уровень 1 для диагностики и восстановления; О остановка и перезапуск системы в ситуации, когда обычные способы не работают; О перезапуск всех служб или переход на другой набор служб. «Неправильные» причины: О переход от сеанса текстовой консоли к сеансу X. Однако команда init должна выполняться с правами root, а запускать сеанс X с правами root не рекомендуется: это небезопасно, а любые случайные ошибки могут нарушить работоспособность системы; О завершение сеанса X. Как будет показано в разделе 7.4, для перехода между сеансами X и консольными сеансами существуют другие, более правильные способы. Также можно воспользоваться командой telinit, которая представляет собой жесткую ссылку на init: $ Is -al /sbin/telinit Irwxrwxrwx 1 root
root
4 Oct 31 07:51 /sbin/telinit -> init
См. также init(8); раздел 7.4.
7.3. Смена уровня выполнения по умолчанию Проблема Вас не устраивает уровень выполнения, в котором загружается система, и вы хотите сменить его. Предположим, вы хотите загрузиться в текстовом режиме вместо графического интерфейса. А может быть, вы настроили разные уровни выполнения на запуск разных наборов служб и после должного тестирования и настройки готовы выбрать уровень по умолчанию.
Решение Откройте файл /etc/inittab и найдите следующую запись: # Уровень выполнения по умолчанию id:2:initdefault: Просто замените 2 другой цифрой (кроме 0 или 6). Если вы предпочитаете иметь свободу выбора на стадии загрузки, закомментируйте строку id:X:initdefault. Init предложит выбрать уровень выполнения во время загрузки.
7.4. Запуск и остановка X
101
Комментарий В Debian стандартные уровни выполнения 2-5 не отличаются друг от друга; они загружают либо текстовую консоль, либо графическую программу входа в систему в зависимости от того, что было выбрано во время установки. Уровень выполнения 2 используется в Debian по умолчанию. Изменение конфигурации уровней выполнения Debian рассматривается в разделе 7.5.
См. также inittab(5); раздел 7.5.
7.4. Запуск и остановка X Проблема Вам не нравится менять уровень выполнения только для завершения сеанса X — ведь это приводит к перезапуску всех служб и нарушению работы всех пользователей, вошедших в систему. Как лучше завершить сеанс X?
Решение Существует несколько способов. Лучше всего настроить один уровень выполнения на загрузку текстовой консоли, а затем запустить X в нужный момент командой startx: $ startx После этого простой выход из сеанса X будет приводить к завершению X. Вы не будете выходить из Linux, только из X. Во многих дистрибутивах на уровне 3 загружается текстовая консоль. В Red Hat, Fedora, Mandrake и SuSE на уровне 5 загружается графическая программа входа в систему. В Slackware это делается на уровне 4. Возможно, пользователям Debian придется предпринять дополнительные действия, потому что в Debian уровни 2-5 идентичны. Настройка уровней выполнения в Debian рассматривается в разделе 7.6.
Комментарий Другие способы завершения сеансов X лучше подходят для «зависания» X. Любой пользователь может ввести команду «xkill» нажатием клавиш Ctrl+Alt+ +Backspace. В графических программах входа в систему (xdm, kdm или gdm) пользователь root может прервать работу программы. Это автоматически прервет работу всех пользователей: # /etc/init.d/gdm stop
См. также Раздел «Введение» настоящей главы; раздел 7.3; раздел 7.6.
102
Глава 7. Запуск и завершение работы Linux
7.5. Управление уровнями выполнения в Debian Проблема Требуется выбрать службы, запускающиеся при загрузке системы Debian, на каждом уровне выполнения. При установке новых служб (таких, как Apache, Exim или OpenSSH) Debian настраивает их на запуск при загрузке. Но пока тестирование еще не завершено, вы предпочитаете запускать и останавливать их вручную. А может быть, во время тестирования на разных уровнях должны стартовать разные службы.
Решение Воспользуйтесь командой update-rc.d. В следующем примере на уровне 5 добавляется новая служба KDE Display Manager. Kdm — имя запускаемого файла в /etc/init.d. Список уровней выполнения должен завершаться точкой: # update-rc.d kdm start 99 5 . stop 01 0 1 2 3 4 6 . Следующая команда удаляет службу на всех уровнях выполнения. Удаление не может быть избирательным; удаляется либо всех, либо ничего. # update-rc.d -f kdm remove
Изменение уровня выполнения для существующей службы производится в два этапа: сначала удалите службу, а затем добавьте ее на нужных уровнях. Обязательно создайте записи для всех служб на всех уровнях, как для запуска, так и для остановки.
Комментарий Помните, что update-rc.d работает с именами сценариев в /etc/init.d. Для тестирования команд update-rc.d используется ключ -п: # update-rc.d -f -n kdm remove
При необходимости можно удалить сценарии из init.d при помощи ключа remove: # update-rc.d --purge kdm remove
Но обычно лучше оставить их на случай, если они понадобятся в будущем.
См. также update-rc.d(8).
7.6. Создание уровней выполнения с текстовым и графическим входом в Debian Проблема В Debian загружается графическая программа входа в систему. Вы хотите, чтобы на уровне 3 загружалась текстовая консоль, а на уровне 5 — графическая программа.
7.6. Создание уровней выполнения с текстовым и графическим входом в Debian
103
Решение Сначала узнайте, какой экранный менеджер используется в вашей системе, после чего вы добавьте или удалите его на соответствующих уровнях. Проверка выполняется так: $ ps ах | grep dm 537 ? S 544 ? S< lib/kdm/A:O-PbCldj
0:00 /usr/bin/kdm 0:10 /usr7XllR6/bin/X :0 -dpi 100 -nolisten tcp vt7 -auth /var/
В системе работает kdm, экранный менеджер К. Сначала удалите его на всех уровнях: # update-red -f kdm remove update-rc.d: /etc/init.d/kdm exists during r e d purge (continuing) Removing any system startup links for /etc/init.d/kdm ... /etc/rcO.d/KOlkdm /etc/rcl.d/KOlkdm /etc/rc2.d/S99kdm /etc/rc3.d/S99kdm /etc/rc4.d/S99kdm /etc/rc5.d/S99kdm /etc/rc6.d/K01kdm
Обеспечьте запуск kdm на 5 уровне и его остановку на остальных уровнях: # update-rc.d kdm start Adding system startup /etc/rcO.d/KOlkdm -> /etc/rcl.d/KOlkdm -> /etc/rc2.d/K01kdm -> /etc/rc3.d/K01kdm -> /etc/rc4.d/K01kdm -> /etc/rc5.d/K01kdm -> /etc/rc6.d/S99kdm ->
99 5 . stop 01 1 2 3 4 6 . for /etc/init.d/kdm ... ../init.d/kdm . ./init.d/kdm . ./init.d/kdm . ./init.d/kdm . ./init.d/kdm . ./init.d/kdm ../init.d/kdm
Очень важно, чтобы для каждого уровня существовала запись, которая бы явно запускала или останавливала каждую службу. Приоритет всегда состоит из двух цифр; 99 — наименьший приоритет. Наконец, отредактируйте файл /etc/inittab так, чтобы выбранный уровень использовался по умолчанию: # Уровень выполнения по умолчанию id:3:initdefault: Новый уровень вступает в силу после перезагрузки. Если закомментировать эту строку, вам будет предложено выбрать уровень выполнения во время загрузки.
Комментарий В Gnome используется экранный менеджер gdm, в X — xdm, а в KDE — kdm. Довольно часто встречаются системы, в которых установлены все три программы. Xdm обладает минимальной функциональностью; в сущности, программа всего лишь предоставляет графическое окно входа. И kdm, и gdm поддерживают ряд дополнительных возможностей входа и завершения работы, включая меню для выбора оконного менеджера.
104
Глава 7. Запуск и завершение работы Linux
L-M. Т Э Ю К 6 Update-rc.d(8); раздел 7.3; справочное руководство Debian (http://qref.sourceforge.net); раздел «Введение» настоящей главы.
7.7. Управление уровнями выполнения в Red Hat Проблема Если не потратить некоторое время на настройку конфигурации, Red Hat/Fedora обычно запускает множество всевозможных служб при загрузке. Если вы пошли по простому пути, вероятно, у вас в системе работает немало служб, которые бы вы предпочли закрыть. А может, вы предпочитаете запускать разные службы на разных уровнях выполнения с целью тестирования и настройки.
Решение Воспользуйтесь программой chkconfig. Пример настройки ssh: # chkconfig --level 2345 ssh on # chkconfig --level 016 ssh off
Вы должны выполнить обе операции — определить, на каких уровнях служба должна запускаться и на каких уровнях она работать не должна. «On» означает запуск, a «off» — отключение службы. Добавление новой службы на всех уровнях выполнения: # chkconfig --add ssh
Удаление службы на всех уровнях выполнения: # chkconfig --del ssh
Со службами xinetd дело обстоит несколько иначе, но для управления ими также используется chkconfig: # chkconfig ktalk on # chkconfig rsync off
Службы xinetd либо работают, либо нет; они не различаются по уровням. Вывод информации о состоянии всех служб на всех уровнях, включая службы xinetd: # cnkconfig - - l i s t
anacron O:off l:off 2:on syslog O:off l:off 2:on cups O:off l:off 2:on apmd O:off l:off 2:on xinetd based services: chargen-udp off rsync: off sgi-fam: on
3:on 3:on 3 :on 3:on
4 :on 4:on 4 :on 4 :on
5: on 5: on 5: on 5: on
6: Off 6: Off 6: off 6: Off
Вывод информации об отдельной службе: # chkconfig --list syslog syslog O:off l:off 2:on 3:on 4:on 5:on 6:off
7.8. Ручная настройка служб, запускаемых при загрузке
105
Комментарий Утилита chkconfig берет начальный приоритет и уровень выполнения из стартового сценария программы. Например, в файле /etc/rc.d/init.d/cups присутствует следующий фрагмент: # Информация Linux chkconfig # chkconfig 2345 90 10 Он означает, что chkconfig запускается на уровнях 2, 3, 4 и 5, с приоритетом 90 для запуска и приоритетом 10 для остановки. Конечно, вы можете изменить эти параметры по своему усмотрению. Либо отредактируйте исходный сценарий из init.d, либо просто переименуйте ссылки: # mv /etc/rc.d/rc3.d/S90cups /etc/rc.d/rc3.d/S45cups
См. также chkconfig(8); The Red Hat Customization Guide (http://www.redhat.com/docs/manuaLs/ linux/).
7.8. Ручная настройка служб, запускаемых при загрузке Проблема Требуется вручную настроить службы, запускаемые при загрузке системы. Возможно, вам не нравятся средства, входящие в ваш дистрибутив Linux, или вы работаете в минимальной системе, не содержащей вспомогательных программ, или считаете, что использование хитроумных средств вроде update-rc.d для управления уровнями выполнения не оправдано.
Решение Создайте ссылки в каталогах /rc*.d командой In. Удалите ссылки для тех служб, которые не будут использоваться. Например, ссылка для запуска CUPS на уровне 3 создается так: # In -s /etc/rc.d/init.d/cups /etc/rc.d/rc3.d/S90cups Повторите для каждого уровня выполнения. Не забудьте создать ссылки для отключения службы: # In -S /etc/rc.d/init.d/cups /etc/rc.d/rcO.d/KOlcups Приоритет задается в интервале 1-99. Наличие процессов с одинаковыми приоритетами не создает проблем; на практике чаще всего встречается приоритет 20. Обычно приоритеты не столь важны, но некоторые функции (например, фильтрация пакетов и ведение журналов) должны обладать приоритетами 1 -10 для раннего запуска и 80 и выше для позднего завершения. Также обратите внимание на последовательность запуска. Например, поддержка сети должна запускаться раньше служб, зависящих от работы сети.
106
Глава 7. Запуск и завершение работы Linux
Комментарий Этот способ настройки чуть более трудоемок, но ничего страшного не происходит — вы просто создаете «мягкие» ссылки. Помните, что для каждой запускаемой службы также необходимо создать записи, которые будут останавливать ее на всех уровнях выполнения, на которых она не должна работать. Кроме того, некоторые службы на уровнях 0, 1 и 6 «убивать» не следует, поскольку это важные системные службы, создаваемые Linux. Сохраните информацию о таких службах, прежде чем вносить какие-либо изменения: $ Is /etc/rcO.d /etc/rcl.d /etc/rc6.d > original-runlevels.txt На уровнях 2-5 можно делать все, что угодно, но будьте внимательны и не испортите другие уровни.
См. также 1п(1).
7.9. Ручная остановка и запуск служб Проблема Требуется запустить, остановить или перезапустить службу, но вам не хотелось бы делать эти изменения постоянными. Может быть, произошел сбой в работе сети, или «умер» веб-сервер, или вы изменили конфигурационный файл службы и хотите перезапустить ее, чтобы изменения вступили в силу. А может, вы тестируете новую службу и хотите запускать ее только тогда, когда потребуется.
Решение Запустите стартовый сценарий программы в init.d с соответствующими параметрами. Найдите сценарий, прочитайте его и просмотрите состав поддерживаемых параметров. Например, на практике часто выполняется операция перезапуска сетевой поддержки. В файле/etc/init.d/networking присутствует следующая команда: echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}" Подобная строка присутствует в каждом сценарии init. Нужную информацию также можно получить, запустив сценарий без аргументов: # /etc/init.d/networking Usage: /etc/init.d/networking (start|stop|restart|force-reload} Таким образом, остановка службы поддержки сети осуществляется командой § /etc/init.d/networking stop
Комментарий Для любой программы, имеющей стартовый сценарий, рекомендуется использовать сценарий вместо запуска двоичного файла программы, потому что в сцена-
7.10. Выключение компьютера или перезагрузка Linux
107
рии реализована обработка ошибок и проверка файлов, а также все необходимые условные проверки.
7.10. Выключение компьютера или перезагрузка Linux Проблема Только посмотрите, сколько существует способов выключения и перезагрузки: shutdown, halt, init 0, poweroff, Ctrl+Alt+Delete... Каким из них лучше пользоваться?
Решение Выбор не столь существенен; используйте тот способ, который вам больше подходит. Следующие команды выключения могут использоваться только привилегированным пользователем root: # shutdown -h now
или # poweroff
или #halt Выключение через шесть минут: # shutdown -h +6
Команда shutdown рассылает оповещения всем подключенным пользователям. Вы можете указать собственный текст: # shutdown -h +6 "Time to stop working and start partying." Консольные пользователи увидят следующее сообщение: Broadcast message from root (pts/6) Wed Aug 14 13:51:24 2003 Time to stop working and start partying. The system is going DOWN for system halt on 6 minutes!
Чтобы отменить выключение компьютера, выполните следующую команду с правами root: # shutdown -с Перезагрузка выполняется командой # shutdown -г now или # reboot
или нажатием Ctrl+Alt+Delete. Любой пользователь может перезагрузить компьютер, если только не отключить данную возможность в /etc/inittab (в разделе 7.11 рассказано, как запретить перезагрузку или предоставить разрешение конкретным пользователям). •
108
Глава 7. Запуск и завершение работы Linux
Комментарий Помните, что процесс выключения всегда должен быть контролируемым. Всем компьютерам, в том числе и машинам с системой Linux, приходится проделать немалый объем работы, чтобы питание можно было безопасно выключить. Система должна завершить работу служб, демонтировать файловые системы и сбросить буферы на диск. Команды shutdown, poweroff и halt выполняются только привилегированным пользователем root. Ограничение выглядит довольно глупо, потому что у любого оконного менеджера и среды настольной системы имеется собственное меню выключения, а любой пользователь, находящийся поблизости от компьютера, может нажать кнопку питания. Но такова жизнь, и с этим приходится смириться. Возможный выход — предоставить ограниченные привилегии для выполнения команд выключения командой sudo. Другое решение основано на создании специальной группы пользователей, которым разрешено выключение.
См. также shutdown(8), poweroff(8); раздел 8.20; раздел 8.21.
7.11. Запрет или ограничение доступа к Ctrl+Alt+Delete Проблема Всем известно, что комбинация клавиш Ctrl+Alt+ Delete перезагружает компьютер. Но хотите ли вы этого? С точки зрения безопасности машина становится уязвимой во время перезагрузки, тогда как перезагрузка может быть выполнена любым пользователем, имеющим доступ к клавиатуре. Исходя из этих соображений, возможно, вы предпочтете либо полностью запретить перезагрузку компьютера клавишами Ctrl+Alt+ Delete, либо ограничить ее некоторыми пользователями.
Решение Чтобы полностью запретить перезагрузку по Ctrl+Alt+Delete, закомментируйте следующую строку в /etc/inittab: # са:12345:Ctrlaltdel :/sbin/shutdown -tl -r now Чтобы разрешить ее отдельным пользователям, включите в командную строку ключ -а: са:12345:Ctrlaltdel:/sbin/shutdown -tl -a -r now Затем перечислите пользователей, которым разрешено выполнять перезагрузку, в файле /etc/shutdown.allow.
Комментарий Если файл /etc/shutdown.allow не существует, создайте его.
7.12. Автоматическое выключение компьютера
109
См. также shutdown(8).
7.12. Автоматическое выключение компьютера Проблема Пользователи по беспечности забывают выключать свои компьютеры на ночь. А может быть, вы думаете, что ваш компьютер должен выключаться ночью сам по себе, чтобы вы могли просто уйти по своим делам и не беспокоиться о нем.
Решение Благодаря сгоп задача решается элементарно просто. Включите следующий фрагмент в /etc/crontab, чтобы компьютер автоматически выключался каждую ночь в 23:00: # m h dom mon dow user command 00 23 * * * root /sbin/shutdown -h now
Комментарий Файл /etc/crontab идеально подходит для планировки простых заданий. Обратите внимание: в файле имеется поле имени, поэтому любой пользователь может создавать в нем свои записи. Тем не менее редактирование файла/etc/crontab разрешается только пользователю root. Другой способ основан на использовании команды crontab: ф crontab -u root -e Команда открывает файл crontab для пользователя root; отредактируйте и сохраните его. Не пытайтесь задать имя файла — в процессе редактирования файл является временным, а его имя автоматически задается crontab при сохранении. Файл сохраняется в каталоге /var/spool/cron/crontabs.
См. также cron(8), crontab(l), crontab(5). -
•
Глава 8
Управление пол ьзователя м и и группами 8.1. Введение В системе Linux как «живым» пользователям, так и системным процессам назначаются учетные записи (accounts), необходимые для управления привилегиями и правилами доступа. Запомните два важнейших принципа безопасности Linux. 1. Всегда используйте минимальный уровень привилегий, необходимый для выполнения работы. 2. Используйте сильные пароли. Соблюдение этих двух принципов избавит вас от многочисленных огорчений и неудач. В Linux входит набор утилит для выполнения операций с пользователями и группами: useradd, groupadd, userdel, groupdel, usermod, groupmod, passwd, chfn и chsh. Они входят в семейство «Shadow Suite», разработанное Джулианом Фрэнсисом Хо (Julianne Frances Haugh) для улучшения защиты паролей и упрощения операций управления учетными записями. Когда-то все файлы приходилось редактировать по отдельности, а шифрованные пароли хранились в файле /etc/passwd. Но поскольку файл /etc/passwd должен оставаться доступным для чтения, хранение паролей в нем, пусть даже в зашифрованном виде, чревато потенциальными неприятностями. Скопировав этот файл, любой желающий теоретически сможет вычислить пароли. Перемещение зашифрованных паролей в файл /etc/shadow, доступный только для привилегированного пользователя root, создает полезный дополнительный уровень защиты. Команда useradd по-разному работает в разных системах. Традиционно она включала всех новых пользователей в одну группу users(lOO). Все домашние каталоги становились общедоступными, потому что все пользователи принадлежали к одной группе. В Red Hat эта схема была заменена схемой «User Privacy Group». Команда useradd в Red Hat создает для каждого нового пользователя приватную группу, идентификатор которой (GID) совпадает с идентификатором пользователя (UID). Разумеется, разные пользователи обладают разными потребностями; некоторые из них могут предпочесть, чтобы их каталоги были открытыми. Фун-
8.2. Отделение обычных пользователей от системных
111
даментальный принцип безопасности гласит: «сначала все запретить, потом разрешать по мере необходимости». Adduser и addgroup, сценарные Perl-обертки для команд useradd и groupadd, появились относительно недавно. Эти сценарии полностью руководят вашими действиями при создании нового пользователя. Они очень удобны для создания отдельных учетных записей, но не для серийных (batch) операций (разве что если вы самостоятельно внесете изменения в сценарии adduser и addgroup). В разделе 8.17 приведен сценарий для серийного создания новых пользователей и изменения паролей.
8.2. Отделение обычных пользователей от системных П DO6/16МЭ В любой системе Linux, наряду с учетными записями обычных пользователей, существуют системные учетные записи (root, uucp, daemon и т. д.). В файле /etc/ passwd эти две категории не отделяются друг от друга. Как отделить учетные записи «живых» пользователей от системных учетных записей?
Решение Воспользуйтесь схемой нумерации идентификаторов пользователей в Linux (UID) и возможностью сортировки по полям или столбцам в awk. Пример для системы на базе Debian или Slackware: $ awk -F: '$3 > 999 { print $0}' /etc/passwd nobody:x:65534:65534:nobody:/nonexi stent:/bi n/sh carl a:x:1000:1000::/home/carl a:/bin/bash foober:x:1001:1001::/home/test:/bi n/false bitchkat:x:1002:1002::/home/test2/:bin/bash Colby:x:1003:1003::/home/test3:/bin/bash
Отображение подмножества записей: $ awk -F: '($3 >- 1000) && ($3 <= 1005) { print $0}' /etc/passwd Для систем Red Hat и SuSE: * awk -F: '$3 > 499 { print $0}' /etc/passwd Алфавитная сортировка результата: $ awk -F: '$3 > 499 { print $0}' /etc/passwd | sort
Описанный прием особенно удобен тогда, когда схему нумерации UID в группах удается спроектировать заранее. Например: О Trainers 1000-1100; О Coaches 1101-1200; О Players 1200-2000. Если вы будете придерживаться подобной схемы, в вашем распоряжении появится простой инструмент для сортировки пользователей и их последующего разбиения на группы.
112
Глава 8. Управление пользователями и группами
Комментарий Схемы нумерации (вроде представленного ранее примера «Trainers/Coaches/ Players») хорошо подходят для небольшой и относительно статичной пользовательской базы. В больших организациях с частыми изменениями они приносят больше вреда, чем пользы. В таких ситуациях лучше направить усилия на правильное распределение пользователей по группам и своевременное внесение изменений. Как всегда, между дистрибутивами существуют мелкие, но любопытные различия. Коды UID и GID во всех версиях Linux лежат в интервале от 0 до 65534. Debian: о 0-99 — системные учетные записи; О 100-999 — установленные пользователем программы и демоны (Postfix, Fetchmail, gdm, dictd и т. д.); О 1000-29999 — учетные записи обычных пользователей; О 30000-65533 — согласно документации Debian, коды зарезервированы, но при желании вы можете их использовать; О 65534 — пользователь nobody, учетная запись без прав и разрешений. Red Hat: О 0-499 — коды зарезервированы для системного использования; О 500-60000 — обычные пользователи; О 65534 — пользователь nobody, учетная запись без прав и разрешений. В других дистрибутивах используются аналогичные схемы нумерации. Экспериментируйте с диапазонами, зарезервированными для учетных записей обычных пользователей, но не трогайте системные диапазоны.
См. также awk(l); раздел 8.17; Debian Policy Manual, глава 9.2.2 (http://www.debian.org/doc/ debian-poLicy/); Red Hat Linux Reference Pocket Guide (http://www.redhat.com/docs/ manuals/Linux/).
8.3. Определение кодов UID и GID Проблема Требуется быстро узнать код UID пользователя и выяснить, к каким группам он принадлежит.
Решение Воспользуйтесь командой id: $ id carl a uid-lOOO(carla) gid=1000(carla)
8.4. Создание учетной записи пользователя командой useradd
113
groups=1000(carla).20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video), 105(windows),432(usb).lOOl(cdrecording)
Комментарий Ключи команды id: О -u — вывод только кодов UID; О -g — вывод только кодов GID; О -gn — вывод имени первичной группы пользователя вместо GID.
См. также
8.4. Создание учетной записи пользователя командой useradd Проблема Требуется добавить новых пользователей в систему Linux.
Решение Воспользуйтесь командой useradd -m для создания имени пользователя, его домашнего каталога и других переменных окружения; затем назначьте пароль командой passwd -e. До создания пароля учетная запись остается неактивной. Далее приводится простейший вариант вызова. С флагом -гп команда создает домашний каталог и копирует в него файлы из /etc/skel: # useradd -m имя пользователя
Как правило, в команду также включается полное имя пользователя с флагом -с (Comment, то есть «комментарий»). Поставьте четыре запятые после имени пользователя, чтобы остальные поля комментария (рабочий телефон и т. д.) остались пустыми. # useradd -m -с Grace Hopper ghopper Имяпользователя должно быть уникальным. Теперь выполните команду passwd -e. Флаг -е означает, что пароль становится недействительным после первого входа, что заставляет пользователя сменить его: # passwd -e ghopper
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Окружение пользователя формируется на основании стандартного содержимого/etc/default/useradd и/etc/skel. Конфигурация useradd по умолчанию отображается командой # useradd -D
114
Глава 8. Управление пользователями и группами
Любые значения по умолчанию могут переопределяться в командной строке — например, UID и командный процессор: # useradd -u 1500 -s tcsh ghopper Также существует возможность расширения стандартной конфигурации — например, включить пользователя в дополнительные группы: # useradd -G users,cdrecord.dialout ghopper
Комментарий Useradd, в отличие от своего родственника adduser, прекрасно работает в сценариях (например, в сценарии mass_useradd из раздела 8.17). Поля комментария также известны под названием данных GECOS. Данные GECOS состоят из пяти полей, разделенных запятыми. Если вы собираетесь использовать поле комментария, включите все четыре запятые, даже если значения соответствующих атрибутов не указываются. В долгосрочной перспективе это окупится, особенно при выполнении серийных операций и при поиске. Традиционно в данные GECOS входит полное имя, номер комнаты, рабочий телефон, домашний телефон и прочее (произвольная информация). Полное имя используется многими внешними программами — в частности, почтовыми серверами, однако другие поля можно использовать так, как вы сочтете нужным. Например, они позволяют организовать произвольное деление пользователей на группы и их сортировку (см. раздел 8.19). GECOS — пыльный пережиток прошлого, оставшийся с очень древних времен; сокращение означает «General Electric Compliant Operating System». За полной информацией обращайтесь к Файлу жаргона.
См. также useradd(8); Файл жаргона (http://www.catb.org/~esr/jargon/).
8.5. Создание учетной записи пользователя командой adduser Проблема Вы предпочитаете использовать adduser вместо useradd, потому что эта команда помогает ввести все данные конфигурации нового пользователя — пароль, данные GECOS и т. д.
Решение Введите команду adduser имя_пользователя и введите запрашиваемые данные: # adduser anitab Adding user anitab... Adding new group anitab (1008). Adding new user anitab (1008) with group anitab.
8.6. Изменение учетной записи пользователя
115
Creating new home directory /home/anitab. Copying files from /etc/skel Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for anitab Enter the new value, or press ENTER for the default Full name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct [y/n] у В командной строке add user можно указать код UID, переопределяя значение по умолчанию: # adduser --uid 1500 anitab
Стандартная конфигурация adduser задается в файле /etc/adduser.conf.
Комментарий Полное имя является единственным важным атрибутом информации о пользователе. Оно необходимо любой внешней программе, работающей с /etc/passwd, — например, почтовому серверу. И хотите — верьте, хотите — нет, но в большинстве версий Linux по-прежнему продолжает существовать finger: $ finger anitab Login: anitab Name: Directory: /home/anitab Shell: /bin/bash On since Sun May 30 08:46 (PDT) on ttyl 10 hours 55 minutes idle (messages off) No ma i1. No plan. Phone 555-5555 Office Fooo Другие поля могут содержать произвольную информацию. В частности, они могут использоваться для хранения заметок или группировки. Пользователь может сменить свой номер комнаты и рабочий телефон командой chfn, но изменить полное имя и поле «прочее» ему не удастся.
См. также adduser(8), adduser.conf(5), finger(l).
8.6. Изменение учетной записи пользователя Проблема Требуется внести изменения в существующую учетную запись — например, сменить имя пользователя или UID, обновить данные GECOS или домашний каталог.
116
Глава 8. Управление пользователями и группами
Решение Воспользуйтесь командами usermod и chfn. Изменять можно любые атрибуты, включая имя пользователя и код UID. Чтобы сменить имя, сначала укажите новое имя, а затем старое: # usermod -I aborg anitab
Следующая команда изменяет UID (в следующем примере исходное значение 1050 меняется на 1200) без изменения имени пользователя. Сначала указывается новый код UID, затем имя: # usermod -u 1200 anitab
Принадлежность пользователя к группам не изменяется. Все файлы в домашнем каталоге пользователя автоматически обновляются новым кодом U1D. Тем не менее вам придется вручную найти и изменить все файлы за пределами домашнего каталога (crontab, почтовые каталоги, временные файлы /tmp и файлы в общих каталогах). Для поиска файлов можно воспользоваться командой find с указанием исходного кода UID, если вы хотите просмотреть список файлов перед внесением изменений: # find / -uid 1050 /usr/src/include/lber.h /usr/src/include/1 dap.h /usr/src/include/ldbm.h
Смена владельца файлов осуществляется командой chown: # chown 1200 /usr/scr/include/lber.h
Последовательная смена владельца для каждого файла — занятие довольно утомительное. Команды chown и find могут выполнить эту работу за вас: # find / -uid 1050 -exec chown -v 1200 {} \;
changed owner of '/usr/src/include/lber.h' to 1200 changed owner of '/usr/src/include/ldap.h' to 1200 changed owner of '/usr/src/include/ldbm.h' to 1200
Следующая команда перемещает домашний каталог пользователя со всем содержимым. Если новый каталог не существует, он автоматически создается. Сначала указывается новый каталог, а затем имя пользователя. Обязательно используйте флаги -d и -т: # usermod -d /serverl/home/aborg/ -m aborg Изменение данных GECOS: # chfn aborg
Пользователь может передать при вызове chfn данные GECOS по своему усмотрению. Исключение составляют два поля: полное имя и «прочее». Содержимое этих полей может редактироваться только суперпользователем.
Комментарий Постарайтесь обойтись без изменения имени пользователя и кода UID, поскольку такое изменение будет иметь общесистемные последствия. Если изменение все же неизбежно, не забудьте отыскать все файлы, принадлежащие пользователю, смените имя в домашнем каталоге пользователя и обновите данные о принадлежности к группам.
8.7. Удаление пользователя
117
Если заменить ключ -exec на -ok, команда find будет запрашивать подтверждение каждого изменения: # find / -uid 1050 -ok chown -v 1200 {} \: Трудно переоценить удобство такого применения find. Ключ -exec или -ok приказывает find выполнить следующую команду. Последовательность {} заменяется именем текущего файла. Точка с запятой указывает, где завершается команда chown, а символ \ «экранирует» точку с запятой, чтобы она не была обработана командным процессором.
См. также usermod(8), chfn(l); Файл жаргона (http://www.catb.org/~esr/jargon/).
8.7. Удаление пользователя Проблема Требуется удалить из системы учетную запись пользователя и найти все файлы, принадлежащие этому пользователю.
Решение Учетная запись удаляется командой userdeL. Поиск файлов, принадлежащих пользователю, осуществляется командой find. Удаление учетной записи: # userdel aborg
Чтобы команда userdel сработала, пользователь не может находиться в системе, и под его именем не должны быть запущены процессы. Команда userdel удаляет данные пользователя из всех системных файлов (/ etc/passwd, /etc/shadow, /etc/group), но не трогает файлы, принадлежащие этому пользователю. Чтобы удалить домашний каталог пользователя и почтовый ящик, добавьте флаг -г: # userdel -г aborg
Другие файлы (такие, как crontab и файлы данных вне домашнего каталога) приходится искать отдельно: # find / -uid 1200
Комментарий Правила удаления учетной записи — дело тонкое. Если вы работаете в своей домашней системе, делайте, что хотите. В коммерческих системах заранее изучите политику своей компании. Всегда полезно сначала заблокировать учетную запись работника и создать резервную копию принадлежащих ему файлов.
См. также userdeL(8), find(l); раздел 8.9.
118
Глава 8. Управление пользователями и группами
8.8. Простое завершение процессов Проблема Требуется удалить учетную запись пользователя из системы, но команда userdel сообщает, что в системе выполняются некоторые процессы удаляемого пользователя. Вам хотелось бы найти и остановить все процессы этого пользователя одной командой.
Решение Воспользуйтесь программой slay: # slay foober slay: -KILL is kicking foober's butt! slay: Whoa. I have the power supreme.
Программа slay находит и уничтожает все процессы указанного пользователя, благодаря чему вам не приходится искать и завершать их самостоятельно.
Комментарий Традиционный метод поиска процессов, принадлежащих пользователю, основан на использовании команды ps: $ ps U 1007
или $ ps U foober 3936 ? S 0:00 xchat 3987 ? S 0:00 /usr/lib/galeon-bin 4209 ? S 0:00 kdeinit: k i o _ f i l e f i l e /tmp/ksocket-carla/ klauncherkF21rc.siave-
После этого процессы приходится убивать по одному: # kill 3936 # k i l l 3987 # k i l l 4209
См. также slay(l), kill(l).
8.9. Блокировка учетных записей Проблема Требуется заблокировать учетную запись и временно запретить пользователю вход в систему, но без удаления учетной записи.
Решение Чтобы временно деактивировать учетную запись, заблокируйте пароль пользователя ключом -I (lock):
8.10. Управление паролями
119
# passwd -I aborg. Password changed.
Следующая команда снимает блокировку с учетной записи: # passwd -u aborg
Комментарий Еще один способ заблокировать учетную запись — вставить восклицательный знак в начало поля пароля в файле /etc/shadow: foobar:!$l$wiD1Qr34$mitGZA76MSYCY04AHIYl:12466:0:99999:7:: :
Также можно заменить х в поле пароля в файле /etc/passwd звездочкой (*): foober:*:1025:1025:Foober Smith..,:/home/foober:/bin/bash
Наконец, можно лишить пользователя доступа к командному процессору: # usermod -s /bin/false foober
И все же лучше всего придерживаться варианта с passwd -l и -и.
См. также passwd(l), passwd(5).
8.10. Управление паролями Проблема Требуется сбросить пароль, установить срок его действия или ограничить количество неудачных попыток входа. Сброс решает вечную проблему забытого пароля. Многие администраторы Linux считают, что срок действия пароля нужно ограничивать, поскольку это заставляет пользователей периодически менять пароль.
Решение Операции назначения и настройки паролей осуществляются командой passwd. Сброс или изменение пароля: # passwd aborg
Пользователь также может сменить свой пароль: aborg(s>server04:-$ passwd Следующая команда ограничивает срок действия пароля aborg шестью месяцами, с выдачей предупреждения за пять дней: # passwd -х 180 -w 5 -1 I aborg
Чтобы просмотреть пароли пользователя, воспользуйтесь командой # passwd -S option
aborg P 02/18/2004 0 10 5 1
Комментарий Пароль может содержать цифры, буквы и знаки препинания, при этом они чувствительны к регистру символов. Пробелы и функциональные клавиши не
120
Глава 8. Управление пользователями и группами
допускаются. Рекомендуется использовать сильные пароли, то есть не выбирать в качестве пароля имена, слова из словаря, дни рождения или адреса. Пароли рекомендуется записывать и хранить в надежном месте. К сожалению, многие пользователи выбирают слабые, легко угадываемые пароли или хранят их в небезопасных местах (например, на записке, прикрепленной к монитору). Пароли Linux не восстанавливаются. При потере пароля следует обратиться к суперпользователю для получения нового пароля.
См. также passwd(l), passwd(5).
8.11. Создание групп командой groupadd Проблема Требуется создать новую пользовательскую или системную группу. Все устанавливаемые программы-серверы должны иметь свои учетные записи пользователей и групп.
Решение Воспользуйтесь командой groupadd. Команда создает новую группу по системным значениям, настроенным в /etc/ default/useradd и /etc/skeL/: # groupadd newgroup
Системная группа создается с ключом -г: # groupadd -r newgroup
Ключ -г является специфическим для Red Hat. Если в вашей версии groupadd он не поддерживается, укажите следующий доступный номер системной группы: # groupadd -g 127 newgroup
Следующий доступный номер группы можно узнать из файла /etc/group.
Комментарий Рекомендуется использовать логически последовательную схему нумерации групп. С точки зрения Linux это несущественно, но зато такая схема избавит вас от многих хлопот. В Red Hat номера системных групп лежат в диапазоне 0-499, а в Debian — в диапазоне 100-999. За дополнительной информацией о схемах нумерации обращайтесь к разделу «Комментарии» в разделе 8.2.
См. также groupadd(8).
8.13. Создание системного пользователя
121
8.12. Удаление групп командой groupdel Проблема Требуется удалить группу или группы, но при этом проследить за тем, чтобы в системе не осталось «бесхозных» файлов или пользователей.
Решение Сначала, если потребуется, переназначьте номера групп редактированием файла /etc/grou p. Просто скопируйте данные пользователей и вставьте их в другую группу. Затем удалите группу командой groupdel, после чего воспользуйтесь командами find и chgrp для поиска и передачи права владения файлами другой группе. Удаление группы: # groupdel имя_группы
Удаление группы считается хлопотной операцией, потому что не существует утилит для автоматического переноса/удаления файлов или пользователей, входящих в группу. Вам придется самостоятельно найти их и изменить коды GID вручную: # find / -gid 750
/usr/src/i nclude/1ber.h /usr/src/include/ldap.h /usr/src/include/ldbm.h
Изменения можно вносить последовательно: # chgrp 800 /usr/src/include/lber.h
А можно выполнить замену одновременно посредством совместного использования find и chgrp: # find / -gid 750 -exec chgrp -v 800 {} \;
См. также groupdel(8), find(l), chgrp(l); раздел 8.6.
8.13. Создание системного пользователя Проблема Вы хотите знать, как создать системного пользователя для таких программ, как Postfix, Apache или Squid. Для таких программ рекомендуется создать собственные учетные записи пользователей вместо того, чтобы на скорую руку «свалить» их на универсального пользователя nobody.
Решение Задача может быть решена как командой adduser, так и useradd. С adduser это делается примерно так: # adduser --system --no-create-home --group squid Adding system user squid...
122
Глава 8. Управление пользователями и группами
Adding new group squid (109). Adding new user squid (109) with group squid Not creating home directory
Проверьте результат: # cat /etc/passwd | grep squid squid:x:109:109::/home/squid:/bin/false Хотя подстрока /home/squid присутствует, домашний каталог не создается. А вот как то же самое делается в useradd: # useradd -d /dev/nuil -g squid -s /bin/false squid
Комментарий Многие демоны и процессы, которым необходима системная учетная запись, по умолчанию используют nobody, но все больше приложений требует создания собственной уникальной учетной записи. Старайтесь использовать уникальную учетную запись там, где это возможно, потому что это повышает уровень безопасности системы. Учетная запись nobody чаще всего становится объектом хакерских атак, поэтому собирать разнообразные процессы и демонов в единую цель для атаки не стоит.
См. также adduser(8), adduser.conf(5), useradd(8).
8.14. Создание системных групп командой addgroup Проблема Требуется создать несколько новых системных групп с использованием сценария addgroup.
Решение Создание системных групп сценарием addgroup происходит следующим образом: # addgroup - - system группа В командной строке можно передать код GID, переопределяя значение по умолчанию. Не забудьте придерживаться схемы нумерации групп, принятой в вашем дистрибутиве Linux (или в вашей организации): # addgroup --system --gid 300 группе
См. также addgroup(8); раздел 8.11.
8.16. Проверка целостности файлов паролей
123
8.15. Изменение принадлежности к группам П роолбмэ Требуется включить пользователей в некоторую группу или исключить их из этой группы.
решение Отредактируйте файл /etc/groups вручную. Просто скопируйте и вставьте записи; это самый быстрый способ. г
1
Комментарий Для решения задачи также можно воспользоваться командами add user и usermod, но будьте осторожны: adduser позволяет за один вызов включить пользователя только в одну группу, а команда usermod, позволяющая перечислить несколько групп, стирает прежние данные о принадлежности пользователя к группам.
См. также adduser(8), usermod(8).
8.16. Проверка целостности файлов паролей Проблема Файлы паролей (/etc/group, /etc/passwd, /etc/shadow и /etc/gshadow) интенсивно используются в процессе администрирования, и вам нужно какое-нибудь средство для проверки правильности их синтаксиса. Было бы неприятно узнать о допущенной ошибке (например, о том, что вы забыли назначить кому-то пароль) после того, как ваша система будет взломана!
Решение Файлы /etc/passwd и /etc/shadow проверяются командой pwck, а файлы /etc/group и /etc/gshadow — командой grpek: # pwck # grpek
Если команда завершается без выдачи сообщений, значит, ошибки не обнаружены. В противном случае команда выводит перечень ошибок. Ошибки нужно будет исправить, иначе работа программы завершится. Чтобы ограничиться просмотром всех ошибок, запустите программу в режиме «только чтения»: # pwck -r
# grpek -г
124
Глава 8. Управление пользователями и группами
Комментарий Программа pwck проверяет логическую целостность файлов /etc/passwd и /etc/ shadow. Она последовательно анализирует записи и проверяет, что каждая запись содержит: О правильное количество полей; О уникальное имя пользователя; О действительные идентификаторы пользователя и группы; О действительную первичную группу; О действительный домашний каталог; О действительный командный процессор. Pwck сообщает обо всех записях, не имеющих пароля. Мне очень нравится формулировка в man-странице: «Проверки правильности количества полей и уникальности имени пользователя являются фатальными». Нечего сказать, хорошая реклама! Но не волнуйтесь — вы в полной безопасности, и вызов pwck ничему не повредит. Когда pwck обнаруживает ошибку, вы можете либо удалить учетную запись, либо проигнорировать ее. Во втором случае pwck прекращает работу и не проверяет новые строки (за одним исключением: обнаружив повторяющееся имя, программа продолжит проверку даже в том случае, если вы не удалите учетную запись). Программа grpck анализирует файлы/etc/group и/etc/gshadow и проверяет, что каждая запись содержит: О правильное количество полей; О уникальное имя группы; О действительный список членов и администраторов.
См. также pwck(8), grpck(8).
8.17. Серийное добавление новых пользователей Проблема Требуется добавить сразу несколько учетных записей (вместо того, чтобы вводить их по одной).
Решение Воспользуйтесь сценарием mass_useradd. Это сценарий командного процессора, поэтому он должен работать практически везде. Вам также понадобится сценарий
8.17. Серийное добавление новых пользователей
125
mass_passwd (листинг 8.2). Сохраните эти два сценария в одном каталоге. Также следует установить утилиту pwgen, генерирующую пароли. Создайте список имен и паролей в формате: имя_пользователя: имя фамилия
Также можно добавить дополнительные данные GECOS: dawns:Dawn Marie Schroder,,123-4567,trainers
Затем запустите сценарий mass_useradd (листинг 8.1). Сценарий создает записи в /etc/passwd, /etc/group и /etc/shadow, домашние каталоги, персональные группы и пароли, которые становятся недействительными после первого использования. Следующая команда приказывает mass_useradd использовать список новых пользователей из файла newusers с заменой/созданием выходного файла newLogins.txt: sh mass_useradd < newusers > newlogins.txt Присоединение новых имен и паролей к файлу newlogins.txt: sh massuseradd < newusers »
newlogins.txt
Помимо выходного файла, который представляет собой обычный список, mass_passwd создает для каждого пользователя отдельный файл с инструкциями. Инструкции распечатываются и раздаются пользователям. Эти файлы, а также файл журнала хранятся в домашнем каталоге пользователя, запустившего сценарий (обычно root): # Is /root/mass passwds dawns.passwd.txt nikitah.passwd.txt mass_passwd.log rubst.passwd.txt
Комментарий В сценариях используются стандартные средства Shadow Suite, поэтому они легко настраиваются посредством регулировки параметров утилит, задействованных в их работе. Файл выходных данных выглядит так: dawns shabaefi 1002 nikitah gohbinga 1003 rubst ahtoohaa 1004 В файл /etc/passwd добавляются записи вида dawns:x:1002:1002:Dawn Mari Schroder,.123-4567,trainers:/home/dawns:/bin/bash nikitah:x:1003:1003:Nikita Horse..123-4567,equine:/home/nikitah:/bin/bash rubst:x:1004:1004:Rubs The Cat.101,,234-5678.,test:/home/rubst:/bin/bash
Листинг 8 . 1 . Программа mass_useradd #!/bin/sh ## # # ##
Использование: # sh mass_useradd < inputfile » new-passwords.txt
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:$PATH
# Чтение строки входных данных. # Формат входного файла:
продолжение #
Глава 8. Управление пользователями и группами
126
Листинг 8.1 {продолжение)
# имя_пользователя : имя фамилия # Чтобы в качестве разделителя использовалась запятая, замените # IFS=":$IFS" на IFS=",$IFS" while IFS=":$IFS" read username realname; do # Сначала удаляем пустые строки и комментарии case "Susername" in '' | \#*) continue ;: esac # Чтение /etc/passwd и /etc/group и вычисление # следующих свободных значений UID and GID. # Программа начинает с {id=1000}, измените для своей системы id=$({ getent passwd: getent group; } | cut -f3 -d: | sort -un awk 'BEGIN { id=1000 } $1 == id { id++ } $1 > id { print id: exit }') # # # #
Добавление новых пользователей в /etc/group и /etc/passwd. Создание домашних каталогов командой chmod 700 Все параметры groupadd, useradd и chmod можно изменить в соответствии со спецификой системы. groupadd -g $id Susername useradd -m -c "$realname" -g $username -u $id Susername chmod 700 /home/$username
# # # #
Назначение пароля. Для этой цели вызывается другой сценарий mass_passwd. который может использоваться независимо. Сценарий mass_passwd выводит имя пользователя, пароль и идентификатор пользователя. $(dirname $0)/lmass_passwd -M Susername
done Листинг 8.2. Программа mass_passwd
#! /bin/sh # Каталог для сохранения файлов "username.passwd.txt" # Если каталог не существует, он будет создан. text_file_dir=$HOME/mass_passwds log_file=mass_passwd.log ## Минимальный идентификатор для "обычных" пользователей min_uid=1000 # Длина генерируемых паролей pass_len=8 ## Срок действия паролей (в днях) pass_expire=90 и и и а я а и и и и и и и и а и и и а, и и и л и и и и и и и и ТГТГТГТГ 7ГТГТГТГТГ7Г7Г7Г7Г7Г7Г7Г7Г7Г7Г7Г7ГТГ7ГТГ7ГПТГТГ7Г 7Г 7Г
# При желании отредактируйте текст между двумя строками
8.17. Серийное добавление новых пользователей
127
# Получение имени программы (скорее всего. "mass_passwd") prog=${0##*/} usage О { echo echo echo echo echo echo
"usage: " " " -g " -a " -v
echo " exit 0
-n
$prog [-v] [-n] username ..." $prog [-v] [-n] [-g] groupname ..." $prog [-v] [-n] [-a]" change passwords of everyone in a group" change everyone's password" verbose" don't do i t . j u s t simulate (implies - v ) "
short_usage 0 { echo >&2 "usage: $prog [ - v ] [ - g ] [-a] name..." echo >&2 " $prog -h f o r help" exit 1
# echo something, but only i f i n verbose mode vecho О { t e s t -n "Sverbose" && echo "$(?" }
# Построение случайного пароля. ж
# Если программа pwgen доступна, используем ее -- она для этого # предназначена и хорошо работает. # # Если программа недоступна, читаем /dev/urandom и отфильтровываем все # символы, не являющиеся алфавитно-цифровыми, пока количество символов # не окажется достаточным для пароля. Символы в "tr -d" определяют # ASCII-коды (в восьмеричной записи) диапазонов удаляемых символов. # # Подобное использование /dev/urandom крайне неэффективно. # но это несущественно, randompass О { pwgen $pass_len 1 2>&- || tr -d '[\000-\057][\072-\100][\133-\140][\173-\377]' < /dev/urandom | dd bs=$pass_len count=l 2>&} # Функция интерпретирует режим (пользователи / группы / серийная замена) # и возвращает список имен пользователей get_users О { if [ -n "$all_mode" ]; then getent passwd | awk -F: '{if ($3 >= '$min_uid') (print $1}}' return if [ -z "$group_mode" ]: then echo "$@" return while [ -n "$1" ] : do
-, продолжение с
Глава 8. Управление пользователями и группами
128
Листинг 8.2 {продолжение) g_ent=$(getent group "$1" 2>&-) i f [ -z "$g_ent" ] : then echo >&2 "warning: $1: group not found" continue fi members=${g_ent##*:} gid=${g_ents;:*} gid=${gid##*:} echo "$members" | tr '.' ' ' getent passwd | awk -F: '{if ($4 == '$gid') { print $1 } }' shift done
# Основной код group_mode=; verbose^; all_mode=: simulate»: eol = ; while [ -z "$eol" ]: do case "$1" in -g) group_mode=l: shift :: -v) verbose=l: shift ;: -a) all_mode=l: shift :: -n) simulate=true: verbose=l: shift :; -M) mass_out=l; shift :: # we're called from massjjseradd -h | -? | --help) usage ;: --) eol-1; shift :: -*) short_usage :; *) eol=l :: esac done # Настройка безопасного окружения и каталога для текстовых файлов. # предназначенных для вывода на печать. PATH=/usr/sbin:/usr/bin:$PATH umask 077 mkdi г -р $text_file_dir cd $text_file_dir processed=0 for u in $(get_users "$@"); do vecho -n "generating password for $u..." pass=$Crandompass) echo "$u:$pass" | eval Ssimulate chpasswd vecho -n "." eval Ssimulate спаде -M $pass_expire -d 2003-01-01 $u vecho -n "." rm -f Su.passwd.txt echo > Su.passwd.txt "\ Login name: $u Password: Spass Please log in and change your password: the system should prompt you to do this when you log in. You can change your
8.18. Серийная замена паролей
password at any time with the 'passwd' command. Choose a strong password - everyday words, birthdays, names of people or animals, all these are too easy to guess. Also, DO NOT give your password to anyone, ever. The IT staff will never ask you for your password, and neither should anyone else. You will be held responsible for all activity done via your account. _ printf » $log_file "$(date) S!-12s XsWn" $u $pass vecho "Spass" if [ -n "$mass_out" ] ; then uid=$(getent passwd $u | cut -f3 -d:) echo -e "$u\\t$pass\\t$uid"
129
—"
processed=$(expr $processed + 1) done i f [ $processed -gt 0 ] : then test -z "$mass_out" && echo >&2 "Sprocessed password(s) reset - see $ t e x t _ f i l e _ d i r / $ l o g _ f i l e " else echo >&2 "no users specified - see '$prog -h' for help" fi
См. также bash(l), pwgen(l); домашняя страница программы pwgen (http://sourceforge.net/ proiects/pwgen/).
8.18. Серийная замена паролей Проблема Вам хотелось бы иметь возможность периодически изменять большое количество паролей; возможно, эта процедура является частью вашей политики безопасности. А может быть, система безопасности была взломана, и вы хотите сменить пароли самостоятельно, не полагаясь на пользователей.
Решение Воспользуйтесь сценарием mass_passwd из раздела 8.17. Сценарий позволяет задать состав пользователей тремя разными способами: # mass_passwd пользователь! пользователь? ... # masspasswd -g группа группа... # mass_passwd -a В первом случае передается список имен пользователей, разделенных пробелами. Во втором случае изменяются пароли пользователей, входящих в указанные группы. В третьем случае изменяются все пароли из /etc/passwd.
130
Глава 8. Управление пользователями и группами
Сценарий mass_passwd генерирует для каждого пользователя отдельный файл с указанием новых паролей и инструкциями, которые вы сочтете нужным включить. Это позволяет легко распечатать отдельную инструкцию для каждого пользователя.
Комментарий Ключ -п тестирует команду без ее фактического выполнения: # ./masspasswd -v -g -n usergroup generating password for dawns teivuphu generating password for nikitah kohfahsh 2 password(s) reset - see /root/mass_passwd/mass_passwd.log Пароли остаются прежними; выполнение команды в этом режиме всего лишь проверяет параметры перед внесением изменений.
См. также Раздел 8.17.
8.19. Серийное включение пользователей в группы Проблема Требуется добавить большое количество пользователей в группу.
Решение Вставьте список имен прямо в файл /etc/group. Далее описан быстрый способ построения списка пользователей для вставки в /etc/group. Он основан на схеме нумерации UID, позволяющей легко отсортировать нужную группу пользователей. Для примера воспользуемся схемой «Trainers/ Coaches/Players», описанной в разделе 8.2. Добавим в группу Trainers несколько новых членов: $ awk -F: '($3 >= 1050) && ($3 <= 1060) { print $1}' /etc/passwd | tr '\n' '.' bcool. bk i nd, fmow. kthxbye. oknodo Теперь скопируйте и вставьте список в /etc/group. А если в вашей системе нет аккуратной, четкой схемы нумерации UID? Воспользуйтесь данными GECOS. Выберите одного из полей для хранения метки. Поле «прочее» лучше всего подходит для этой цели, поскольку пользователи не могут изменять его по своему усмотрению. Оно находится в данных GECOS — пяти полей, разделенных запятыми. Данные GECOS выглядят примерно так: bcool:х:1300:1300:Bob Cool trainer:/home/bkind:/bin/bash bkind:x:1055:1055:Bev Kind trainer:/home/bkind:/bin/bash После добавления меток выборка пользователей легко производится при помощи grep и awk: $ cat /etc/passwd grep trainer awk -F: '{ print $1}' | tr '\n' ',' bkind.bcool.
8.20. Временное использование привилегий root
131
См. также passwd(5), awk(l).
8.20. Временное использование привилегий root Проблема Будучи добропорядочным пользователем Linux, вы понимаете, как валено использовать минимальные привилегии, необходимые для выполнения работы. Вы знаете, что суперпользователь root всемогущ, и поэтому работаете в качестве root только тогда, когда это абсолютно необходимо. Как временно переключиться на учетную запись root?
Решение Когда потребуется выполнить какую-нибудь административную операцию, воспользуйтесь командой su (Switch User): carla(?windbag:~$ su Password: root$wi ndbag:/home/carl a#
Затем вернитесь к своей «основной личности»: root@windbag:/home/carla# exit carla@windbag:~$
Переключение на root с восстановлением конфигурации окружения и командного процессора root: carlaPwindbag:~$ su • Password:
root$windbag:/home/carla~# Переход на другой командный интерпретатор: $ su - --shell=tcsh Password:
Доступные командные процессоры перечислены в /etc/shells.
Комментарий Команда su позволяет переключиться на любую учетную запись, пароль которой вам известен. Дефис после su существенно влияет на результат выполнения команды. Без дефиса команда сохраняет старую системную конфигурацию и переменные окружения — командный процессор, редактор по умолчанию, пути и umask.
См. также
132
Глава 8. Управление пользователями и группами
8.21. Временное предоставление привилегий root командой sudo Проблема Требуется поручить некоторые операции администрирования системы другим пользователям или создать дополнительный уровень безопасности для ваших административных потребностей, но это нужно сделать так, чтобы мощь привилегий root использовалась в ограниченном объеме, не раскрывая пароль root.
Решение Воспользуйтесь sudo — командой, которая предоставляет ограниченные права root конкретным пользователям для решения конкретных задач и регистрирует их действия без сообщения пароля root. Допустим, имеется пользователь jhaugh, которому вы хотите предоставить полные права root. Поскольку пользователи sudo имеют собственные пароли, пароль root остается защищенным. Отредактируйте файл /etc/sudoers командой visudo — файл открывается в редакторе по умолчанию. # visudo # Файл sudoers # # Этот файл ДОЛЖЕН редактироваться командой 'visudo' # с правами root. # За дополнительной информацией о записи в файл # sudoers обращайтесь к man-странице. # # Спецификация псевдонимов хостов # Спецификация псевдонимов пользователей # Спецификация псевдонимов команд # Спецификация привилегий пользователей root ALL=(ALL) ALL Для начала создайте псевдоним хоста: Host_Alias LOCALHOST= local host В секции «Спецификация привилегий пользователей» («User privilege specification») добавляются отдельные пользователи: jhaugh
ALL=(ALL) ALL
Эта строка предоставляет jhaugh привилегии root для выполнения любых операций в системе и на подключенных компьютерах. Допустим, вы хотите предоставить другому пользователю tgwynne привилегии root только на локальном компьютере. Включите следующую запись: tgwynne
LOCALHOST = ALL
А пользователю msmith разрешается только выключение локального компьютера: msmith
LOCALHOST=/sbin/shutdown,
/sbin/halt
8.21. Временное предоставление привилегий root командой sudo
133
Предоставление группам обычных пользователей права выключения своих компьютеров: # Спецификация псевдонимов хостов Host_Alias LOCALHOST = local host # Спецификация псевдонимов пользователей User_Alias USERS = tgwynne. msmith. jhaugh, \ abyron. jwinters # Спецификация псевдонимов команд Cmnd_Alias SHUTDOWN - /usr/sbin/shutdown, /usr/sbin/halt. \ /usг/sbin/reboot, /usr/sbin/poweroff # Спецификация привилегий пользователей USERS LOCALHOST = SHUTDOWN Вызов команды sudo выглядит так: $ sudo /usr/sbin/halt Команда запрашивает у пользователей их пароли, после чего завершается. Чтобы узнать, выполнение каких команд им разрешено, пользователи могут выполнить следующую команду: $ sudo -1
User jhaugh may run the following commands on this host: (ALL) ALL Команда sudo фиксирует ошибки в системном журнале и передает сообщение root: $ sudo /usr/sbin/halt carl a is not in the sudoers file. This incident will be reported. Вы можете определять группы серверов и предоставлять пользователям привилегии для группы: # Спецификация псевдонимов хостов Host Alias FILESERVERS - hostl. host2. host3 # Спецификация псевдонимов пользователей User_Alias FILESERVERADMINS = jhaugh. abyron. jwinters # Спецификация псевдонимов команд Cmnd_Alias FILEUTILS = /bin/chgrp. /bin/chmod, \ /bin/chown, /bin/cp. /bin/dd. /bin/df. \ /bin/dir, /bin/dircolors. /bin/du. /bin/install. \ /bin/In. /bin/Is, /bin/mkdir, /bin/mkinfo, \ /bin/mknod, /bin/mv, /bin/rm. /bin/rmdir. \ /bin/shred, /bin/touch, /bin/vdir sync # Спецификация привилегий пользователей FILESERVADMIN FILESERVERS = FILEUTILS
Комментарий Команда sudo также может применяться для запуска пользователями сценариев (например, сценариев архивации). Будьте очень осторожны со сценариями, а также с командами, предоставляющими доступ к командному процессору или запускающими
134
Глава 8. Управление пользователями и группами
текстовые редакторы, так как с их помощью пользователи могут выйти за пределы своих привилегий. Попробуйте ограничить sudo-пользователей RJOE — ограниченным редактором, который не позволяет запустить командный процессор, но лучше с самого начала хорошенько продумать механизм предоставления прав root.
См. также su(l), sudo(8), sudoers(5); главная страница sudo (http://www.courtesan.com/sudo/).
8.22. Дисковые квоты Проблема Требуется ограничить объем дискового пространства, которое может быть занято пользователем. Во многих системах встречаются нарушители, забивающие свои диски коллекциями МРЗ-файлов и телесериалами.
Решение Воспользуйтесь пакетом Linux Disk Quota. Пакет содержит ряд компонентов, в том числе quota, edquota, quotacheck и repquota. Сначала отредактируйте файл /etc/fstab и выберите разделы, для которых будут установлены квоты. Квоты могут устанавливаться как для отдельных пользователей (usrquota), так и для групп (grpquota). Оба вида квот могут действовать одновременно: /dev/hda6 / ext3 defaults 01 /dev/hda7 /home ext3 defaults,usrquota,grpquota 0 1 Перемонтируйте файловую систему: # mount -о remount /home
Сценарий Quota init запускает программу quotacheck, которая анализирует систему, создает базу данных использования дискового пространства и создает файлы квот. Затем назначьте квоты пользователям. При этом файл конфигурации открывается в редакторе по умолчанию: # edquota -u vhenson
Disk quotas for user vhenson (uid 1550): Filesystem blocks soft hard inodes soft hard /dev/hda7 550466 0 0 47466 0 0 Мягкое ограничение (soft limits) предоставляет нарушителю отсрочку с выдачей предупреждений. Жесткое ограничение (hard limits) вступает в силу немедленно. Чтобы задать ограничение, просто отредактируйте файл: # edquota -u vhenson Disk quotas for user vhenson (uid 1550): Filesystem blocks soft hard inodes soft hard /dev/hda7 550466 650000 700000 47466 0 0 БЛОКИ всегда имеют размер 1024 байта, поэтому 650 000 блоков составляют около 665 Мбайт.
8.22. Дисковые квоты
135
Сохраните и закройте файл. Убедитесь в том, что квота вступила в силу: # quota vhenson
Disk quotas for user vhenson (uid 1550): 650000 700000 Назначение квот группам осуществляется следующим образом: # edquota -g engineers
Если жадный пользователь использует всю групповую квоту, значит, группе не повезло — другим ничего не остается. Следующая команда вызывает редактор по умолчанию для назначения отсрочки для мягких ограничений во всей файловой системе: # edquota -t Grace period before encforcing soft l i m i t s for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/hda3 7days 7days
Один из пользователей может использоваться в качестве «прототипа» для определения квот нового пользователя: # edquota -p vhenson dnorth или сразу нескольких новых пользователей: # edquota -p vhenson "awk -F: '$3 > 999 {print $1}' /etc/passwd" Также можно перечислить сразу нескольких пользователей: # edquota -p vhenson dnorth jvesperman sanvin
Несомненно, вы захотите следить за использованием квот. Следующая команда выводит общесистемный отчет о текущем расходовании дискового пространства: # repquota -a
Чтобы ограничиться конкретной файловой системой, используйте команду: # repquota /home
Комментарий Включите следующую строку в сценарий mass_useradd, после строки chmod, чтобы квота пользователя vhenson автоматически применялась для всех новых пользователей: /usr/sbin/edquota -p vhenson Susername Команду add user можно настроить на автоматическое назначение квот для новых пользователей. Отредактируйте файл adduser.conf: QUOTAUSER="vhenson"
А теперь плохие новости: Quota сейчас находится в переходной фазе. Код Quota в ядрах версий 2.2 и 2.4 устарел и не подходит для современных версий Quota. Если в ваш дистрибутив включена «заплатка» ядра — считайте, вам повезло. Впрочем, вы сможете быть полностью уверены в этом лишь после того, как установите и настроите Quota и назначите квоту пользователю. Если дистрибутив не содержит готовые к запуску версии Quota, вероятно, вам придется устанавливать целую серию «заплаток» ядра. Подробные инструкции приведены в документе «Quota mini-HOWTO».
136
Глава 8. Управление пользователями и группами
На момент написания книги надежная реализация ReiserFS с поддержкой Quota существовала только в SuSE.« Заплатки» ReiserFS для других дистрибутивов можно загрузить с домашней страницы ReiserFS по адресу http://www.namesys.com. К счастью, ядро 2.6 полностью поддерживает Quota. После решения проблем с ядром вашим следующим шагом должна стать установка новейшей версии Quota. Лучше всего найти RPM для вашей системы (пользователи Debian используют apt-get install quota), в этом случае в вашем распоряжении появятся настроенные и готовые к использованию сценарии init. Если вы предпочитаете настраивать сценарии init самостоятельно, обращайтесь к инструкциям в документе «Quota mini-HOWTO».
См. также man(l) quota, man(8) edquota, man(8) quotacheck, man(8) repquota; сценарий mass_useradd (раздел 8.17); Quota mini-HOWTO (http://www.tldp.org/HOWTO/Quota.htmL); домашняя страница проекта Quota (http://sourceforge.net/projects/linuxquota/); домашняя страница ReiserFS (http://www.namesys.com).
Глава 9
Операции с файлами и разделами
9.1. Введение Хорошее понимание основных принципов работы файловых систем абсолютно необходимо для понимания того, как работает Linux. В системе все объекты интерпретируются как файлы — файлы данных, разделы, каналы (pipes), сокеты и устройства. Каталог также представляет собой файл, содержащий информацию о других файлах. Спецификация иерархии файловых систем (FHS, Filesystem Hierarchy Standard) была разработана как «добровольный стандарт», соблюдаемый в большинстве версий Linux. Далее перечислены обязательные элементы корневой файловой системы Linux: / — корневой каталог; /bin — важнейшие системные команды; /boot — файлы статического загрузчика; /dev — файлы устройств; /etc — системные конфигурационные файлы, специфические для хоста; /lib — общие библиотеки, необходимые для работы локальной системы; /mnt — временные точки монтировки; /opt — дополнительные программные пакеты (в Linux используются мало); /ргос — текущая информация о конфигурации и состоянии ядра; /sbin — команды администрирования системы; /tmp — временные файлы (в нормальных системах они уничтожаются между перезапусками); /usr — общие файлы, данные только для чтения и двоичные файлы; /var — файлы переменного размера (такие, как почтовые ящики и журналы). Следующие каталоги считаются необязательными, потому что они могут находиться в любом месте сети, тогда как обязательные каталоги должны присутствовать для нормальной работы компьютера: /home — личные файлы пользователя; /root — личные файлы суперпользователя.
Глава 9. Операции с файлами и разделами
138
Те, кого действительно заинтересует эта тема, найдут дополнительную информацию в спецификации FHS. Вот лишь некоторые обстоятельства, которые должны учитывать пользователи Linux: О каталоги /tmp и /var могут размещаться в отдельных разделах с целью повышения безопасности. Если вследствие каких-то сбоев начнется неконтролируемое заполнение этих каталогов, они будут изолированы от остальных компонентов системы; О каталог /home может находиться в собственном разделе или на выделенном сервере для упрощения создания резервных копий и защиты данных при обновлении системы. В этом случае содержимое /home останется нетронутым даже после полного уничтожения и переустановки системы Linux; О хранение всех конфигурационных файлов в /etc и /home упрощает создание резервных копий. Вы можете ограничиться архивацией только содержимого /etc и /home, а остальные компоненты восстановить с установочных дисков системы. Но это будет означать, что при восстановлении будут потеряны обновления программ — учтите это обстоятельство при разработке чрезвычайных планов.
Типы файлов Linux Помните, что в Linux любой объект интерпретируется как файл. Файлы Linux делятся на семь типов, перечисленных в табл. 9.1. Таблица 9.1. Типы файлов Признак типа
Тип файла Обычный файл Каталог Ссылка
с
Символьное устройство
s
Сокет
р
Именованный канал
b
Блочное устройство
Признак типа выводится в самом начале записи в списке файлов: # Is -1 /dev/initctl prw 1 root root
0 Jan 12 00:00 /dev/initctl
srwx-
0 Jan 12 09:00 /tmp/.ICE-unix/551
# Is -1 /tmp/.ICE-unix/551 1 caria
caria
Тип файлов может указываться в командной строке find: # find / -type p # find / -type s
Если поиск занимает слишком много времени, работу команды можно прервать клавишами Ctrl+C.
9.1. Введение
139
Атрибуты файлов Также стоит обратить внимание на атрибуты файла — например, сценария sortusers: # Is -I sortusers -rwxr-xr-x 1 meredydd programmers
3783 Jan 7 13:29 sortusers
Строка -rwxr-xr-x 1 meredydd programmers сообщает программисту много полезных сведений: О первый символ — является признаком обычного файла. Этот атрибут не может изменяться пользователем. По этому признаку Linux определяет тип файла, поэтому с точки зрения системы расширение является лишним. Расширения нужны только для пользователей и приложений; О подстрока rwx задает разрешения владельца файла; О первая подстрока r-х задает разрешения владельца группы; О вторая подстрока r-х задает разрешения для «всего мира», то есть для каждого, кто имеет доступ к файлу; О 1 — количество жестких ссылок на файл. У каждого файла имеется как минимум одна ссылка из родительского каталога; О в подстроке meredydd programmers содержится владелец файла и группа, которой принадлежит файл. Разрешения и права владения могут изменяться командами chmod, chgrp и chown; команда chmod изменяет разрешения, а команды chown и chgrp меняют права владения. Запись rwx на первый взгляд выглядит странно, но в действительности это мнемоника: rwx=Read, Write, eXecute. В этом формате задаются разрешения для владельца, группы и всех остальных. Таким образом, в примере sortusers пользователю meredydd разрешается чтение, запись и исполнение файла. Члены группы и прочие могут только читать и исполнять файл. Хотя отредактировать файл может только сам пользователь meredydd, ничто не мешает членам группы и другим пользователям скопировать его содержимое. Файл является сценарием командного процессора, для него приходится задавать как права чтения, так и права исполнения, потому что командному процессору требуется прочитать файл. Двоичные файлы читаются непосредственно ядром без участия командного процессора, поэтому для них право чтения не обязательно.
Определения типов файлов Далее типы файлов Linux будут представлены чуть более подробно. О Обычные файлы — обычные текстовые файлы, файлы данных или двоичные исполняемые файлы. О Каталоги — списки файлов. О Символьные и блочные устройства — файлы, которые могут рассматриваться как промежуточные точки между ядром и драйверами устройств — например, /dev/hda (жесткий диск IDE), /dev/ttySl (модем для последовательного порта) и т. д. Они используются ядром для перенаправления запросов к различным устройствам системы.
140
Глава 9. Операции с файлами и разделами
О Локальные сонеты — связи между локальными процессами. Локальные сокеты отображаются как файлы, но запись и чтение в них возможны лишь со стороны процессов, напрямую задействованных в передаче данных. О Именованные каналы — также используются для локальных межпроцессных коммуникаций. Крайне маловероятно, чтобы пользователю Linux когда-либо пришлось иметь дело с сокетами или каналами; они используются исключительно системными функциями. О Ссылки — ссылки представляют огромный интерес для пользователей Linux. Они делятся на два типа: жесткие и мягкие. Ссылка представляет собой указатель на файл. Жесткая ссылка в действительности может рассматриваться как другое имя файла, поскольку она указывает на конкретный i-узел (mode). Все жесткие ссылки, указывающие на файл, наследуют все атрибуты этого файла — разрешения, владельца и т. д. Команда rm удаляет жесткие ссылки, но файл остается на диске до тех пор, пока не будут уничтожены все жесткие ссылки на него, и файл не будет освобожден всеми процессами. Жесткие ссылки не могут выходить за пределы файловой системы, поэтому вам не удастся создать жесткую ссылку на сетевой диск. Мягкие ссылки связываются с именем файла; они могут указывать на любой файл, находящийся где угодно. В системе даже могут существовать «висячие» мягкие ссылки; они появляются после удаления файлов, на которые они указывают, или их переименования.
Внутреннее строение файловой системы Приведу еще ряд полезных определений, относящихся к файловым системам. Логический блок — минимальная единица хранения информации (в байтах), которая может выделяться файловой системой. Один файл может состоять из нескольких блоков. Логический том — раздел диска, диск или том, состоящий из нескольких дисков или разделов, — любая единица хранения данных, воспринимаемая как единое, обособленное пространство. Внутренняя фрагментация — неиспользуемые места, возникающие, когда файл или его часть заполняет блок лишь частично. Например, если размер блока равен 4 Кбайт, а файл занимает 1 Кбайт, то 3 Кбайт теряются. Внешняя фрагментация — фрагментация, возникающая в том случае, если блоки, относящиеся к одному файлу, не занимают смежную область, а рассеиваются по всему диску. Экстент — смежные блоки, принадлежащие одному файлу. Файловая система воспринимает экстент как единое целое, что повышает эффективность отслеживания больших файлов. В+-деревъя — сначала появились b-деревья (сбалансированные деревья). После усовершенствования они превратились в Ь+-деревья. Эти удобные структуры данных, позаимствованные из теории индексирования баз данных, заметно ускоряют поиск и перебор в структурах данных. Файловые системы, использующие эту концепцию, могут быстро просканировать дерево каталогов, сначала выбрать нужный каталог, а затем просканировать его содержимое. Файловая система ЕхГ2 выполняет последовательный поиск, который работает медленнее.
9.1. Введение
141
Метаданные — термин, объединяющий все данные, которые описывают или управляют внутренними структурами данных. К этой категории относится вся информация о файле, кроме его непосредственного содержимого: дата и время, владелец, группа, разрешения, размер, ссылки, время модификации, время доступа, местонахождение на диске, расширенные атрибуты и т. д. 1-узел — большая часть метаданных файла содержится в i-узле, или индексном узле. Каждому файлу ставится в соответствие уникальный номер i-узла.
Журнальные файловые системы Старая добрая файловая система Ext2 постепенно дряхлеет. Она уже не поспевает за пользователями, которым нужны терабайты дискового пространства, и не обеспечивает быстрого восстановления в случае сбоев. Для большинства пользователей, у которых объем данных измеряется гигабайтами и менее, важнейшими причинами для перехода на журнальную файловую систему являются быстрое восстановление и целостность данных. Файловые системы Linux асинхронны. Они не записывают метаданные прямо на диск, а накапливают данные в кэше записи в памяти и осуществляют запись периодически, в моменты низкой загрузки процессора. Такая схема повышает общее быстродействие системы, но сбой питания или системы может привести к потере метаданных. Если это произойдет, при активации драйвера файловой системы во время перезапуска и при выполнении программы fsck (FileSystem Consistency checK) будут обнаружены несоответствия. Поскольку Ext2 хранит несколько экземпляров метаданных, обычно ей удается восстановить нормальное состояние системы. Но у такого подхода есть недостаток — время восстановления. Fsck проверяет абсолютно все биты метаданных. На это может потребоваться от нескольких минут до получаса и более для больших файловых систем. Журнальным файловым системам столь долгая проверка не нужна, потому что они ведут журналы изменений. Таким образом, проверяются только изменившиеся файлы, а не вся файловая система. В распоряжении пользователей Linux имеется немало замечательных журнальных файловых систем, в том числе Ext3, ReiserFS, XFS и JFS. Ext3 — журнальная система на базе Ext2. Системы ReiserFS, XFS и JFS способны работать с файловыми системами, объем которых на 64-разрядных платформах измеряется экзабайтами. К сожалению, пользователи ia32 ограничены обычными терабайтами. Какую файловую систему выбрать? Не существует однозначно лучшего варианта; все они хороши по-своему. Далее приводится краткая сводка основных достоинств и недостатков. Ext3 — система отличается простотой и удобством. Она прекрасно устанавливается поверх Ext2, поэтому вам не придется строить систему с самого начала. Система является расширением Ext2, поэтому она использует тот же пакет файловых утилит, e2fsprogs. Принципиальное отличие Ext3 от других файловых систем заключается в том, что она использует фиксированное количество i-узлов, тогда как в других системах узлы создаются динамически. Кроме того, Ext3 поддерживает ведение журналов данных, а не только метаданных. Впрочем, за это приходится расплачиваться более низкой производительностью и дополнительными расходами дискового пространства. Ext3 работает в любой архитектуре, поддерживаемой системой Linux.
142
Глава 9. Операции с файлами и разделами
ReiserFS — система особенно хорошо подходит для систем с большим количеством мелких файлов (например, почтовых серверов, использующих формат maildir, или серверов новостей). ReiserFS обеспечивает высокоэффективное хранение файлов; остаточные биты файлов упаковываются в листовые узлы b-дерева, что предотвращает напрасное расходование дискового пространства. Система отлично масштабируется и так нее хорошо справляется с большими файлами. ReiserFS работает в любой архитектуре, поддерживаемой системой Linux. JFS — вклад IBM в Большое Соревнование Файловых Систем Linux; система портирована из AIX и OS/2 Warp. Она поддерживает многопроцессорные системы, списки управления доступом (ACL) и даже — представьте! — динамическое изменение размеров. Просто перемонтируйте файловую систему JFS с новым размером, и ничего больше делать не придется (правда, таким образом можно только увеличить тома, но не уменьшить его). XFS — разработка SGI, портированная из IRIX. XFS мыслит масштабно — заявлено, что она способна работать с файловыми системами объемами до 9 экзабайт. Ее сильной стороной является обработка очень больших файлов (скажем, гигантских баз данных). У XFS имеется одна превосходная функция, называемая отложенным распределением. Система откладывает запись на диск и выбор блока для записи, чтобы выбрать наибольшее возможное количество смежных блоков. Если в системе используется большое количество временных файлов с коротким сроком жизни, XFS может вообще никогда не выделить блоки под эти файлы. XFS обладает интегрированной поддержкой дисковых квот, ACL, архивации и восстановления.
См. также JFS (http://www-124.ibm.com/jfs/); XFS (http://oss.cgi.com/projects/xfs/); ReiserFS (http://www.namesys.com); Ext2/3 (http://e2fsprogs.sourceforge.net/ext2.html); Filesystem Hierarchy Standard (http://www.pathname.com/fhs/).
9.2. Настройка разрешений в числовом формате chmod Проблема Требуется контролировать доступ к файлу. Допустим, вы хотите удержать секретный рецепт соуса подальше от посторонних, или у вас имеется конфиденциальная информация, нуждающаяся в защите. А может (что более вероятно), потребовалось разрешить исполнение некоторого файла. В любом случае потребуется задать разрешения для файлов, но сначала нужно разобраться, как вычисляются числовые коды разрешений.
Решение Воспользуйтесь командой chmod (CHange MODe). Смена разрешений может выполняться только суперпользователем (root) и владельцем файла.
9.3. Выполнение массовых операций командой chmod
143
Например, следующая команда предоставляет владельцу файла доступ для чтения и записи к файлу /archive/datafile. Ни один другой пользователь, кроме root, вообще не сможет обратиться к этому файлу: $ chmod -v 600 /archive/datafile mode of '/archive/datafile' changed to 0600 (rw ) В следующем примере владелец файла /shared/list разрешает его чтение всем желающим, но изменения в файл могут вноситься только владельцем файла и root: $ chmod -v 644 /shared/list mode of '/archive/datafile' changed to 0644 (rw-r--r--) Чтобы сценарий можно было запустить, в атрибутах файла необходимо установить бит исполнения. Следующая команда разрешает редактирование сценария только пользователю, а чтение и исполнение — всем желающим: $ chmod 755 /shared/somescript
У каталогов бит исполнения всегда должен быть установлен, иначе они не будут работать: $ chmod 755 /shared
Назначение разрешений каталогу со всем содержимым, включая подкаталоги, производится с ключом -R. Ключ -v включает режим подробного вывода, чтобы вы видели, какие действия выполняет команда: % chmod -R -v 755 /shared
Комментарий Файловые разрешения вычисляются по табл. 9.2. Просуммируйте нужные значения для каждого типа пользователей, а затем перечислите их в порядке следования в таблице: владелец, группа, прочие. Специальные биты рассматриваются в разделе 9.7. Таблица 9.2. Вычисление файловых разрешений Разрешение
Владелец
Группа
Прочие
setuid 4
Чтение
4
4
4
setuid 2
Запись
2
2
2
setuid 1
Исполнение
1
1
1
Специальные биты
См. также info chmod.
9.3. Выполнение массовых операций командой chmod Проблема Требуется задать разрешения для всех файлов в каталоге или для группы файлов.
144
Глава 9. Операции с файлами и разделами
Решение Команда chmod поддерживает операции со списками файлов. Для построения списков можно воспользоваться командой find или метасимволами командного процессора. Следующая команда делает несколько файлов доступными только для чтения для всех пользователей: $ chmod 444 f i l e . t x t file2.txt file3.txt
Чтобы сделать все файлы текущего каталога доступными для чтения/записи для владельца и группы, но без изменения разрешений самого каталога, воспользуйтесь командой: $ find . -type f -exec chmod -v 660 {} \:
Назначение разрешений для каталога и всего содержимого, включая подкаталоги: $ chmod -R -v 755 /shared
В следующем примере чтение/запись всех файлов с расширением .txt в текущем каталоге разрешается владельцу, а всем остальным разрешается только чтение: $ chmod -v 644 * . t x t
Изменение всех файлов текущего каталога, начинающихся с определенного префикса: $ chmod -v 644 a p t *
См. также info chmod.
9.4. Настройка разрешений в символьном формате chmod Проблема Требуется установить некоторые биты разрешений, сохранив значения остальных битов. Числовые форматы chmod позволяют задавать только все биты разрешений одновременно.
Решение Самым распространенным применением символических обозначений chmod является добавление бита исполнения в атрибуты файла без изменения остальных разрешений: $ chmod +x сценарий
По умолчанию используется режим а (АН), поэтому данный пример разрешит исполнение сценария всем пользователям. Следующая команда устанавливает бит исполнения только для владельца файла:
9.4. Настройка разрешений в символьном формате chmod
145
* chmod u+x сценарий
Также существует возможность сброса отдельных битов. Следующая команда лишает группу и прочих пользователей права исполнения: $ chmod go-x сценарий
Быстрая установка бита setgid для каталога с целью создания общего каталога. Все файлы, созданные в этом каталоге, будут принадлежать той же группе, что и сам каталог: $ chmod +s /общий-каталог Сброс всех разрешений для группы и прочих пользователей: $chmod go= сценарий
Следующая команда предоставляет группе те же разрешения, которыми обладает владелец файла: $chmod g=u сценарий •
Комментарий Символическая запись chmod порой бывает довольно сложной. Следующий пример стирает все существующие разрешения и приводит их в исходное состояние: $ chmod -v a=,u-rwx,g=rx,o=r сценарий То же самое можно сделать командой chmod 754. Символическая форма записи также называется мнемонической: O r — чтение (Read); О w — запись (Write); О х — исполнение (Execute); О X — файл должен уже обладать разрешениям исполнения или быть каталогом; О s —назначение идентификатора пользователя или группы при исполнении — опасно! Не используйте с исполняемыми файлами (по крайней мере, если вы не до конца представляете, что делаете); О t — бит закрепления; О и - владелец файла; О д — группа, которой принадлежит файл; О о — прочие пользователи; О + — добавление новых разрешений к действующим; О = — замена действующих разрешений; О
сброс разрешений.
См. также info chmod; раздел 9.7.
146
Глава 9. Операции с файлами и разделами
9.5. Назначение владельца файла командой chown Проблема Требуется сменить владельца файла или каталога. Возможно, вы скопировали какой-нибудь файл в другой каталог, но не можете отредактировать его без смены владельца. Многие проблемы в Linux возникают из-за неправильно заданных разрешений или права принадлежности. В таких случаях сообщения вида «Permission denied» и «File is read-only» появляются там, где их быть не должно.
Решение Воспользуйтесь командой chown и смените владельца и/или группу, которой принадлежит файл: # chown пользователь файл # chown пользователь:группа файл # chown :группа файл Пример: $ chown changed $ chown changed
-v carlas:share index.txt ownership of 'index.txt' to carlas:share -v :share toc.txt ownership of ' t o c . t x t ' to :share
Комментарий Рядовые пользователи могут только вносить изменения в принадлежащие им файлы и не могут передать право владения файлом другому пользователю. Тем не менее пользователи могут изменять принадлежность к группам (при условии, что они принадлежат как к исходной, так и к итоговой группе).
См. также info chown.
9.6. Выполнение массовых операций командой chown Проблема Требуется сменить владельца каталога и его содержимого, или только содержимого, или файлов из списка, или передать право владения файла от одного кода UID к другому.
Решение Команда chown позволяет выполнять некоторые массовые операции. Также можно воспользоваться командой find или метасимволами командного процессора.
9.7. Создание общих каталогов с использованием setgid и бита закрепления
147
Чтобы сменить владельца сразу для нескольких файлов, передайте список файлов, разделенный пробелами: # chown carlas file.txt file2.txt file3.txt
Список файлов также можно задать при помощи метасимволов командного процессора: # chown carlas *.txt
Следующая команда передает все файлы пользователя другому пользователю: # chown -R -v --from valh piglet /shared/scripts To же самое можно сделать при помощи команды find: # find /-user valh -exec chown -v piglet {} \;
Команда find также дает возможность находить файлы по коду UID, что не может сделать chown: # find / -uid 1050 -exec chown -v 1200 {} \; Смена владельца каталога со всеми подкаталогами и файлами, с подробным выводом: # chown -R -v piglet /shared/scripts:
changed ownership of 'scripts/backups.tgz' to piglet changed ownership of 'scripts/fake-spec-rpm' to piglet
В команде можно использовать как имя пользователя, так и UID. Если учетная запись пользователя была удалена и в системе остались «бесхозные» файлы, то для их поиска придется использовать UID. •
•
См. также info chown; раздел 8.6.
9.7. Создание общих каталогов с использованием setgid и бита закрепления •
Проблема Пользователям нужен общий каталог для обмена файлами. Вы хотите, чтобы все общие файлы принадлежали одной группе.
Решение Воспользуйтесь битом setgid для автоматического назначения файлов принадлежности к общей группе. Вот как это делается в восьмеричной записи: # chmod -v 2775 /общий-каталог
Также можно использовать символическую запись: # chmod -v +s /общий-каталог
148
Глава 9. Операции с файлами и разделами
Учтите, что флаг +s устанавливает оба бита, setgid и setuid, что может создать угрозу для безопасности, если в этом каталоге хранятся исполняемые файлы или сценарии. Команда chmod 2775 устанавливает только бит setgid. ВНИМАНИЕ Бит setuid пробивает большую брешь в системе безопасности. Не используйте его для исполняемых файлов. Программы, использующие его (например, /usr/bin/passwd), содержат внутренние меры защиты для предотвращения эскалации привилегий и других нарушений. Если в системе имеются сценарии, которые должны запускаться пользователями, создайте для этой цели специальную группу.
Установите статический бит (sticky bit), чтобы файл не мог быть удален никем, кроме владельца: # chmod +t /общий_каталог или # chmod 3775 /общий_каталог mm
Ч
Комментарии
Все файлы, создаваемые в каталоге, принадлежат той же группе, что и сам каталог. Все файлы, скопированные в каталог, сохраняют принадлежность исходной группе. Чтобы разные пользователи могли работать с одним каталогом, они должны принадлежать к одной группе. Разрешения файлов, создаваемых в каталоге, определяются масками umask владельцев. Каталог /tmp является классическим примером каталога, использующего статический бит: # stat /tmp Access: (1777/drwxrwxrwt) Uid: ( 07 root) Gid: ( 0/ root) Каталог /tmp должен быть общедоступным для чтения и записи, но мы не хотим, чтобы пользователи или процессы удаляли чужие временные файлы. Проблема решается при помощи статического бита. Бит setuid позволяет пользователям выполнить команду с такими же разрешениями, как у владельца файла. Именно так рядовые пользователи могут изменять свои пароли, хотя запись в файл /etc/passwd разрешена только суперпользователю root: $ stat /usr/bin/passwd File: '/usr/bin/passwd' Size: 26584 Blocks: 56 10 Block: 4096 regular file Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Комментарий У статических битов есть еще одно применение. Давным-давно установка этого бита для исполняемого файла приводила к тому, что файл оставался в памяти после завершения его выполнения. В доисторическую эпоху Unix с примитивным управлением памятью и слабосильным оборудованием это ускоряло запуск программ. В наши дни об этом можно не думать.
См. также info chmod; раздел 9.2.
9.8. Назначение разрешений по умолчанию с использованием маски umask
149
9.8. Назначение разрешений по умолчанию с использованием маски umask Проблема Файлы создаются с некоторым стандартным набором разрешений по умолчанию. Как задать эти разрешения?
Решение Разрешения по умолчанию определяются маской umask. Чтобы узнать текущее состояние маски, введите команду: $ umask 0022
ИЛИ $ umask -S u=rwx,g=rx,o=rx
Чтобы временно назначить новую маску до конца текущего сеанса, введите команду $ umask 0002
Долгосрочное изменение маски umask обеспечивается включением строки umaskхххх в файл -/.bashrc. Часто используемые значения umask перечислены в табл. 9.3. Т а б л и ц а 9 . 3 . Часто используемые значения umask Umask
Пользователь
0002 0022 0007 0077
Все Все Все Все
Группа
Прочие
Все
Чтение и исполнение
Чтение и исполнение
Чтение и исполнение
Все Нет
Нет Нет
Комментарий В табл. 9.4 показано, как составить маску umask для любой комбинации разрешений. Таблица 9.4. Все значения umask Umask
Разрешения файлов
Разрешения каталогов
7 6 5
Нет Нет Запись Запись Чтение Чтение Чтение и запись Чтение и запись
Нет Исполнение Запись Запись и исполнение Чтение Чтение и исполнение Чтение и запись Чтение—запись—исполнение
4 3 2 1 О
150
Глава 9. Операции с файлами и разделами
Когда программа (например, текстовый редактор или компилятор) создает файл, она жестко кодируется на задание файловых разрешений 0666 или 0777. Если программа знает, что создаваемый файл является исполняемым, она устанавливает разрешения 0777. На практике чаще всего используется значение 0666; именно поэтому для сценариев приходится выполнять команду chmod +x. Как правило, ни 0666, ни 0777 не являются идеально подходящими, поэтому маска umask исключает ненужные биты. Например, с назначением маски umask 0002 обычным файлам будут назначаться разрешения 0664, а исполняемым — 0775.
9.9. Монтирование и демонтирование съемных дисков Проблема Как вставлять и удалять съемные диски — дискеты, компакт-диски или флэшдиски с интерфейсом USB?
Решение Используйте команды mount и umount. Пример монтирования дисковода CD-ROM: # mount -г - t iso9660 /dev/scdO /cdrom
Ключ -г означает доступ только для чтения; ключ -t определяет тип файловой системы. Строка /dev/scdO определяет имя, назначаемое устройству ядром, /cdrom — каталог, в котором монтируется устройство. Он должен присутствовать в системе перед монтированием диска. Тип файловой системы определяется командой file: $ f i l e • < /dev/scdO /dev/stdin: ISO 9660 CD-ROM filesystem data 'Datal
При монтировании диска CD-ROM ключ -г можно не указывать. Команда выдаст предупреждение, но диск смонтирует: # mount -t iso9660 /dev/scdO /cdrom mount: block device /dev/scdO is write-protected. mounting read-only Следующая команда монтирует дискету для чтения/записи: # mount -w /dev/fdO /floppy Следующая команда монтирует флэш-диск с интерфейсом USB. Ключ noatime должен использоваться для перезаписываемых носителей с ограниченным количеством операций перезаписи (таких, как CD/DVD-RW или флэш-диски): # mount -w -о noatime /dev/sdal /memstick
Смонтированное устройство демонтируется командой # umount /memstick
Возможно, вы получите ответ вида # umount /memstick
umount: /memstick: device ns busy
9.10.
Настройка монтирования файловых систем в /etc/fstab
151
Это означает, что приложение (командный интепретатор, файловый менеджер) читает данные из файловой системы. Дополнительная информация выводится командой Lsof (LiSt Open Files): $ lsof /memstick COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME gs 938 dawnm 128r DIR 2.0 1024 12 /memstick/may-04.pdf bash 938 dawnm 129r DIR 2.0 1024 24 /memstick Далее можно либо закрыть приложения, либо убить их одной командой: # kill
-9 ' l s o f -t /memstick'
Команда mount может выполняться только суперпользователем root. Чтобы другие пользователи могли монтировать съемные диски, необходимо отредактировать /etc/fstab (см. следующий раздел).
Комментарий Ошибка umount «Device is busy» чаще всего возникает из-за наличия открытого окна терминала, в котором смонтированное устройство является текущим рабочим каталогом: carla@wi ndbag:/f1oppy$ Очень важно, чтобы диск был демонтирован перед отключением. Это позволяет системе завершить операции записи и обеспечить корректное отключение. В более новых версиях Linux указывать тип файловой системы не обязательно, поскольку команда mount автоматически распознает типы файловых систем.
См. также mount(8); раздел 9.10.
9.10. Настройка монтирования файловых систем в /etc/fstab Проблема Пользователям нужно записывать данные на компакт-диски, работать с флэшдисками и другими съемными устройствами. Давать им привилегии root только для монтирования этих устройство нельзя, но только суперпользователь root может использовать команды mount, описанные в разделе 9.9. Также требуется выбрать файловые системы, автоматически монтируемые при загрузке системы.
Решение Добавьте в файл /etc/fstab записи с определением точек монтирования и разрешений доступа. В следующем примере показан пример /etc/fstab с разделом Linux, двумя разделами Windows и съемными носителями:
154
Глава 9. Операции с файлами и разделами
# /sbin/fdisk -1 Disk /dev/hda : 20.5 GE i. 20576747520 bytes 255 heads. 63 sectors/track. 2501 cylinders Units = cylinders of .6065 ! * 512 = 8225280 bytes Device Boot Start 1 /dev/hdal * 894 /dev/hda2 1034 /dev/hda3 2437 /dev/hda5 1034 /dev/hda6 /dev/hda7 1671
End Blocks Id 893 7172991 7 1033 1124550 с 2501 11791710 f 2501 522081 82 1670 5116639+ 83 2436 6152863+ 83
System HPFS/NTFS W95 FAT32 (LBA) W95 Ext'd (LBA) Linux swap Linux Linux
Команда df (Disk Free) покажет, какие разделы уже смонтированы и какие точки подключения при этом используются: tdf Filesystem /dev/hda6 /dev/hda7
lK-blocks 5116472 6152668
Used 1494584 4011652
Available Use? Mounted on 3621888 30% / 2141016 66% /home
Команда df также может использоваться для отображения информации об одном смонтированном разделе. Ключ -h выводит числовые значения в более удобном формате: $ df -h /dev/hdc6 Filesystem Size Used /dev/hdc6 4.9G 1.4G
Avail 3.5G
Use£ Mounted on 29£ /home
Раздел Windows NTFS /dev/hdal монтируется так: # mkdir -m 755 /win2k # mount -t ntfs -r /dev/hdal /win2k ВНИМАНИЕ Поддержка записи в NTFS находится на экспериментальной стадии. Разрешая ее, вы рискуете своими данными в разделе NTFS, поэтому в команде mount присутствует ключ -г. Для организации общего доступа к файлам NTFS используйте Samba.
Демонтирование тома осуществляется командой # umount /win2k
i ТЭЮК6 mount(8), The NTFS FAQ
(http:/linux-ntfs.sourceforge.net/info/ntfs.html).
9.12. Определение имен устройств для mount и fstab Проблема Требуется смонтировать дисковое устройство: жесткий диск с интерфейсом IDE или SCSI, CD, DVD, флэш-диск USB или Zip-диск. Но вы не знаете, какое имя устройства следует использовать — где его найти?
9.12. Определение имен устройств для mount и fstab
155
Решение Воспользуйтесь командами dmesg и fdisk. Команда dmesg находит имена устройств, а команда fdisk отображает нумерацию разделов на жестких дисках. Возможно, вам также поможет официальный список имен /dev по адресу http://www.Lanana.org/ docs/device-list/devices.txt (если в вашей системе установлены исходные тексты ядра, возможно, файл devices.txt находится в каталоге/usr/src/). Следующая команда ищет информацию CD-устройств в выходных данных dmesg: $ dmesg | grep -i cd
hdc: ATAPI CDROM. ATAPI CD/DVD-ROM DRIVE hdc: ATAPI 40X CD-ROM DRIVE. 128K cache. UDMA (33) Быстрый поиск в devices.txt дает следующий результат: Second IDE hard disk/CD-ROM interface 0 = /dev/hdc Master: whole disk (or CD-ROM)
He обращайте внимания на 0=; имя устройства — /dev/hdc. А вот как выглядят дисководы CD/DVD, использующие подсистему IDE/ SCSI: $ dmesg | grep -i cd hdb: TOSHIBA DVD-ROM SD-M1202. ATAPI CD/DVD-ROM drive hdc: LITE-ON LTR-24102B. ATAPI CD/DVD-ROM drive ide-cd: ignoring drive hdb ide-cd: ignoring drive hdc Type: CD-ROM ANSI SCSI revision: 02 Type: CD-ROM ANSI SCSI revision: 02 Attached scsi CD-ROM srO at scsiO. channel 0. id 0. lun 0 Attached scsi CD-ROM s r l at scsiO, channel 0. id 1. lun 0 scdO: scsi3-mmc drive: 32x/32x cd-rw xa/form2 cdda tray Uniform CD-ROM driver Revision: 3.12 scdl: scsi3-mmc drive: 131x/40x writer cd/rw xa/form2 cdda tray
Итак, устройствам соответствуют имена /dev/scdO и /dev/scdl. Для жестких дисков приходится указывать конкретные разделы, поскольку каждый раздел является самостоятельным блочным устройством. Команда fdisk -L выводит информацию обо всех разделах на всех обнаруженных жестких дисках: # /sbin/fdisk -1 Disk /dev/hda: 20.5 GB. 20576747520 bytes 255 heads. 63 sectors/track. 2501 cylinders Units - cylinders of 16065 * 512 = 8225280 bytes Device Boot /dev/hdal * /dev/hda2 /dev/hda4 /dev/hda5 /dev/hda6 /dev/hda7
Start 1 894 1034 2437 1034 1671
End Blocks 893 7172991 1033 1124550 2501 11791710 2501 522081 1670 5116639+ 2436 6152863+
Id System 7 HPFS/NTFS с W95 FAT32 (LBA) f W95 Exfd (LBA) 82 Linux swap 83 Linux 83 Linux
Скопируйте имя устройства из столбца Device. А вот как команда fdisk отображает устройства USB: Disk /dev/sda: 65 MV. 65536000 bytes 8 heads. 32 sectors/track. 500 cylinders
156
Глава 9. Операции с файлами и разделами
Units - cylinders of 256 * 512 - 131072 bytes Device Boot /dev/sdal *
Start 1
End 499
Blocks 63586
Id System 6 FAT16
Комментарий Каждому запоминающему устройству соответствует блочное устройство в каталоге /dev. Имена устройств определяются способом физического подключения. Примеры: О /dev/hda — первичное устройство на IDE0 (весь диск); О /dev/hdb — вторичное устройство на IDE0 (весь диск); о /dev/fdO — флоппи-дисковод на контроллере 0, устройство 0; О /dev/fdl — флоппи-дисковод на контроллере 0, устройство 1; О /dev/sda — первый диск SCSI (весь диск); о /dev/sdb — второй диск SCSI (весь диск). Имена запоминающих устройств в Linux формируются по следующей схеме: О /dev/fd* — флоппи-дисководы; о /dev/hd* — дисководы IDE; О /dev/sd* — дисководы SCSI; О /dev/sd* — запоминающие устройства USB; О /dev/hd* - дисководы CD/DVD-ROM с интерфейсом IDE/ AT API; О /dev/sd* - дисководы CD/DVD-R/RW с интерфейсом IDE/ AT API; О /dev/sd*,/dev/hd* или/dev/XXXx4 — Zip-дисководы. Устройствам IDE и USB, использующим подсистему эмуляции SCSI, иногда присваиваются имена/dev/sr*, которые представляют собой символические ссылки на /dev/sd*. Если в вашей системе установлены исходные тексты ядра, поищите определения имен /dev в файле devices.txt.
См. также Глава 5; официальный список имен /dev (http://www.lanana.org/docs/device-list/ devices.txt или файл devices.txt в каталоге /usr/src/* вашей системы).
9.13. Создание файлов и каталогов Проблема Требуется упорядочить файлы, разместив их в каталогах. Но откуда берутся каталоги? И если на то пошло, как создать файл?
9.14. Удаление файлов и каталогов
157
Решение Воспользуйтесь командами mkdir и touch. Команда mkdir создает каталоги. Создание нового подкаталога в текущем каталоге: $ mkdir photos
Следующая команда создает новый каталог верхнего уровня (эта операция разрешена только суперпользователю): # mkdir /local_bins
При создании каталога можно указать разрешения: # mkdir -m 755 /shared
Чтобы создать подкаталог и все его родительские каталоги, используйте ключ -р: $ mkdir -p photos/scanned/jpgs/thumbs
Большинство файлов создается программами (текстовыми и графическими редакторами, компиляторами и т. д.). Пустой файл также можно создать командой touch: $ touch newfile.txt
Комментарий Команда touch обычно используется в сценариях для создания новых файлов, а также для заполнения каталогов файлами с целью тестирования.
См. также mkdir(l), touch(l).
9.14. Удаление файлов и каталогов Проблема Ваша система переполнена файлами и каталогами. Как удалить те из них, которые вам больше не нужны?
Решение Используйте команду rm (ReMove) — но будьте внимательны! Команда rm удаляет файлы и каталоги без предупреждения. Удаление одного файла с расширенным выводом: $ rm -v game-stats.txt removed 'game-stats.txt'
Удаление с запросом подтверждения: $ rm -vi dpkglist гт: remove regular f i l e 'dpkglist'?y removed 'dpkglist'
Ключ -г (Recursive) обеспечивает удаление каталога со всеми файлами и подкаталогами: $ rm -rvi /home/games/stats/baseball
158
Глава 9. Операции с файлами и разделами
Команда удаляет каталог /baseball вместе со всем содержимым. Для удаления групп файлов можно использовать метасимволы командного процессора: $ rm -v * . t x t
removed removed removed removed
'file4.txt' 'file5.txt' 'file6.txt' 'file7.txt'
Или: $ rm -v f i l e * ВНИМАНИЕ Ключ -f (Force) обеспечивает принудительное выполнение команды. Это очень опасно! Команда ничего не сообщает пользователю, а просто удаляет все на своем пути.
Комментарий Команда rm -rf / стирает всю корневую файловую систему. Некоторые личности предлагают новичкам выполнить ее, считая это забавной шуткой. Хотя обычно говорят «rm удаляет файлы», в действительности команда не удаляет файлы, а только отсоединяет их от i-узлов. Файл по-настоящему удаляется лишь после удаления всех жестких ссылок, указывающих на него, и перезаписи данных на диске. Рядовые пользователи могут удалять командой rm любые файлы в любых подкаталогах, доступных для них, но с каталогами дело обстоит иначе: команда rm удаляет только каталоги, принадлежащие данному пользователю. Команда touch на самом деле предназначена для изменения временных пометок файла. Ее применение для создания новых файлов может рассматриваться как неожиданный побочный эффект. Для удаления каталогов также существует команда rmdir. Эта команда отказывается удалять каталоги, содержащие какие-либо данные. На первых порах это помогает, но со временем начинает раздражать; многие программы создают файлы, не отображаемые в нормальных списках (имена файлов, начинающиеся с точки, обычно игнорируются; чтобы включить их в вывод, следует выполнить команду Is -а). Соответственно, при попытке выполнения rmdir команда скажет, что в каталоге еще остались файлы. Вероятно, со временем вы перейдете на команду rm -r.
См. также touch(l),rm(l).
9.15. Копирование, перемещение и переименование файлов и каталогов Проблема В системе существуют каталоги и файлы. Как перенести файл в другой каталог? Как сменить имя файла? И как создать его копию?
9.16. Создание дисковых разделов Linux командой fdisk
159
Решение Воспользуйтесь командами ср и mv. Следующая команда копирует два файла из текущего рабочего каталога в каталог ~/im a 9 e s 2 : $ ср -v navbar.gif redheart.gif ~/images2 'navbar.gif -> 7home/terri/images2/navbar.gif' 'redheart.gif -> 7home/terri/images2/redheart,gif
При перезаписи файлов можно воспользоваться ключом -Ь для создания резервных копий старых файлов в приемном каталоге: $ ср -bv icon-zip.gif main.gif ~/data2 'icon-zip.gif -> 7home/terri/data2/icon-zip.gif (backup: '/home/terri/data2/iconzip.gif) 'main.gif -> '/home/terri/data2/main.gif (backup: 7home/terri/data2/main.gif~')
Для сохранения полного пути к файлу используется ключ —parents: $ ср -v --parents -/homes/images/kitchen.jpg -7data2 1 'home/terri/homes/images/kitchen.jpg -> ' home/terri/data2/homes/images/ki tchen.jpg'
Ключ -s создает мягкие ссылки на файлы вместо копирования: $ ср -s navbar.gif redheart.gif ~/images2
Ключ -г копирует каталог со всеми подкаталогами: $ ср -rv -/homes/images/ /shared/archives
Операции перемещения и переименования осуществляются командой mv. Следующая команда перемещает два файла в другой каталог: $ mv -v about.gif arrow.gif ~/data2 'about.gif -> 7home/terri/data/about.gif' 'arrow.gif -> '/home/terri/data/arrow.gif
Пример переименования файла: $ mv -v down1oads.gif emaii.gif 'downloads.gif -> ' e m a i l . g i f
Комментарии В графических файловых оболочках (таких, как Nautilus, Konqueror, Midnight Commander, Gentoo File Manager, gmc и Rox Filer) операции переименования и копирования обычно выполняются быстрее и проще.
См. также
9.16. Создание дисковых разделов Linux командой fdisk Проблема Требуется разбить на разделы новый жесткий диск или создать раздел на базе свободного пространства па существующем жестком диске.
160
Глава 9. Операции с файлами и разделами
Решение Первый способ: загрузите систему с диска Knoppix и воспользуйтесь QTParted — замечательным графическим приложением, которое создает, удаляет, перемещает и изменяет размеры разделов без уничтожения данных. Программа даже позволяет изменять размеры разделов NTFS. Также можно воспользоваться программой fdisk. Пример создания первичного раздела: # fdisk /dev/hda The number of cylinders for this disk is set to 2501. There is nothing wrong with that, but this is larger than 1024. and could in certain setups cause problems with: 1) software that runs at boot time (e.g.. old versions of LILO) 2) booting and partitioning software from other OSs (e.g.. DOS FDISK. OS/2 FDISK) Command (m for help): n Command action 1 logical (5 or over) p primary partition (1-4) P Partition number (1-4): 3 First cylinder (511-1232. default 511): 511 Last cylinder or +size +sizeM or +sizeK (511-1232, defaultl232): +3000M Command (m for help): w The partition table has been altered! Calling ioctlO to re-read the partition table Syncing disks # Вот и все. Изменения можно отменить вплоть до того момента, когда нажатие w запишет новую таблицу разделов на диск. Клавиша m выводит меню команд, а клавиша q завершает работу программы. Чтобы сохранить какие-либо данные в новом разделе, необходимо перезагрузить компьютер и разместить в разделе файловую систему (см. следующий раздел).
Комментарий Команда Linux fdisk предназначена только для создания томов Linux. Для томов Windows следует использовать команду fdisk из MS-DOS. Далее приводится список часто используемых команд fdisk: О т — вывод справки; О р — отображение текущей таблицы разделов; О d — удаление раздела; О п — создание нового раздела; О w — запись таблицы разделов на диск; О I — отображение списка типов файловых систем; О q — завершение работы fdisk без внесения каких-либо изменений.
9.17. Создание файловой системы в новом разделе
161
См. также fdisk(8).
9.17. Создание файловой системы в новом разделе Проблема На диске был создан новый раздел. Но пользоваться им еще нельзя; сам по себе раздел — не более чем фрагмент дискового пространства. Как разместить на нем файловую систему?
Решение Воспользуйтесь командой той файловой системы, которую вы собираетесь использовать. Ext2 Ext3 ReiserFS JFS XFS
#mke2fs/dev/hda3 #mke2fs-j/dev/hda3 # mkreiserfs/dev/hda3 #mkfs.jfs/dev/hda3 # mkfs.xfs /dev/hda3
Комментарий Команда mke2fs предназначена для создания файловых систем Ext2/3. Она является частью пакета e2fsprogs, загружаемого с сайта http://e2fsprogs.sourceforge.net. Команда mkreiserfs входит в поставку ReiserFS и является частью reiserfsprogs. Ее можно загрузить по адресу http://www.namesys.com. Команда mkfs.jfs входит в семейство jfsutils (http://www-124.ibm.com/jfs/). Команда mkfs.xfs входит в семейство xfsprogs (http://oss.sgi.com/project/xfs).
См. также Раздел «Введение» настоящей главы; JFS (http://www-124.ibm.com/jfs/); XFS (http:// oss.sgi.com/project/xfs); ReiserFS (http://www.namesys.com/); Ext2/3 (http:// e2fsprogs.sourceforge.net/ext2.html).
Глава 10
Заплатки, настройка и обновление ядра 10.1. Введение Установка заплаток, настройка и обновления ядра Linux — весьма полезные операции, и ничего страшного в них нет. Они принадлежат к числу немногочисленных операций администрирования, требующих перезагрузки, и это обстоятельство может огорчить администраторов, гордящихся длительным временем непрерывной работы. В остальном эта процедура ничем не хуже, чем установка заплаток или обновление любых других программ. Вам потребуются исходные тексты ядра и дсс, компилятор GNU С. Исходные тексты ядра можно получить из двух источников: на сайте вашего дистрибутива Linux или по адресу http://kernel.org. Разные дистрибутивы Linux в разной степени модифицируют ядро. Red Hat, SuSE и Mandrake вносят значительные изменения, Debian и Slackware ограничиваются минимальными модификациями. Установка «эталонного» ядра с сайта http://kernel.org может привести к нарушению работы дистрибутивов, использующих модифицированное ядро, поэтому лучше использовать исходные тексты ядра для вашего дистрибутива (в главах 2 и 3 рассказано, где достать и как установить программное обеспечение Linux, а в разделе 4.2 описан процесс сборки). Как и в большинстве программ Linux, при установке заплатки вы не модифицируете существующее ядро. Заплатка применяется к исходным текстам, по которым затем строится новый двоичный файл, поэтому в итоге вы получаете два ядра. Это хорошо, потому что у вас остается исходное ядро на тот случай, если новое ядро не загрузится. Вы можете установить несколько различных ядер и протестировать последние версии в разных конфигурациях. Основные причины для модификации ядра: О оптимизация ядра для конкретного оборудования; о использование новых возможностей; О исключение ненужных функций; О тестирование новых функций; О обновление системы.
10.1. Введение
163
Настройка нового ядра Настройка конфигурации является не только самым длительным, но и самым важным этапом сборки нового ядра. На этом этапе вы решаете, какое оборудование, файловые системы, функции энергосбережения и т. д. будут поддерживаться ядром. В вашем распоряжении более сотни разных параметров и для каждого нужно принять три потенциальных решения: нужно ли включать данную возможность, и если нужно — оформить ли ее в виде загружаемого модуля или статически откомпилировать в ядро? Как правило, если возможно построить модуль, следует выбрать именно этот вариант. Модули экономят память, поскольку память для них выделяется лишь в случае их фактического использования. Кроме того, обновить или установить отдельный модуль проще, чем перестраивать все ядро. Программа конфигурации ядра содержит справку почти но каждому параметру. В справке говорится, можно ли оформить некоторую функцию в виде модуля или ее необходимо встроить в базовое ядро. Здесь вы найдете информацию о том, для чего нужна каждая функция, и рекомендации на случай, если вы не уверены, следует ли включать соответствующий режим. Если справки нет и вы не знаете, что делать — включайте. В худшем случае вы получите более громоздкое ядро с неиспользуемыми возможностями. Программа конфигурации ядра не позволит реализовать в виде модуля те функции, которые должны быть частью базового ядра. У этого правила есть лишь одно важное исключение: драйвер дискового устройства, содержащего корневую файловую систему. Вообще говоря, этот драйвер должен быть встроен в базовое ядро, чтобы система могла загрузиться, иначе возникает «порочный круг»: драйверы необходимы для загрузки корневой файловой системы, но файловая система не может загрузиться, потому что драйверы находятся в ней. Если драйверы не встраиваются в ядро, вам придется создать образ initrd. Im'trd создает исходный виртуальный диск, который загружает драйверы дисковых устройств, что позволяет загрузить систему. Бытует распространенное заблуждение, будто система с загружаемыми модулями работает медленнее, чем монолитное ядро. На самом деле обращение к функциям сводится к простой передаче управления по адресу памяти, так что никаких различий в скорости не существует. Для настройки ядра 2.4 используется программа menuconfig, а для настройки ядра 2.6 — либо menuconfig, либо xconfig. Программа menuconfig создана на базе ncurses, так что вам не понадобится X. Если поддержка ncurses не установлена, либо установите ее, либо используйте исходную программу настройки ядра config, но это просто ужасно. Процесс затягивается на целую вечность, и если вы допустите хотя бы одну ошибку, все придется начинать заново. Программа xconfig была полностью переработана для ядра 2.6. Она чрезвычайно эффективна и удобна, а по каждому параметру пользователь может получить содержательную справку. Для ее запуска вам понадобится Qt, qt-devel, gtt и X. На рис. 10.1 показан пользовательский интерфейс xconfig во всей красе. Дерево сборки ядра содержит объемистую документацию; загляните в каталог linux-$VERSIOn/Documentation. В каталоге Linux-$VERSION/README содержатся важные указания по поводу установки, а в каталоге linux-$VERSION/Documentation/ Changes — важная информация о версиях дсс и других используемых программах.
Глава 10. Заплатки, настройка и обновление ядра
164
ь maturity level options General setup : '••-D Configure standard kernel features (Го* •Loadable module support Processor type and features ; -Firmware Dnvers : Power management options (ACPI, АРМ) .• j-ACPI (Advanced Configuration and Powe. I -АРМ (Advanced Ролег Management) Bid: : - CPU Frequency scaling •Bus Options (PCI. PCMCIA. EISA, MCA, ISA). !••• PCMCIA/CardBus support L PCIHotplu_ Support -••Executable file formats •• :• Device Drivers •• --Generic Driver Options [~ Memory Technology Devices (MT D) • ;•• Parallel port support j Plug and Piay support ;• Block devices
L
;• SCSI device support !- Old CD-ROM dnvers (not SCSI, not IDE) • :•• Multi-device support (RAID and LVMJ |- Fusion MPT device support I IEEE 1394 (FireWire} support I I2O device support IT';•Networking support ; hOAmateur Radio support i %-Ш1гОА (infrared) lubsyitsn suppc
0ATA/ATAPI/MFM/RLL support — й Enhanced IDE/MFM/RLL disk/cdrcm/tape/fioppy suppon У Pr*Uf set DocumentatiarVide.tttfor rifeip/info on IDE drives > D Support for SATA (deprecated; conflicts with libata 3ATA driver] (NEW) г О Use old disk-only driver on primary lnterrac_e e multi-mode oy default ! В PCMCIA IDE support iSInclude IDE/ATAPI CDROM support i-SlnclLidc IDE/AT API TAPE support (EXPERIMENTAL) i s Include IDE/ATAPI FLOPPY support h BSCSI smulation support ; D I D E TDSkfile Access
Include IDE/ATA-2 DISK Support (BLK_DEV_IDEDISK) This will include enhanced support for MFM/RLL/IDE hard disks. IT you nave a MFM/RLUIDE disk, and tnere is no special reason to use the old hard dish dnver instead sayY if you have an SCSl-unty system, you can say N here. To compile this driver as a module, choose M here; the module will be called ide-disk. Do not compile this driver as a module if your root file system (the one containing the directory/) is located an the IDE disk. if unsure, say Y.
. .
••.••••iv-.-..
_ ._
_
„
_
_
„
Рис. 1 0 . 1 . Пользовательский интерфейс xconfig
10.2. Добавление новых возможностей в ядро 2.4 Проблема Требуется включить в ядро 2.4 новые возможности — например, поддержку нового оборудования, новых файловых возможностей или сетевых функций. Допустим, вы купили жесткий диск с интерфейсом USB для архивации данных, а раньше в системе USB-устройства не использовались. Как узнать, поддерживает ли система USB? И если не поддерживает — как добавить поддержку?
Решение Загрузите свежие исходные тексты ядра и откомпилируйте ядро с использованием существующего файла .config, добавив в него новые возможности. Предварительно сделайте следующее: О убедитесь в том, что на диске имеется не менее 500 Мбайт свободного пространства для процесса сборки; О распечатайте выходные данные dmesg, Iscpi, cat/proc/cpuinfo и Lsusb (за дополнительной информацией обращайтесь к главе 5); о
создайте резервную копию всех данных и держите под рукой загрузочный диск аварийного восстановления;
О найдите файл .config ядра.
10.2. Добавление новых возможностей в ядро 2.4
165
Чтобы добавить новые возможности в существующее ядро, загрузите новые исходные тексты той лее версии ядра. Версия ядра выводится командой uname: $ uname -r 2.4.22
Распакуйте новые исходные тексты ядра в подкаталог, находящийся в вашем домашнем каталоге, — например, ~/ s r c : $ tar xvjf 1inux-2.4.22.tar.bz2 Отредактируйте make-файл нового ядра (~/src/linux-2.4.22/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-newkernel. Выполните следующие команды из каталога /~/src/linux-2.4.22: $ make mrproper
Скопируйте файл .config в каталог/~/src/linux-2.4.22. Переходите к настройке нового ядра. Программа конфигурации задаст многочисленные вопросы; на этом этапе выбираются новые возможности: $ make oldconfig
Выполните следующие команды: $ make dep $ make bzlmage $ make modules $ su # make modules_install # cp ~/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-new-kernel # cp ~/src/linux-2.4.22/System.map /boot/System.map-2.4.22-new-kernel
Наконец, чтобы использовать новое ядро, включите его в загрузчик и перезагрузите компьютер. В GRUB соответствующая запись выглядит примерно так: title Kernel 2.4.22. new kernel root (hdO.O) kernel
/boot/vmlinuz-2.4.22-new-kernel rooWdev/hdal ro
Пользователи LILO делают следующее: image=boot/vmlinuz-2.4.22-new-kernel labe1=Kernel 2.4.22. new kernel root=/dev/hdal read-only
И не забудьте перезапустить LILO, чтобы новая конфигурация была записана в загрузочную запись: # /sbin/1-По
Сохраните копию нового файла .config в каталоге за пределами дерева сборки, чтобы файл не был случайно удален или заменен. Присвойте ему новое, содержательное имя: $ cp ~/src/linux-2.4.22/.config -/kernel-configs/.config-2.4.22-jan-04
Если вы убедились в том, что новое ядро работает нормально, можно удалить старое ядро, его каталог/lib/modules/$VERSION, дерево сборки и записи загрузчика (а если не хотите, оставьте их в системе).
166
Глава 10. Заплатки, настройка и обновление ядра
Комментарий В документации часто рекомендуется разместить исходные тексты ядра и дерево сборки в каталоге /usr/src/linux, но делать этого не следует. В файле README ядра прямо сказано: «НЕ ИСПОЛЬЗУЙТЕ область /usr/src/linux! Она содержит (обычно неполный) набор заголовков, используемых библиотечными заголовками ядра. Заголовки должны соответствовать библиотеке и не зависеть от текущей версии ядра». Также не стоит злоупотреблять правами root и использовать каталог, требующий доступа root. Ядро может строиться где угодно, даже на полностью изолированном компьютере.
Поиск файла .config Если ранее вы строили ядро в своей системе, файл .config будет находиться на верхнем уровне старого дерева сборки. Если сборка ядра не выполнялась, поищите в каталоге /boot, куда этот файл помещается большинством дистрибутивов. Файл в каталоге /usr/src/linux, скорее всего, является обобщенным и бесполезным для вашей конкретной конфигурации. Если в системе нет файла .config, перейдите к разделу 10.3, потому что вам придется настраивать конфигурацию ядра «с нуля». Команда make oldconfig будет работать, но она использует конфигурацию по умолчанию из дерева сборки, совершенно не соответствующую вашей системе. Команда make oldconfig сообщает, какой файл она использует: $ make oldconfig # Using defaults found in arch/i386/defconfig Этот файл вам не подходит! В выходных данных должно быть сказано: # Using defaults found in .config Прервите выполнение команды клавишами Ctrl+C и начните заново.
См. также Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра.
10.3. Усечение типового ядра 2.4 Проблема Требуется переделать ядро, входящее в ваш дистрибутив, и убрать из него все лишние драйверы, а также избавиться от поддержки ненужного оборудования и функций.
Решение Загрузите новые исходные тексты той же версии ядра, откомпилируйте новое ядро и настройте его конфигурацию «с нуля». Версия ядра выводится командой uname: $ uname -r 2 4 22
10.3. Усечение типового ядра 2.4
167
Предварительно сделайте следующее: О убедитесь в том, что на диске имеется не менее 500 Мбайт свободного пространства для процесса сборки; О распечатайте выходные данные dmesg, Lscpi, cat/proc/cpuinfo и Isusb (за дополнительной информацией обращайтесь к главе 5); О создайте резервную копию всех данных и держите под рукой загрузочный диск аварийного восстановления. Распакуйте новые исходные тексты ядра в подкаталог, находящийся в домашsrc: нем каталоге, — например, ~ / $ tar cvjf Iinux-2.4.22.tar.bz2 src
Отредактируйте make-файл нового ядра (~/ /unux-2.4.22/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-slim-kemel. Выполните следующие команды из каталога /~/src/linux-2.4.22: $ make mrproper $ make menuconfig $ make dep $ make bzlmage $ make modules
$ su
$ make modulesinstali # cp ~/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-new-kernel # cp -/src/1inux-2.4.22/System.map /boot/System.map-2.4.22-new-kernel В процессе настройки ядра следует помнить, что вы начинаете «с пустого места», поэтому необходимо включить каждую используемую функцию. Также проследите за тем, чтобы ненужные функции не включались. Некоторые базовые возможности, которые вам наверняка понадобятся: О поддержка загружаемых модулей, встроенная в ядро; О поддержка двоичных форматов a.out, ELF и MISC (в меню General Setup); О поддержка всех загрузочных устройств (дисков IDE, CD-ROM, флоппи-дисководов, дисков SCSI и USB), встроенная в ядро. Если не включать эти функции или оформить их в виде модулей, для загрузки системе понадобится ramdisk (образ initrd). После завершения настройки включите новое ядро в загрузчик, перезагрузите компьютер и радуйтесь жизни. Не забудьте скопировать новый файл .config в каталог, находящийся за пределами дерева сборки, чтобы защитить его от случайного удаления или замены.
Комментарий Описанная процедура настраивает новое ядро «с нуля». Команда make oldconfig не подходит, потому что она не изменяет старую конфигурацию, а позволяет только добавить в нее новые возможности. Типичное базовое ядро занимает около 1-3 Мбайт (в сжатом виде). Некоторые администраторы предпочитают усекать свое ядро до абсолютного минимума. На сервере, особенно доступном из Интернета, по соображениям безопасности стоит использовать как можно более компактное ядро. Впрочем, на настольных
168
Глава 10. Заплатки, настройка и обновление ядра
системах и рабочих станциях небольшая избыточность не столь существенна и может быть даже удобной для внесения будущих изменений.
См. также Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра; раздел 10.2.
10.4. Обновление до последней стабильной версии ядра 2.4 Проблема Вы слышали, что к ядру вышло много обновлений и заплаток. Вам хотелось бы обновить старое ядро до последней стабильной версии (например, с 2.4.22 на 2.4.25), потому что это самый быстрый способ установки всех обновлений и заплаток.
Решение Создайте резервную копию всех данных и держите под рукой диск аварийного восстановления. Распечатайте выходные данные dmesg, Lscpi, cat/proc/cpuinfo и Isusb. Распакуйте новые исходные тексты ядра в подкаталог, находящийся в домашнем каталоге, — например, ~/src: $ tar xvjf Iinux-2.4.25.tar.bz2 Отредактируйте make-файл нового ядра (~/src/linux-2.4.25/Makefile) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-newkernel. Выполните следующие команды из каталога /~/src/linux-2.4.25: $ make mrproper Чтобы использовать существующий файл .config, скопируйте его в ~/src/linux-2.4.25 и продолжайте выполнять приведенные инструкции. В противном случае вернитесь к разделу 10.3. Выполните следующие команды: $ make oldconfig $ make dep $ make bzlmage $ make modules $ su # make modules-install # cp -/src/linux-2.4.25/arch/i386/boot/bzImage /boot/vmlinuz-2.4.25-new-kernel # cp -7src/linux-2.4.25/System.map /boot/System.map-2.4.25-new-kernel Включите новое ядро в загрузчик и перезагрузите компьютер.
10.5. Построение ядра 2.6
169
Комментарий На сайтах http://Lwn.net и http://kernetlrap.org публикуется самая свежая информация о новостях, изменениях, усовершенствованиях и проблемах в области ядра Linux.
См. также Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра; раздел 10.2.
10.5. Построение ядра 2.6 Проблема Вы хотите опробовать ядро 2.6, но для этого нужно знать новые команды сборки, отличающиеся от команд ядра 2.4.
Решение В данном примере будет использоваться ядро версии 2.6.3. Создайте резервную копию всех данных и держите под рукой загрузочный диск аварийного восстановления. Распечатайте выходные данные dmesg, Iscpi, cat/proc/cpuinfo и Isusb. Загрузите и распакуйте новые исходные тексты ядра в подкаталог, находящийся в домашнем каталоге, — например, ~/src. Перейдите в каталог верхнего уровня нового дерева исходных текстов (~/src/linux-2.6.3). Отредактируйте make-файл нового ядра (~/src/linux-2.6.3/MakefHe) и присвойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-test. Выполните следующие команды: $ make шгргорег $ make xconfig $ make #make moduiesjnstail # cp ~/src/linux-2.6.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.3-test # cp ~/src/linux-2.6.3/System.map /boot/System.map-2.6.3-test Сохраните копию нового файла .config в каталоге за пределами дерева сборки. Включите новое ядро в загрузчик и перезагрузите компьютер.
Комментарий Для запуска xconfig вам понадобится Qt, qt-devel и X. Также можно использовать программу menuconfig. Команда make без параметров заменяет make dep, make bzlmage и make modules.
170
Глава 10. Заплатки, настройка и обновление ядра
См. также Раздел «Введение» настоящей главы; электронная справка в программе настройки ядра; раздел 10.2.
10.6. Добавление новых возможностей в ядро 2.6 Проблема Требуется добавить новые возможности в ядро 2.6.
Решение Выполните инструкции из раздела 10.5, но вместо xconfig используйте oldconficr $ make mrproper
Скопируйте существующий файл .config в каталог/~/src/linux-2.6.3. Выполните следующие команды: $ make oldconfig $ make $ su # make modulesinstall # cp ~/src/linux-2.6.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.3-test # cp ~/src/1inux-2.4.22/System.map /boot/System.map-2.4.22-test
Включите новое ядро в загрузчик и перезагрузите компьютер.
Комментарий Не пытайтесь использовать старый файл .config от версии 2.4 — ядра сильно различаются, и у вас будет много проблем. Команда make без параметров заменяет make dep, make bzlmage и make modules.
См. также Документация в дереве сборки ядра; раздел «Введение» настоящей главы; раздел 10.2.
10.7. Добавление нового загружаемого модуля ядра Проблема В системе было установлено новое оборудование (сетевая или звуковая карта, устройство USB). Требуется установить новый модуль ядра (драйвер) для этого устройства.
10.8. Установка заплаток ядра
171
Решение В ядрах 2.4 и 2.6 используется одна и та же процедура. Перейдите в каталог с деревом сборки (например, ~/src/linux-2.4.25). Вам потребуется актуальный файл .config; скопируйте его на верхний уровень дерева сборки и выполните следующую команду: # make oldconfig
В процессе настройки конфигурации найдите нужный драйвер и выберите его оформление в виде модуля (например, модуль tulip является универсальным драйвером для многих карт Ethernet). Затем выполните команды: $ make dep $ make modules
# make modules install # depmod -av Загрузите модуль командой modprobe: # modprobe tulip Процесс не требует перезагрузки системы.
Комментзрии Если использовать oldconfig почему-либо не удастся, используйте make menuconfig. Правда, это займет больше времени, и вам придется следить за тем, чтобы не упустить что-нибудь важное. При установке сторонних модулей; не входящих в дерево ядра, следует руководствоваться инструкциями производителя. Стандартная процедура включает загрузку исходных текстов, сборку модуля и его загрузку командой modprobe. Некоторые производители (например, nVidia) включают сценарий, который делает все за вас. Как правило, дистрибутивы проверяют оборудование при загрузке и автоматически загружают нужные модули. Если этого не происходит, вам придется внести изменения в стартовые файлы. В Red Hat и SuSE модуль включается в файл /etc/ modules.conf; в Debian используется файл/etc/modules, а в Slackware — файл re.modules. Еще более простой способ — включить в ядро поддержку kmod, автоматического загрузчика модулей. В большинстве дистрибутивов она включается по умолчанию. В программах настройки конфигурации ядра для этой цели используется пункт «Automatic kernel module loading» (ядро 2.6) или «Kernel module loader» (2.4) в категории «Loadable module support». He используйте программу kerneld; начиная с ядра 2.2, вместо нее используется kmod.
См. также Раздел «Введение» настоящей главы; раздел 10.2.
10.8. Установка заплаток ядра 11рООЛсМа Требуется установить заплатку ядра, чтобы добавить поддержку новых возможностей, исправить ошибку, протестировать новые функции и т. д.
172
Глава 10. Заплатки, настройка и обновление ядра
Решение Загрузите заплатку и примените ее к исходным текстам ядра. Затем откомпилируйте и постройте новое ядро. В нашем примере ядро 2.6.3 будет обновлено до версии 2.6.4. Заплатка должна находиться в каталоге второго уровня дерева сборки: $ Is ~/src linux-2.6.3
patch-2.6.4.bz2
Перейдите в каталог верхнего уровня дерева сборки, распакуйте и примените заплатку: $ cd linux-2.6.3 $ bzip2 -de ../patch-2.6.4.bz2 | patch -s -pi
Ключ -dry-run позволяет протестировать команду: $ bzip2 -de ../patch-2.6.4.bz2 | patch -s -pi --dry-run
Настройте конфигурацию и проведите сборку ядра. В дерево сборки предусмотрительно включен сценарий/scripts/patch-kernel для применения заплаток. Этот сценарий особенно полезен при установке нескольких заплаток, поскольку он автоматически применяет их в нужном порядке. Выполните в каталоге верхнего уровня команду $ scripts/patch-kernel Заплатки должны применяться по очереди, и все они должны находиться в системе. Например, для использования заплатки patch-2.6.5-rc6 вам также понадобятся первые пять заплаток в серии (rcl-rc5).
Комментарий Заплатки ядра существуют в нескольких разновидностях. Заплатки re (Release Candidates) находятся в одном шаге от включения в стабильное ядро, а кандидаты рге (РгеRelease) — в двух шагах. Если вам не терпится использовать новую возможность, но вы не хотите ждать новой стабильной версии, устанавливайте заплатки гс и рге. Официальные версии ядра на сайте KerneL.org хорошо протестированы и готовы к эксплуатации. Версии с четными номерами являются стабильными, а версии с нечетными номерами находятся в процессе разработки. Ядро Linux активно поддерживается вплоть до версии 2.0, а в архивах можно найти все версии ядра до первых версий Linux.
См. также patch(l); Kernel Newbies (http://kernelnewbies.org); Kernel.org (http://kernel.org).
10.9. Удаление заплатки ядра Проблема Вы установили заплатку ядра, но теперь хотите избавиться от нее. Возможно, ядро стало работать нестабильно, а может, вы допустили ошибку и хотите начать все заново.
10.10. Создание образа initrd
173
Решение Воспользуйтесь той же командой, которая применялась для распаковки заплатки, и добавьте и нее ключ -R: $ bzip2 -de ../patch-2.6.4.bz2 | patch -s -pi -R
См. также patxh(l); kernel Newbies (http://kernelnewbies.org); kernel.org (http://kernel.org).
10.10. Создание образа initrd Проблема В системе используются диски SCSI. Из-за разнообразия драйверов SCSI вы хотите, чтобы драйверы загружались в виде модулей. В этом случае диски или контроллеры можно будет менять без повторной сборки ядра, а вам не хотелось бы отягощать ядро включением всех возможных драйверов. Но как перезагрузить систему без встраивания драйвера SCSI в базовое ядро?
Решение Постройте образ initrd (виртуальный диск) командой mkinitrd после сборки ядра. Затем включите в загрузчик запись для загрузки образа. В ядрах 2.4 и 2.6 команда mkinitrd выполняется после команды make modulesjnstall: # mkinitrd -o /boot/initrd-2.4.25-new.kernel.img
Команда строит образ и устанавливает его в каталог /boot; остается лишь создать записи в загрузчике. В GRUB: title Kernel 2.4.25. new kernel root (hdO.O) kernel /boot/bzImage-2.4.25-new-kernel rooWdev/hdal ro initrd /boot/initrd-2.4.25-new-kernel.img Пользователи LILO делают следующее: image=/boot/bzIrnage-2.4.22- new-kernel initrd=/boot/initrd-2.4.25-new-kernel.img label=Kernel 2.4.22. new kernel root=/dev/hdal read-only
He забудьте выполнить /sbin/lilo, чтобы активировать изменения.
Комментарий Обязательно прочитайте man-страницу mkinitrd, поскольку состав параметров может зависеть от дистрибутива. Ничто не мешает вам встроить драйвер SCSI в базовое ядро; использование initrd не является обязательным.
174
Глава 10. Заплатки, настройка и обновление ядра
Как правило, в дистрибутивах Linux используется initrd, чтобы типовое ядро могло загружаться в большинстве систем без встраивания всех возможных драйверов.
См. также mkirritrd(8).
10.11. Создание загрузочного диска в Debian Проблема Вы забыли создать загрузочную дискету при установке системы Linux и хотите создать ее сейчас. Вы умеете создавать загрузочные дискеты для G RUB или LILO, а также знаете, что вы можете бесплатно загрузить и записать диск Knoppix. Но все, что вам нужно, — это обычная загрузочная дискета для системы Debian.
Решение Вам потребуется утилита mkboot и чистая дискета. По умолчанию загрузочный диск создается с использованием vmlinuz и текущего корневого раздела: $ mkboot Создание загрузочного диска с указанием ядра: $ mkboot vmlinuz-2.4.21 Также можно указать другой корневой раздел и ядро: $ mkboot /dev/hda2 vmlinuz-2.4.21
Если флоппи-дисковод имеет нестандартное расположение, укажите его с ключом -d: $ mkboot -d /dev/fdl
Комментарий Программа mkboot входит в пакет debianutils. Не забудьте защитить дискету от записи, сдвинув вверх небольшую защелку. Всегда проверяйте загрузочные диски, прежде чем откладывать их для хранения. Диск должен храниться вместе с той системой, для которой он был создан.
См. также mkboot(8).
10.12. Создание загрузочного диска в Red Hat Проблема Вы забыли создать загрузочную дискету при установке системы Linux и хотите создать ее сейчас. Вы умеете создавать загрузочные дискеты для GRUB или LILO,
10.12. Создание загрузочного диска в Red Hat
175
а также знаете, что вы можете бесплатно загрузить и записать диск Knoppix. Но все, что вам нужно, — это обычная загрузочная дискета для системы Red Hat/Fedora.
Решение Вам потребуется утилита mkbootdisk и чистая дискета. Создание загрузочного диска с указанием ядра: $ mkbootdisk vmiinuz-2.6.5-1.358 По умолчанию команда mkbootdisk не выводит данных. Ключ —verbose включает режим расширенного вывода: $ mkbootdisk --verbose vmiinuz-2.6.5-1.358 Если имя флоппи-дисковода отлично от /dev/fdO, укажите его в командной строке mkbootdisk: $ mkbootdisk --device /dev/fdl vmlinuz-2.6.5-1.358
Комментарий He забудьте защитить дискету от записи, сдвинув вверх небольшую защелку. Всегда проверяйте загрузочные диски, прежде чем откладывать их для хранения. Диск должен храниться вместе с той системой, для которой он был создан.
см. также mkbootdisk(8).
Глава 11 Запись CD и DVD
11.1. Введение Для системы Linux написано немало программ создания и записи CD/DVD. В настоящее время эта область стремительно развивается, и стандарты CD/DVD еще находятся в хаотическом состоянии. Существует несколько конкурирующих несовместимых стандартов, и на горизонте маячат новые стандарты — крупные компании все стремятся создать «волшебный диск», который можно было бы воспроизводить, по нельзя скопировать. Однако в настоящей главе наше внимание будет сосредоточено не на этой волнующей истории, а на базовых приемах записи дисков CD и DVD с данными. Вам потребуются пакеты cdrtools и dvd+rw-tools. Для простого создания дисков используйте КЗЬ — графический интерфейс для cdrtools, cdrdao, mkisofs, growisofs и других утилит командной строки. КЗЬ упрощает подготовку дисков и предоставление пользователям привилегий root, необходимых для работы cdrecord и cdrdao. Программа логична и проста в работе; лично я считаю ее лучшим средством записи CD/DVD на всех платформах. Конечно, в мире Linux существует много других альтернатив, в том числе GCombust, X-CD-Roast и Gnome Toaster. Все эти программы просты в использовании, поэтому в настоящей главе будут использоваться средства командной строки. Хорошее владение ими также упростит работу с графическими программами, потому что вы будете понимать их команды и экзотическую терминологию. Главное новшество ядра 2.6 заключается в том, что для дисков CD/DVD больше не требуется эмуляция SCSI. Вместо того чтобы определять адреса шины SCSI командой cdrecord scanbus, просто укажите имя устройства: # cdrecord dev=/dev/hdc <команды> ВНИМАНИЕ Если вы обновили ядро 2.4 до ядра 2.6, а для работы с дисководами CD/DVD ранее использовался интерфейс IDE-SCSI, проследите за тем, чтобы записи IDE-SCSI были удалены из загрузчика. В противном случае загрузка будет сопровождаться странными ошибками.
11.1. Введение
177
Форматы и стандарты Далее перечислены основные аппаратные стандарты. О CD-R— записываемый компакт-диск; также встречается термин WORM (Write Once, Read Many). Диски CD-R универсальны и должны читаться в любом дисководе CD-ROM. О CD-RW — перезаписываемый компакт-диск, или WMRM (Write Many, Read Many). Диски CD-RW читаются всеми современными дисководами. О CD-ROM — Compact Disc Read-Only Memory. Коммерческие диски производятся штамповкой, а не записываются лазерным лучом, поэтому запись на них невозможна. О Mount Rainier Re Write — электроника, необходимая дисководу для поддержки UDF. О DVD-Video — стандарт коммерческих видеодисков, воспроизводимый на всех устройствах DVD. О DVD-R и DVD+R — формат WORM; воспроизводится всеми проигрывателями DVD. DVD-R существует в двух разных несовместимых типах дисков: DVD-R(A) и DVD-R(G). Диски А не могут использоваться в устройствах записи G, и наоборот. О DVD-RAM — перезаписываемые диски, предназначенные для хранения данных. Теоретически один диск способен выдержать до 100 000 операций перезаписи. Диск также может использоваться для записи и воспроизведения фильмов на PC, но, скорее всего, обычный проигрыватель DVD не сможет прочитать диск в формате DVD-RAM. О DVD-R/RW — формат, разработанный для записи фильмов и поддерживаемый DVD Forum (http://www.dvdforum.com). о DVD+R/RW — конкурирующий стандарт, несовместимый с DVD-R/RW и поддерживаемый DVD+RW Allianec (http://www.dvdrw.com). Только DVD+R/ RW поддерживает UDF. Дисководы DVD нового поколения поддерживают все форматы. Автономные проигрыватели DVD все еще участвуют в войне стандартов между форматами DVD+ и DVD-. Стандарты файловых систем CD и DVD. О El Torito — спецификация формата загружаемого диска. О UDF (Universal Disk Format) — стандарт файловой системы с инкрсментной записью пакетов. Позволяет переносить файлы прямо на диск, как на дискету 3,5". Предполагалось, что в ядре Linux 2.6 будет реализована полноценная поддержка UDF, но этого не произошло. О ISO-9660 — старый стандарт с поддержкой имен файлов в формате 8.3 (из доисторической эпохи MS-DOS, когда имена файлов содержали до 8 символов и файл имел расширение из 3 символов).
178
Глава 11. Запись CD и DVD
О Rock Ridge — расширение ISO-9660 с поддержкой длинных имен и символических ссылок в стиле Unix. Сохраняет все атрибуты файла, в том числе владельца и разрешения. При чтении дисков в системе Windows файловые атрибуты Unix не отображаются. О Joliet — расширение ISO-9660 компании Microsoft. Позволяет использовать в именах файлов символы Юникода, а также поддерживает длинные имена. Кроме того, создает усеченные имена файлов с целью совместимости с MSDOS (странные имена вида FILENA~1.TXT). Имена файлов содержат до 64 символов, могут включать пробелы и читаются на компьютерах с системой Windows 95 и выше, а также на компьютерах Macintosh с расширением Joliet Volume Access. На Mac не читаются имена файлов joliet длиной более 31 символа. Документация по стандартам CD: О Yellow Book — физический формат компакт-дисков с данными; О Orange Book — физический формат записываемых компакт-дисков с поддержкой многосеансовой записи; о Red Book — стандарт CD Audio, описывающий физические свойства диска и кодировку оцифрованного звука. Если вас интересуют технические подробности, перечисленные книги можно приобрести на сайте http://www.licensing.pholips.com. Важные термины из области записи дисков: О сеанс — сегмент диска, записанный за один раз и содержащий файлы данных или музыкальные дорожки. Диск может содержать несколько сеансов; О дорожка — программная область компакт-диска делится на дорожки; каждая дорожка может содержать данные только одного диска. Диск (даже DVD) может содержать не более 99 дорожек; О многосеансовая запись — позволяет постепенно добавлять файлы на диск (вместо того, чтобы записывать их все за один раз). Чтобы диск мог быть прочитан, его необходимо «закрыть», то есть зафиксировать, однако в этом случае добавить на него новые файлы уже не удастся; О SAO (Session-At-Once) — один полный сеанс: вводная запись (lead-in), программа и выводная запись (lead-out) на диске CD-R или CD-RW, записанная одной непрерывной операцией; О DAO (Disk-At-Once) — запись всего компакт-диска за один проход, или сеанс. Процесс записи должен завершиться без перебоев, и добавить к нему новые сеансы невозможно. Это самый надежный способ записи звуковых дорожек; О ТАО (Track-At-Once) — возможность выполнения записи за несколько проходов. Максимальное количество дорожек на диске равно 99. Дополнительная информация о DVD приведена в DVD FAQ.no адресу http:// www. dvddemysti fied.com/dvdfaq. html. Дополнительная информация о CD приведена в CD Recordable FAQ по адресу http://www.cdrfaq.org.
11.2. Определение адресов SCSI для записывающих дисководов CD и DVD
179
11.2. Определение адресов SCSI для записывающих дисководов CD и DVD Проблема В вашей системе используется ядро 2.4. Чтобы записать диск CD или DVD, необходимо знать адрес шины SCSI (параметр dev=) для вашего устройства записи.
Решение Команда cdrecord -scanbus вернет необходимую информацию. Конфигурация отдельной системы с CD/DVD-ROM и устройством записи CD может выглядеть так: $ cdrecord -scanbus Cdrecord 1.10 (i686-pc-1inux-gnu) Copyright (C) 1995-2001 J r g S c h i l l i n g Linux sg d r i v e r v e r s i o n : 3.1.24 Using l i b s c g version ' s c h i l y - 0 . 5 ' scsibusO:
0.0.0 0) 'TOSHIBA' 'DVD-ROM SD-M1202'. '1020' Removable CD-ROM 0.1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM 0.2,0 2) * 0.3.0 3) * 0.4.0 4) * 0.5,0 5) * 0.6.0 6) * ' Устройства записи DVD выглядят так: 1.2,0 2) 'PIONEER ' 'DVD-ROM DVD-303 ' ' 1 . 0 9 ' Removable CD-ROM
Первые три числа задают шину SCSI, код устройства и код LUN (Logical Unit Number) соответственно. Четвертое число снова повторяет код устройства. В параметре cdrecord нужно передать три первых числа в следующем формате: dev=0.1,0
Комментарий Для выполнения команды cdrecord необходимы привилегии root. Чаще всего для того, чтобы пользователи могли использовать cdrecord, в системе создается группа cdrecord. В документации иногда встречается запись вида dev=1.0
Начальный 0 для нулевой шины SCSI часто не указывается. И все же проще ввести лишнюю цифру и не оставить ни малейшей неоднозначности. В ядре 2.6 отдельно задавать код устройства не нужно. В командной строке достаточно передать имя /dev: $ cdrecord dev=/dev/hdc <командьр>
См. также cdrecord(l).
180
Глава 11. Запись CD и DVD
11.3. Включение эмуляции SCSI для устройства записи CD и DVD с интерфейсом IDE/ATAPI Проблема Программа записи CD (будь то cdrecord или графическая программа вроде X-CDRoast или КЗЬ) сообщает, что она не может найти в системе устройство записи. А может быть, программа видит дисковод CD-R/RW, но не воспринимает дисковод CD-ROM, и из-за этого вы не можете копировать диски напрямую.
Решение Убедитесь в том, что система эмуляции IDE-SCSI включена, а дисководы настроены для ее использования. Это относится только к ядру Linux 2.4, поскольку в ядре 2.6 дисководы IDE/ATAPI поддерживаются напрямую, с использованием стандартных обозначений/dev/hd*. Сначала убедитесь в том, что в системе доступен драйвер псевдоустройства ide-scsi: $ locate ide-scsi.o
/lib/modules/2.4.21/kernel/drivers/scsi/ide-scsi.0
Затем отредактируйте два текстовых файла: /etc/moduLes.conf и конфигурационный файл загрузчика (пользователям Debian следует обращаться к подразделу «Комментарий», так как в этой системе используются другие файлы). Сначала определите имена дисковых устройств в своей системе: $ dmesg | grep
'Ahd.:'
hda: IBM-DTLA-305020. ATA DISK drive hdb: TOSHIBA DVD-ROM SD-M1202. ATAPI CD/DVD-ROM drive hdc: LITE-ON LTR-24102B. ATAPI CD/DVD-ROM drive Имена нужных устройств — hdb и hdc. Включите следующие строки в файл /etc/modules.conf: alias scsijiostadapter ide-scsi options ide-cd ignore="hdb hdc" alias scdO srjnod pre-install sg modprobe ide-scsi pre-install sr-mod modprobe ide-scsi pre-install ide-scsi modprobe ide-sd
Затем пользователи LILO добавляют следующий фрагмент в конец файла lilo.conf, используя обозначения hd* для своих устройств: append="hdb=ide-scsi" append="hdc=ide-scsi"
Пользователи GRUB включают следующий фрагмент в файл /etc/grub.conf, в конец строки kernel, используя обозначения hd* для своих устройств: hdb=scsi
hdc=scsi
Полная строка должна выглядеть так: kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro hdb=scsi hdc=scsi
11.4. Создание компакт-диска с данными для распространения
181
Перезагрузите систему и убедитесь в том, что модуль ide-scsi загружен: $S lsmod | grep ide-scsi
ide-scsi scsi mod
9456 1 55124 2 [ide-scsi sr mod]
Теперь команда cdrecord -scanbus должна выводить имена устройств SCSI для всех дисководов, настроенных па использование IDE-SCSI. Обратите внимание: имена устройств изменились, поэтому при монтировании дисков вместо имен/dev/hd* будут использоваться имена/dev/scd*. Вероятно, стоит обновить файл /etc/fstab новыми именами /dev.
Комментарий В Debian данные конфигурации модулей хранятся в файлах /etc/modules и /etc/ modutils/idecd_opts. Включите в/etc/modules строку ide-scsi Затем включите в /etc/modutils/idecd_opts строку options ide-cd ignore="hdb hdc
Для ядра 2.6 никакие особые действия не нужны, достаточно указать в командной строке имя /dev: $ cdrecord dev=/dev/hdc <команды>
ч*м> также grub(8), lilo(8).
11.4. Создание компакт-диска с данными для распространения Проблема Требуется записать компакт-диск с данными, который бы читался в Linux и Windows. Диск может содержать текстовые файлы, документы, программы или графические изображения.
Решение Воспользуйтесь командами mkisofs, mount и cdrecord. Сначала упакуйте все файлы в единый файл .iso командой mkisofs, затем смонтируйте .iso для проверки правильности файловой системы. Затем запишите данные на диск командой cdrecord. В нашем примере файл .iso называется data.iso, компакт-диску присвоено имя data_disk, а все файлы копируются из каталога /disk_data. Точка монтирования для .iso — /test-iso. Выполните следующие команды: # mkisofs -J -г -v -V data disk -о data.iso /diskdata # mkdir /test-iso # mount -t iso9660 -o ro.loop data.iso /test-iso
182
Глава 11. Запись CD и DVD
# Is /test-iso # umount /test-iso # cdrecord -v eject dev=0,l,0 data.iso
Комментарий В представленном решении все команды выполняются пользователем root. Это сделано для простоты, потому что команды mount, mkisofs и cdrecord требуют привилегий root. Чтобы пользователи могли выполнять команду mount, используйте sudo. Для выполнения команд mkisofs и cdrecord создайте группу cdrecord. Назначьте ее владельцем mkisofs и cdrecord и включите пользователей в группу cdrecord. Помните, что в ядре 2.6 эмуляция IDE-SCSI не нужна, поэтому в командной строке cdrecord можно просто указать имя /dev: # cdrecord dev=7dev/hdc <номанды>
В этих нескольких командах выполняется довольно большая работа. Команда mkisofs берет все файлы и упаковывает их в один большой файл .iso. Если вам когда-либо доводилось загружать дистрибутив Linux для записи на компакт-диск, он был упакован в виде файла .iso. Это часто создает проблемы для новичков, которые не понимают, почему они получили один гигантский файл вместо дерева каталогов с файлами Linux. Рассмотрим командную строку mkisofs более подробно: # mkisofs -J -r -v -V data disk -о data.iso /diskdata Ключи: О -J — использование схемы имен Joliet для совместимости с Windows; О -г — использование схемы имен Rock Ridge для совместимости с Unix/Linux. Все файлы доступны для чтения для всех пользователей; О -v — расширенный вывод; О -V data_disk — определение идентификатора тома (data_disk). Это то самое имя диска, которое отображается в Проводнике Windows и в команде file - </dev/ scd* (о том, как определить имена/dev, рассказано в разделе 9.12); О -о data.iso /disk.data — имя нового образа .iso и файлы, выбранные для упаковки в .iso (в данном случае все содержимое /disk_data). Обратите внимание: корневой каталог /disk-data не копируется, только его содержимое. Монтирование .iso перед записью диска является простейшей страховкой. Если вы видите все свои файлы — можно переходить к записи. Если нет, значит, при формировании файла .iso была допущена ошибка и его придется построить заново. Проверка .iso осуществляется так: # mkdir /test-iso # mount -t iso9660 -o ro.loop data.iso /test-iso Откройте каталог/test-iso и проверьте свои файлы. Параметры команды mount: О -t iso9660 — тип файловой системы. Компакт-диски с данными всегда относятся к типу iso9660 (кроме udf, но в этом случае вам не придется создавать образ .iso);
11.5. Формирование файловых деревьев на компакт-дисках с данными
183
О -о гоДоор data.iso — параметры монтирования data.iso: доступ только для чтения, с использованием файловой системы, внедренной в файл; О /test-iso — каталог, созданный как точка монтирования. После завершения проверки .iso можно записать файл на диск. # cdrecord -v -eject dev=0.1.0 data.iso
Параметры команды: О -v — расширенный вывод; О -eject — извлечение диска после записи (не обязательно); О -dev=0,l,0 — адрес SCSI устройства записи компакт-дисков; О data.iso — имя файла .iso, который содержит файлы, записываемые на диск. Команда cdrecord по умолчанию записывает данные на максимальной скорости, поддерживаемой устройством и диском. При возникновении ошибок попробуйте снизить скорость записи: # cdrecord -v -eject speed=4 dev=0,l,0 data.iso Современные записывающие устройства поддерживают высокую скорость записи (20Х и выше), но многие диски CD-R/CD-RW ограничиваются гораздо более низкими скоростями. Как правило, команда cdrecord автоматически подбирает оптимальную скорость записи.
См. также
•XI
cdrecord(l), mount(8), mkisofs(8); раздел 9.12; раздел 11.2.
11.5. Формирование файловых деревьев на компакт-дисках с данными Проблема При выборе каталогов, записываемых на компакт-диск, команда mkisofs отбрасывает корневые каталоги и сохраняет только файлы и подкаталоги. Но вам хотелось бы сохранить существующие файловые деревья (или создать новые).
Решение Включите параметр -graft-points в вызов mkisofs. В следующем примере сохраняется существующая структура каталогов scripts и finances: $ Is finances scripts $ mkisofs -r -J -v -o cdimgl.iso -graft-points scripts/=scripts finance/=finances
Результат легко проверить — достаточно смонтировать образ и просмотреть структуру каталогов командой tree -d: $ sudo mount -t iso9660 -o ro.loop cdimgl.iso /mnt /iso $ tree -d /mnt/iso
184
Глава 11. Запись CD и DVD
mnt |-- finances '-- scripts
Допустим, вы хотите переместить эти два каталога в каталог /files/archive/june на компакт-диске. Прежде всего проследите за тем, чтобы каталог /files/archive/ June присутствовал на жестком диске. Затем выполните команду: $ mkisofs -r -J -v -о cdimgl.iso -graft-points \ fi1es/archive/june/finances/=finances fi1es/archive/june/scripts/=scripts Как и в предыдущем случае, результат проверяется монтированием: $ tree -dL 4 /mnt/iso mnt '-- files -- archive '-- june |-- finances '-- scripts
См. также Tree(l), mkisofs(8).
11.6. Копирование диска CD или DVD Проблема Требуется создать копию диска CD или DVD, содержащего данные, аудио- и видеоинформацию и т. д.
Решение Чтобы напрямую скопировать содержимое исходного диска на записываемый диск, выполните следующую команду: $ cdrecord -v dev=0,1.0 -isosize /dev/scdO
Способ быстрый, но рискованный, потому что любой перебой в потоке данных приведет к порче всей копии. Лучше сначала кэшировать оригинал на жестком диске. В следующем примере сначала проводится проверка записи: $ dd if=/dev/scdO of=/tmp/diskfi 1 е.iso $ cdrecord dev=0.1,0 fs=8m -v -eject -dummy /tmp/diskfile.iso
Чтобы записать данные на диск, удалите ключ -dummy.
Решение Как говорилось выше, ядро 2.6 не нуждается в эмуляции IDE-SCSI — просто используйте имя /dev: # cdrecord dev=/dev/hdc <команды>
Не забудьте, что объем созданного временного файла равен объему копируемого диска.
11.7. Стирание диска CD-RW
185
Команда dd производит побайтовое копирование файла. Ее параметры: О if — входной файл (источник); О /dev/scdO — имя устройства (см. раздел 11.3). Монтирование диска не обязательно; О of - выходной файл (приемник); О /tmp/diskfile.iso — временная копия исходного файла на жестком диске. Присвойте ей любое имя по своему усмотрению, но сохраните расширение .iso. Параметры cdrecord остаются теми же, что и в разделе 11.4, но к ним добавляются два новых параметра: О fs=8m — размер циклического буфера: чем больше, тем лучше... до определенной степени. Помните, что перебои приводят к фатальным последствиям; параметр fs=8m создает буфер, объем которого достаточен для продолжения записи даже в том случае, если пересылка данных по каким-то причинам замедлится. Если 8 Мбайт недостаточно, вероятно, вам стоит подумать о модернизации своего компьютера. С другой стороны, значение больше 8 Мбайт не обязательно лучше, потому что операционная система может тратить время на перезагрузку таблиц MMU (Memory Management Unit). Значение по умолчанию равно 4 Мбайт. О -dummy — замечательная функция тестового прогона перед записью на диск. Дисковод выполняет все операции с выключенным лазером, что дает пользователю возможность обнаружить ошибки до того, как они будут перенесены на диск.
См. также cdrecord(l), dd(l); раздел 11.4.
11.7. Стирание диска CD-RW Проблема Требуется стереть содержимое перезаписываемого диска, чтобы подготовить его к записи нового материала.
Решение Воспользуйтесь параметром blank команды cdrecord. Значение blank=fast стирает только оглавление диска (ТОС), область памяти программы (РМА) и pregap: $ cdrecord -v t>1ank=fast dev=0,l,0 Более полное стирание производится с параметром all: $ cdrecord -v Ыапк=а11 dev-0.1.0
He рассчитывайте, что стирание полностью уничтожит информацию; при желании данные все равно удастся восстановить. Параметр blank=fast прекрасно подходит для повседневного использования, а работает намного быстрее — и к тому же продлевает жизнь диска CD-RW.
186
Глава 11. Запись CD и DVD
Последний сеанс многосеансового диска стирается командой $ cdrecord b1ank=session
А в маловероятном случае, если ваш диск поддерживает стирание на уровне дорожек, вы можете стирать дорожки точно так же, как сеансы, начиная с последней: $ cdrecord blank=track
Комментарий Стирание на уровне дорожек не поддерживается большинством дисководов. Стирание дорожек или сеансов в произвольной последовательности также невозможно — необходимо начать с конца и постепенно продвигаться к началу. Если при использовании какого-либо значения параметра blank будет получено сообщение об ошибке, попробуйте добавить ключ -force: $ cdrecord blank=track -force Но скорее всего, диск был поврежден и его лучше выбросить. Чтобы получить список всех режимов стирания, выполните команду $ cdrecord blank=help Помните, что CD-RW имеет ограниченный цикл жизни, а количество операций перезаписи не бесконечно. Точное значение зависит от производителя и качества диска, но диск должен выдержать как минимум 100 операций перезаписи, прежде чем он станет ненадежным.
См. также Cdrecord(l).
11.8. Запись многосеансового компакт-диска с данными Проблема Требуется постепенно добавлять файлы на диск (в отличие от одноразовой записи). Команда cdrecord закрывает (фиксирует) диск, и добавить на него дополнительные файлы уже не удастся. Как обойти это ограничение?
Решение Процесс состоит из двух шагов. Обе команды, cdrecord и mkisofs, поддерживают специальные параметры для создания многосеансовых дисков. При первоначальной записи файлов на CD создайте файл .iso обычным способом, а затем включите в командную строку cdrecord ключ -multi: $ cdrecord -v eject dev=0,l,0 -multi first-image.iso
Затем создайте дополнительные образы .iso при помощи ключей -С и -М: $ mkisofs -о second-image.iso -J -r -V Session2 -С 'cdrecord dev=0.1.0 -msinfo' \ -M 0,1,0 /path-to-new-files
11.9. Создание загрузочного компакт-диска
187
Затем запишите новый файл .iso на диск, снова используя ключ -multi: $ cdrecord -v -eject dev=0.1.0 -multi second-image.iso Операцию можно повторять сколько угодно раз. Добравшись до последнего сеанса, опустите ключ -multi. Диск необходимо закрыть и зафиксировать, в противном случае он не будет читаться большинством дисководов. Другой способ закрыть диск без записи дополнительного сеанса основан на использовании ключа -fix: $ cdrecord -v -fix -eject dev=0.1,0
Комментарий Компакт-диски записываются по сеансам. В каждом сеансе задействовано определенное количество секторов диска, f la односеансовом диске присутствует вводная запись, одно оглавление, данные и выводная запись, присутствие которой фиксирует диск и не позволяет записать на него что-либо еще. Команда mkisofs позволяет связать несколько сеансов на многосеансовом диске. Для этого нужно знать номера начального и конечного секторов каждого сеанса. Рассмотрим параметры команды: $ mkisofs -о second-image.iso -J -г -V Session2 -С "cdrecord dev=0.1.0 -msinfo' \ •M 0,1,0 /path-to-new-files О -о second-image.iso — имя нового файла .iso (выбирается произвольно); О -J — схема имен Joliet для совместимости с Windows (не обязательно); О -г — схема имен Rock Ridge для совместимости с Unix/Linux, с открытием общего доступа к файлам для чтения. Параметр обязателен для создания многосеансовых дисков; О -С "cdrecord dev=0,l,0 -msinfo" — ключ -С существует под несколькими именами: CD+, CDExtra, tast_sess_start, next_sess_start. Он указывает mkisofs на конечную точку последнего сеанса и начальную точку следующего сеанса. Обратные апострофы приказывают командному процессору найти и использовать значения автоматически. Их также молено сгенерировать вручную: cdrecord dev=0,l,0 -msinfo 12968.20172 О -М 0,1,0 — параметр -М должен использоваться с -С. Он определяет адрес шины SCSI устройства записи CD; О /путъ_к_новъш_файлам — список файлов (или каталог), включаемых в новый файл .iso.
См. также cdrecord(l), mkisofs(8).
11.9. Создание загрузочного компакт-диска Проблема Требуется записать загрузочный компакт-диск.
188
Глава 11. Запись CD и DVD
Решение Образ загрузочной информации включается в файл .iso командой mkisofs. Если загрузочный образ находится на дискете, сначала создайте каталог boot/ в файловом дереве, записываемом па диск, и скопируйте его туда: % dd if=/dev/fdO of=~/cd-files/boot/boot.img bs=10k count=144
Или скопируйте его из другого каталога на жестком диске: $ ср boot.img ~/cd-files/boot/boot/img Затем упакуйте .iso: $ mkisofs -г -b boot/boot.img -с boot/boot.catalog -o bootable-cd.iso ~/cd-files
Запишите диск командой cdrecord, как это обычно делается. Вы получаете загрузочный диск.
Комментарий mkisofs использует спецификацию El Torito для создания загрузочного образа, который «обманывает» PC и заставляет его думать, что он видит загрузочную дискету.
См. также mkisofs(8).
11.10. Разбиение больших файлов на несколько дисков Проблема Вы работаете с очень большим файлом — скажем, архивом .tar или огромным графическим изображением. Файл требуется сохранить на компакт-диске, но его объем превышает объем одного диска.
Решение Разбейте файл утилитой split, а затем преобразуйте новые файлы в образы .iso и запишите их на диски. Сборка исходного файла осуществляется командой cat Допустим, имеется 2-гигабайтный архив tar с именем big-backup. В следующем примере он разбивается на 650-мегабайтные фрагменты. Емкость компакт-диска составляет 700 Мбайт, но нужно оставить место для служебных данных: $ split -b 650m big-backup.tar.gz creating f i l e 'xaa' creating f i l e 'xab' creating f i l e 'xac'
Каждый файл теперь занимает около 682 Мбайт. Преобразуйте каждый файл в образ .iso: $ for i in xa*; do echo -e "$i"; mkisofs -o $i.iso $i; done
11.11. Запись дисков DVD с данными
189
После завершения обработки команда Is выведет следующий результат: $ Is хаа xaa.iso
xab
xab.iso
хае
хае.iso
Теперь запишите каждый файл .iso на отдельный компакт-диск: $ cdrecord -v -eject dev=0,l,0 xaa.iso $ cdrecord -v -eject dev=0.1.0 xab.iso $ cdrecord -v -eject dev=0.1.0 xac.iso Чтобы восстановить разбитый архив, скопируйте файлы .iso с компакт-диска на жесткий диск и воспользуйтесь командой cat: $ cat хаа xab xac > big-backup.tar.gz Или последовательно присоединяйте содержимое каждого компакт-диска к архиву на жестком диске без предварительного копирования: $ cat /cdrom/xaa > big-backup.tar.gz $ cat /cdrom/xab » big-backup.tar.gz $ cat /cdrom/xac » big-backup.tar.gz Собранному файлу можно присвоить любое имя. Главное — сохранить расширение tar.gz. После этого архив можно распаковать: $ tar xzvf big-backup.tar.gz
Комментарий Описанный способ хорошо подходит для проведения архивации «на скорую руку» или перемещения большого количества файлов, но не используйте его для регулярной архивации. Если хотя бы один фрагмент будет испорчен, восстановить данные будет довольно трудно (особенно из сжатых файлов). О проведении масштабной архивации рассказано в главе 16.
split(l), tar(l), cat(l); глава 16.
11.11. Запись дисков DVD с данными Проблема Требуется записать на DVD данные — резервную копию системы, коллекцию графики или установочные диски Linux — из образов .iso.
Решение Используйте утилиту growisofs из пакета dvd+rw-tools. Но прежде чем что-нибудь делать, убедитесь в том, что для устройства записи DVD не включена поддержка supermount/automount, поскольку это приведет к порче диска. Копирование файлов с жесткого диска на DVD осуществляется за одну операцию: # growisofs -Z <имя устройства> <команды mkisofs> <файлы>
190
Глава 11. Запись CD и DVD
Пример: # growisofs -Z dev=l,2,0 -dvd-compat -udf -R -J -v /home/carla Ha DVD легко скопировать дополнительные файлы. Всегда указывайте ключ -Z для первой группы файлов, записываемых на DVD, а затем используйте ключ -М для дополнительных файлов: # growisofs -Z dev=1.2.0 -dvd-compat -udf -R -J -v /etc # growisofs -M dev=l,2.0 -dvd-compat -udf -R -J -v /shared/projectfiles # growisofs -M dev=l,2,0 -dvd-compat -udf -R -J -v /var/www/pubiicsite
Закрывать и фиксировать диск отдельной командой не обязательно.
Комментарий В последнее время появляется все больше дистрибутивов Linux в виде файлов .iso, размеры которых предназначены для записи на DVD, и это вполне естественно — некоторые дистрибутивы занимают 8 и более компакт-дисков. Команда growisofs заменяет cdrecord и обеспечивает интерфейс к mkisofs, так что вы сможете использовать знакомые параметры mkisofs с двумя исключениями: О не используйте параметр -о для указания выходного файла, потому что growisofs пишет непосредственно на DVD; О не используйте параметр -С, так как growisofs определяет начальную и конечную точки дорожек самостоятельно. Ключ -dvd-compat обеспечивает совместимость с большинством существующих дисководов DVD. Ключ -udf добавляет ограниченную поддержку UDF. На момент написания книги пакетная запись еще не была надежно реализована в ядре Linux. В принципе ее можно исключить, хотя ее включение «на всякий случай» обойдется всего в несколько битов метаданных, Утилиты dvd+rw-tools существуют в виде пакетов RPM, пакетов Debian и в формате .tar. В архиве .tar также имеется файл spec на тот случай, если вам захочется создать собственный пакет RPM. Форматировать новые диски DVD-RW не обязательно, потому что, начиная с версии 5.10, growisofs делает это автоматически при добавлении файлов на DVD. Чтобы узнать номер версии, выполните команду $ growisofs --version Программа supermount должна обеспечивать возможность вставки и извлечения дисков (например, дискет) без ввода команд mount и unmount. Она появилась в Red Hat, SuSE и других дистрибутивах, где обычно включается по умолчанию. Чтобы временно отключить supermount, выполните команду # /usr/sbin/supermount -1 disable
Повторное включение производится с параметром -1 enable. К сожалению, supermount работает не очень надежно, поэтому, возможно, ее лучше отключить вообще. Для этого удалите записи supermount и /etc/fstab. Если вы предпочитаете перестраховаться, удалите пакет magicdev: # rpm -q magicdev
11.12. Запись аудиодиска для стандартных проигрывателей
191
В Debian это делается командой # apt-get remove magic-dev
См. также Домашняя страница dvd+rw-tools (http://fly.chalmers.se/~appro/linux/DVD+RW).
11.12. Запись аудиодиска для стандартных проигрывателей Проблема Требуется узнать, как записать аудиодиск для воспроизведения в бытовом проигрывателе (скажем, в машине). Также нужно уметь преобразовывать различные аудиоформаты (скажем, ogg-vorbis, mp3, .wav и .cdr), поскольку они не воспроизводятся на стандартных проигрывателях компакт-дисков, только на компьютерах.
Решение Используйте sox, normalize и cdrecord, а также «болванки», предназначенные для записи аудио. На первом этапе программа sox преобразует звуковые файлы в формат .cdr, после чего формат .cdr преобразуется в формат .wav. Затем ключ -audio команды cdrecord преобразует файлы .wav в формат CD-DA (Compact Disk Digital Audio), поддерживаемый стандартными проигрывателями. $ sox soundfile fi1ename.cdr $ sox filename.cdr filename.wav $ cdrecord -v nofix -eject dev-0,1.0 -audio -pad filename.wav
Ключ -pad гарантирует правильное заполнение секторов диска, a -nofix оставляет диск открытым для добавления новых дорожек. Чтобы закрыть и зафиксировать диск, выполните следующую команду: $ cdrecord -v -fix -eject dev-0,1,0
Преобразовывать файлы один за другим утомительно. Следующая команда Bash преобразует группу файлов .одд в формат .cdr: $ for i in *.одд; do echo $i; sox $i ${iK.ogg}.cdr ; echo ${i££.ogg}.cdr; done
Замените одд расширениями тех файлов, которые требуется преобразовать. Если коллекция дорожек собирается из разных источников, воспользуйтесь утилитой normalize и уравняйте громкость звука с ключом -m (Mixed mode): S normalize -m /soundfiles/*.wav
Выбор дорожек для записи может осуществляться разными способами. Следующая команда записывает все дорожки в формате .wav в каталог/home/songs в определенном порядке: сначала цифры, затем алфавитные символы в верхнем регистре, затем алфавитные символы в нижнем регистре: $ cdrecord -v -nofix -eject dev=0,1.0 -audio -pad /home/songs/*.wav
192
Глава 11. Запись CD и DVD
Или перейдите в каталог /songs и перечислите отдельные песни: $ cdrecord -v -nofix -eject dev=0.1,0 -audio -pad songl.wav song3.wav song7.wav Обязательно используйте диски CD-R, рассчитанные на воспроизведение в бытовых проигрывателях.
Комментарий Новые версии sox вроде бы должны поддерживать формат .трЗ, но на практике это не всегда так. Выполните команду sox -h и посмотрите, какие форматы поддерживает команда. Если ваша конкретная версия sox не поддерживает .трЗ, используйте mpgl23 и sox: $ mpgl23 -b 10000 -s filename.трЗ | sox -t raw -r 44100 -s -w -c 2 -filename.wav Параметры: О -b 10000 — размер буфера в байтах; О -s — перенаправление результата в стандартный вывод (вместо попытки воспроизведения файла); О sox -t raw -r 44100 -s -w -с 2 — описание формата .cdr с явным указанием спецификаций. Диск не может содержать более 99 дорожек. Впрочем, чтобы па одном диске поместилось 99 песен, эти песни должны быть совсем короткими. Если музыкальные файлы уже хранятся в формате .wav, вероятно, вам не придется преобразовывать их. Тем не менее не все файлы .wav имеют правильную структуру для записи на диск; в таких случаях команда cdrecord остановится и выдаст сообщение об ошибке. Преобразуйте неправильный файл .wav в .cdr при помощи sox, а затем снова преобразуйте .cdr в .wav. Форматы .wav и .flac обеспечивают наивысшее качество из всех форматов цифрового аудио. Всегда начинайте с них, если существует такая возможность, а потом преобразуйте их в другие форматы по мере необходимости. Чаще всего это делается для экономии места, поскольку файлы .wav и .flac очень велики. Файл .ogg обычно занимает около 1/10 объема файла .wav. Ogg Vorbis — открытая и не защищенная патентами технология кодирования аудиоинформации. Она не связана с лицензионными отчислениями или другими ограничениями, присущими запатентованным, закрытым форматам типа МРЗ. Формат .одд обеспечивает хорошее качество звука при сжатии данных с потерями. Под «потерями» имеется в виду, что часть информации пропадает для уменьшения размера файла. МРЗ — другой качественный формат сжатия с потерями. Это запатентованный, закрытый формат, поэтому его использование ограничено, код закрыт, а исполнители и распространители должны платить лицензионные отчисления. Компания «Thomson and Fraunhofer», которой принадлежат права на формат МРЗ, включают в него поддержку DRM (Digital Rights Management, а проще говоря, ограничение копирования).
См. также cdrecord(l), sox(l), normalize(l).
Глава 12
Системный загрузчик и альтернативная загрузка 12.1. Введение В системе Linux существует два отличных загрузчика, GRUB (GRand Unified Bootloader) и LILO (Linux LOader). GRUB новее LILO и обладает большими возможностями. Оба загрузчика отличаются гибкостью и большим потенциалом настройки; кроме того, они способны реализовывать сложные сценарии настройки — такие, как альтернативная загрузка нескольких операционных систем или ядер Linux или передача параметров ядру во время загрузки. Если вы все еще используете LILO, возможно, настало время подумать о переходе на GRUB. Хотя загрузчики в целом похожи друг на друга, GRUB обладает рядом дополнительных возможностей, которые выводят его на первое место: О командная консоль GRUB позволяет находить загрузочные образы, ядра и корневые файловые системы; О GRUB хранит загрузочную информацию в файловой системе, а не в главной загрузочной записи (MBR); О GRUB читает файловые системы и исполняемые файлы ядра, не заставляя пользователя ограничиваться геометрией диска; О и что самое лучшее, загрузчик GRUB абсолютно независим от операционной системы. Если установить GRUB в отдельный загрузочный раздел, вы сможете удалять и переустанавливать операционные системы по своему усмотрению, и вам не придется каждый раз заново устанавливать загрузчик. И GRUB, и LILO позволяют загружать операционные системы, не входящие в семейство Linux (например, Windows, OS/2, BSD Unix и т. д.). Для операционных систем, которые они не могут загружать напрямую (таких, как Windows), GRUB и LILO применяют цепную загрузку, то есть передают управление собственному загрузчику Windows. Главная загрузочная запись занимает первые 512 байт первого сектора первого раздела диска. В ней находится таблица разделов и первичный загрузчик — небольшая программа, хранящаяся в первых 446 байтах MBR, которая передает
194
Глава 12. Системный загрузчик и альтернативная загрузка
управление вторичному загрузчику, хранящемуся в каталоге /boot. Остальные 66 байт MBR занимает таблица разделов. Linux позволяет создать на диске IDE до 63 разделов: 3 первичных раздела и 4 раздел, содержащий до 60 логических разделов в одном расширенном разделе. Диски SCSI ограничиваются 15 разделами: 3 первичных и 12 логических в одном расширенном разделе.
12.2. Переход с LILO на GRUB Проблема Вы ознакомились с преимуществами GRUB, описанными в предыдущем разделе. Сейчас вы используете LILO, но хотите перейти на GRUB, причем так, чтобы не переделывать всю систему.
Решение Переход на GRUB не нарушает работоспособности системы. Прежде всего установите GRUB или обновите программу до последней версии. Номер версии определяется командой $ grub --version g r u b (GNU GRUB 0 . 9 4 )
Затем выполните ряд подготовительных действий: 1. Распечатайте таблицу разделов (fdisk -I | Ipr). 2. Распечатайте файл lilo.conf. 3. Создайте резервную копию данных и держите под рукой диск аварийного восстановления (загрузочную дискету LILO или диск Knoppix). 4. Оставьте установку LILO на случай, если вы захотите вернуться к ней. Затем выполните следующие действия: 1. Создайте загрузочную дискету GRUB. 2. Установите GRUB в MBR. 3. Загрузите систему. 4. Отредактируйте конфигурационный файл GRUB, menu.1st. Чтобы создать загрузочную дискету, найдите каталог/grub/i386. Его «официальное» местонахождение — /urs/lib/grub/i386-pc, но в Red Hat используется каталог/usr/share/grub/i386-pc. В других дистрибутивах также могут существовать различия. Скопируйте файлы stagel и stage2 на дискету командой dd: $ dd if-stagel of=/dev/fdO bs=512 count=l
1+0 records in 1+0 records out 512 bytes transferred in 0.550740 seconds (930 bytes/sec) $ dd if=stage2 of=/dev/fd0 bs=512 seek=l 209+1 records in
12.2. Переход с LILO на GRUB
195
209+1 records out 107250 bytes transferred in 6.889581 seconds (15567 bytes/sec) Загрузите систему с дискеты. Теперь необходимо найти корневое устройство, то есть раздел с загрузочными фаршами GRUB первой и второй стадии загрузки: grub> find /boot/grub/stagel (hdO.O)
Задайте корневое устройство: grub> root (hdO.O)
Обратите внимание: в GRUB используется собственная схема нумерации разделов. Запись hdO,O соответствует/dev/hdal (см. подраздел «Комментарий»), Теперь установите GRUB в MBR (первый сектор первого диска): grub> setup (hdO)
Пора завершить загрузку. Снова задайте корневое устройство: grub> root (hdO.O)
Введите путь к ядру и корневой файловой системе. Данные берутся из файла lilo.conf. Обязательно присоедините ключ го, чтобы ядро и корневая файловая система монтировались только для чтения: grub> kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro
He путайте root в строке kernel с корневым устройством. Root в строке kernel идентифицирует корневую файловую систему, тогда как корневым устройством называется раздел, содержащий каталог /boot. Вероятно, теперь стоит создать меню загрузки GRUB. За подробностями обращайтесь к рецепту 12.9.
Комментарий Всегда проверяйте диски аварийного восстановления перед тем, как их использовать. GRUB использует собственную схему нумерации разделов; отсчет начинается с 0, а не с 1. Диски IDE и SCSI обозначаются hd, а флоппи-дисководы обозначаются fd. Таблица разделов Linux: О 1-4-первичныеразделы; О 5 и выше — расширенные разделы. В GRUB она принимает следующий вид: О 0-3 — первичные разделы; О 4 и выше — расширенные разделы Дополнительные диски обозначаются hdl, hd2 и т. д. Таким образом, hdO,3 — то же самое, что /dev/hda4, a hdl,5 соответствует /dev/hdb6.
также Раздел «Введение» настоящей главы; раздел 12.7; раздел 12.9; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
196
Глава 12. Системный загрузчик и альтернативная загрузка
12.3. Установка GRUB без дискеты Проблема Требуется установить GRUB, но в вашей системе нет флоппи-дисковода. Л может, дисковод есть, но вы не можете найти ни одной рабочей дискеты.
Решение Воспользуйтесь командной консолью GRUB. Прежде всего установите GRUB или обновите программу до последней версии. Номер версии определяется командой $ grub --version grub (GNU GRUB 0.94)
Затем выполните ряд подготовительных действий: 1. Распечатайте таблицу разделов (fdisk -L | Ipr). 2. Распечатайте файл lilo.conf. 3. Создайте резервную копию данных и держите под рукой диск аварийного восстановления (загрузочную дискету LILO или диск Knoppix). 4. Оставьте установку LILO на случай, если вы захотите вернуться к ней. Затем запустите консоль GRUB: # grub Probing devices to guess BIOS drivers. This may take a long time. GNU GRUB version 0.94 (640K lower / 3072 upper memory) [ Minimal BASH-like line editing is supported. For the f i r s t word. TAB l i s t s possible command completions. Anywhere else TAB l i s t s the possible completions of a device/filename. ] grub>
Найдите загрузчик stagel: grub> find /boot/grub/stagel (hdO.O)
атем выполните три команды: grub> root (hdO.O) grub> setup (hdO) grub> quit
1
Перезагрузите систему; вас приветствует командная консоль GRUB. В разделах 12.7 и 12.9 рассказано о том, как создать меню загрузки GRUB.
Комментарий При выполнении трех команд, о которых говорилось ранее, происходит следующее: grut» root (hdO,O) grub> setup (hdO)
Назначение корневого устройства Установка GRUB в MBR
grut» quit
Выход из GRUB
12.4. Установка GRUB сценарием grub-install
197
См. также Раздел 12.7; раздел 12.9; The Grub Manual (http://www.gnu.org/software/manual/ grub.html); info grub.
12.4. Установка GRUB сценарием grub-install Проблема Рецепт из раздела 12.3 не работает в вашей системе Debian, Gentoo или другой системе, потомучто файлы GRUB устанавливаются в/usr/Lib/grub. Аможетбыть, вы хотите использовать более простой способ установки GRUB без использования дискет.
Решение Воспользуйтесь встроенным сценарием установки GRUB grub-install. Прежде всего установите GRUB или обновите программу до последней версии. Номер версии определяется командой $ grub - -version grub (GNU GRUB 0.94)
Затем запустите сценарий grub-install. Если для/boot используется собственный раздел, укажите его: # grub-install --root-directory=/boot /dev/hda В противном случае достаточно имени устройства: # grub-install /dev/hda
Затем выполните команду # update-grub Команда создает новый файл menu.1st. При перезагрузке появится меню GRUB, и система загрузится, как обычно.
Комментарий Вероятно, update-grub не создаст полный файл menu.1st в системе с альтернативной загрузкой, но по крайней мере вы сможете загрузить операционную систему Linux. После этого в menu.1st можно будет добавить записи других операционных систем.
См. также grub-instalL(S); info grub; The Grub Manual (http://www.gnu.org/software/manual/ grub.html).
198
Глава 12. Системный загрузчик и альтернативная загрузка
12.5. Подготовка системы для альтернативной загрузки Linux Проблема Вы собираетесь организовать альтернативную загрузку нескольких разных дистрибутивов Linux и хотите подготовить к ней свою систему. При этом вы собираетесь использовать автономный раздел /boot и общие разделы /home и /swap.
Решение Многие дистрибутивы Linux позволяют настраивать разделы во время установки. Создавайте новые разделы только в том случае, если они необходимы, и оставляйте свободной место для других установок. Для примера рассмотрим «чистую» установку Fedora на диске IDE объемом 20 Гбайт со следующей схемой разбиения: /dev/hdal Первичный 100 Мбайт /boot Первичный 2500 Мбайт /dev/hda2 / 3000 Мбайт /home /dev/hda3 Первичный Расширенный /dev/hda4 256 Мбайт /swap /dev/hda5 Свободно 14144 Мбайт Процедура выглядит так: 1. Загрузите первый установочный компакт-диск. Выберите клавиатуру, мышь и монитор. Когда появится окно Disk Partitioning Setup, выберите Manually partition with Disk Druid. На экране появляется графическое изображение жесткого диска. 2. Удалите все существующие разделы. Для этого поочередно выделите их и щелкните на кнопке Delete. 3. Затем выделите Free Space и щелкните на кнопке New. Точка монтирования — /boot. Выберите файловую систему Ext2 и введите размер раздела. Минимум, который Fedora примет для /boot, составляет 100 Мбайт. 4. Снова выделите Free Space и щелкните на кнопке New. Точка монтирования — /. Выберите файловую систему Ext3 и введите размер раздела 2500 Мбайт. Щелкните на кнопке ОК. 5. Снова выделите Free Space и щелкните на кнопке New. Точка монтирования — /home. Выберите файловую систему Ext3 и введите размер раздела 3000 Мбайт. Щелкните на кнопке ОК. 6. Снова выделите Free Space и щелкните на кнопке New. Прокрутите список filesystem options и найдите в нем строку swap. Точка монтирования отсутствует; задайте размер 256 Мбайт. Щелкните на кнопке ОК. 7. На этой стадии еще можно вернуться и внести изменения, потому что новая таблица разделов еще не была записана на диске. Завершив настройку, запишите таблицу на диск кнопкой 0К в главном меню Disk Druid.
12.6. Установка экземпляров Linux в системе с альтернативной загрузкой
199
Продолжайте установку. Проследите за тем, чтобы был установлен именно загрузчик GRUB, а не LILO. Другие экземпляры Linux будут использовать те же разделы /home и /swap. Вы можете установить сколько угодно экземпляров Linux, пока не кончится свободное место на диске или не будут использованы все доступные разделы.
Комментарий В большинстве современных дистрибутивов Linux GRUB устанавливается по умолчанию. Проследите за тем, чтобы ваши дистрибутивы не установили LILO. QTParted — превосходная графическая утилита для создания, удаления, перемещения и изменения размеров дисковых разделов. Программа QTParted включена в Knoppix, поэтому при желании вы можете настроить разделы перед установкой Linux. Изменения также можно внести после установки, даже если раздел уже содержит данные. Разумеется, сначала необходимо создать резервную копию всех данных. QTParted хорошо справляется со своей работой, но изменение таблицы разделов чревато неприятностями. Размещение /swap в автономном разделе повышает быстродействие системы; кроме того, такой раздел может использоваться совместно разными системами при альтернативной загрузке. Выделение /home в автономный раздел позволит вам использовать содержимое в разных экземплярах Linux, а также проводить установку и удаление систем без восстановления данных из архива. Linux позволяет создать на диске IDE до 63 разделов: 3 первичных раздела и 4 раздел, содержащий до 60 логических разделов в одном расширенном разделе. Диски SCSI ограничиваются 15 разделами: 3 первичных и 12 логических в одном расширенном разделе.
См. также fdisk(8); глава 13; домашняя страница QTParted (http://qtparted.sourceforge.net).
12.6. Установка дополнительных экземпляров Linux в системе с альтернативной загрузкой Проблема На компьютере создан новый загрузочный раздел и установлен первый экземпляр Linux. Все готово к добавлению новых экземпляров.
Решение Установите дополнительные экземпляры Linux в логические разделы. Затем для каждого экземпляра системы создается запись в меню загрузки GRUB. Сначала подготовьте систему по инструкциям, приведенным в разделе 12.5. Загрузите установочный компакт-диск второго экземпляра Linux (в нашем примере вторым экземпляром будет дистрибутив Libranet Debian). В меню определения
200
Глава 12. Системный загрузчик и альтернативная загрузка
дисковых разделов выберите пункт Partition & Layout drives. На экраие появляется меню с информацией о существующих разделах. Выделите Free и щелкните на кнопке New. Введите размер раздела 2500 Мбайт (точка монтирования — /). Выберите тип файловой системы и проследите за тем, чтобы флажок Initialize? был установлен. Это будет раздел /dev/hda6. Выделите раздел /dev/hda3 и щелкните на кнопке Modify. Выберите точку монтирования/home и файловую систему Ext3, но не устанавливайте флажок Initialize?. На этой стадии вы можете либо вернуться и внести изменения в разделы, либо записать новую таблицу разделов на диск. При выборе команды Write появляется предупреждение: «ALL EXISTING DATA ON THESE PARTITIONS WILL BE DESTROYED» со списком разделов, которые будут отформатированы («инициализированы»). В списке должен присутствовать только раздел /. Продолжайте установку. Когда дойдет до меню установки загрузчика, не перезаписывайте MBR. На вопрос «Do you want Linux to handle booting your system?» ответьте отрицательно. Мы хотим, чтобы загрузочные файлы устанавливались в первый сектор загрузочного раздела, то есть /dev/hda6. Когда Libranet потребует перезагрузить систему, вызовите командную консоль GRUB и загрузите Libranet вручную: grub> root (hdO.O)
grub> kernel /boot/vmiinuz-2.4.21 root=/dev/hda6 ro grub> boot (определение параметров загрузки в GRUB рассматривается в разделе 12.7). Когда система начнет нормально работать, отредактируйте файл menu.1st и включите новую систему в меню загрузки GRUB (см. раздел 12.9). Запишите информацию разделов, созданных в процессе установки; это поможет вам в редактировании menu.1st.
Комментарий Программа установки Libranet автоматически находит существующие разделы виртуальной памяти, поэтому выбирать их во время установки не нужно. Вы можете отредактировать файл menu.1st в любом из новых экземпляров Linux. Просто смонтируйте загрузочный раздел: # mkdir /bootpartition # mount /dev/hdal /bootpartition # vim /bootpartition/boot/grub/menu.lst
В этом проявляются некоторые преимущества использования загрузочного раздела — вы всегда знаете, где он находится, а его содержимое надежно изолировано от корневых файловых систем. Вероятно, разбиение диска на разделы является самой важной частью построения системы с альтернативной загрузкой. На физическом жестком диске могут существовать только четыре первичных раздела, поэтому старайтесь по возможности использовать логические разделы; в противном случае разделы быстро кончатся.
См. также The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
12.7. Определение параметров загрузки в командной консоли GRUB
201
12.7. Определение параметров загрузки в командной консоли GRUB Проблема Местонахождение ядер Linux и корневых устройств вам неизвестно, но эта информация необходима для загрузки системы.
Решение Воспользуйтесь средствами GRUB для поиска корневых устройств и образов ядер. Загрузите командную консоль GRUB нажатием клавиши «с» во время запуска GRUB. Чтобы найти корневое устройство (раздел, содержащий /boot), введите строку root (hdO и нажимайте клавишу Tab до тех пор, пока на экране не появится информация о разделах: grub> root (hdO,<tab>
Possible partitions are: Partition num: 0. Filesystem type is ext2fs. partition type 0x83 Partition num: 1, Filesystem type is ext2fs. partition type 0x83
Если вы не уверены в том, какой именно раздел вам нужен, опробуйте их поочередно, это не повредит. Начните с (hdO,O): grub> root (hdO.O)
Filesystem type is ext2fs, partition type 0x83 Затем попробуйте найти образ ядра. Введите /boot/vmtinuz и нажмите клавишу Tab. Если найти образ/boot/linuz не удалось, GRUB сообщит вам об этом: grub> kernel /boot/vmlinuz<tab>
Error 15: File not found В этом случае назначьте корневым устройством другой раздел и проведите поиск образа ядра на нем: grub> root (hdO.l)
Filesystem type is ext2fs, partition type 0x83
grut» kernel /boot/vmlinuz<tab> possible f i l e s are: vmlinuz vmlinuz-2.4.21
Ядро найдено. Введите путь к ядру и корневой файловой системе: grub> kernel /boot/vmlinuz-2.4.21 ro root=/dev/hda2 Помните, что нумерация разделов в GRUB начинается с 0, поэтому hdO,l=/ dev/hda2. Следующие два используются только в системах, при загрузке которых используется ramdisk. Сначала найдите initrd:
55 f?"d
ШЖЩя^ Щ
Загрузите образ initrd: grub> initrd /boot/imtrd-2.4.22-l.img
202
Глава 12. Системный загрузчик и альтернативная загрузка
Теперь можно переходить к загрузке: grub> boot Система запускается стандартным образом.
Комментарий Если вы не уверены в том, что в системе использовались стандартные схемы выбора имен ядра, запросите у GRUB все содержимое /boot. Введите строку kernel/ boot и нажмите клавишу Tab: grub> kernel /boot/<tab> System.map System.map-2.4.21 System.map-2.6.3 boot grub config-2.4.21 config-2.6.3 splash.xpm.gz vmlinuz vmlinuz-2.4.21 kernel-of-truth-2.6.3 Похоже, мы обнаружили ядро 2.6 со странным именем kemel-of-truth-2.6.3. Несмотря на глупое имя, оно может работать точно так же, как его родственники с более вменяемыми именами. Автоматическое расширение имен клавишей Tab позволяет легко проводить поиск в целых файловых системах. Эта возможность особенно полезна для исследования незнакомых систем, потому что вы можете начать с корня: grub> root (hdO,6) grub> find/<tab> Possible f i l e s are bin dev etc l i b mnt opt titip sys var usr boot home proc sbin root cdrom floppy i n i t r d
Однако это открывает большую брешь в системе безопасности, так как любой пользователь, имеющий доступ к консоли GRUB, сможет прочитать любой файл в системе командой cat: grub> cat /root/secretpersonalstuff.txt grub> cat /etc/shadow В разделе 12.14 рассказано, как закрыть эту брешь посредством парольной защиты GRUB. Команда GRUB находит корневые устройства и ядра независимо от того, где они находятся. Допустим, в системе установлены два жестких диска IDE. На втором диске корневая файловая система Linux установлена в каталоге/dev/hdb5. Загрузка производится следующим образом: grub> root (hdl.4)
grub> kernel /boot/vmlinuz-2.4.21 ro root=/dev/hdb5 grub> boot В незнакомой системе можно поручить GRUB поиск всех установленных жестких дисков: grub> root (hd <tab> Possible disks are: hdO hdl
См. также The Grub Manual (http://www.gnu.org/software/manuaL/grub.html); info grub.
12.8.
Настройка загрузочного раздела
203
12.8. Настройка загрузочного раздела Проблема Вы используете загрузочный раздел вместо каталога /boot корневой файловой системы и не уверены в правильности путей к файловым системам.
Решение Чтобы узнать, в каких разделах находятся файловые системы, воспользуйтесь командой df. Перед этим проследите за тем, чтобы все проверяемые разделы были смонтированы. Сначала необходимо убедиться в том, что файловые системы установлены в правильных разделах, при помощи команды df: $ df -h
Filesystem Size Used Available Use* Mounted on /dev/hda2 2.5G 1.5G 1G 60& / /dev/hdal 100M 30M 70M 303; /boot Чтобы убедиться в правильности файлового дерева загрузочного раздела, запросите содержимое /boot/boot: $ Is /boot System.map-2.4.21 boot
grub
config
splash.xpm.gz
vmlinuz
vmlinuz-2.4.21
Некоторые дистрибутивы (скажем, Debian) создают мягкую ссылку /boot на родительский каталог: .... $ cd /boot $ Is -al boot Irwxrwxrwx 1 root
root
1 Apr
16 08:50
/boot/boot -> .
Вы можете оставить все как есть и не создавать новый каталог/boot, хотя ссылка создаст зацикливание в файловом дереве. Это еще один способ обеспечить присутствие каталога /boot в загрузочном разделе.
Комментарий Запутались? Помните, что и имя раздела не является именем каталога, потому что раздел — не каталог, а точке монтирования можно присвоить любое имя. GRUB ничего не знает о точках монтирования — загрузчик читает файловые системы до того, как они будут смонтированы-. Таким образом, если в загрузочном разделе не существует каталога/boot, GRUB не увидит/boot/grub, а только/grub. Хотя наличие каталога /boot не является строго обязательным, соблюдение этих правил существенно упростит вашу жизнь.
См. также The Grub Manual (http://www.gnu.org/software/manuaL/grub.html); info grub.
204
Глава 12. Системный загрузчик и альтернативная загрузка
12.9. Создание меню загрузки в GRUB Проблема Конечно, искать корневые устройства и ядро в командной консоли GRU В весьма увлекательно, и все же вы бы предпочли сохранить параметры загрузки в конфигурационном файле и использовать меню загрузки при запуске системы. В этом меню задаются параметры по умолчанию, а также содержится список всех установленных операционных систем.
Решение Включите загрузочные записи в конфигурационный файл GRUB, /boot/grub/ menu.1st (в Red Hat используется файл grub.conf с мягкой ссылкой menu.1st). Загрузочная запись GRUB называется строфой (stanza). Ее базовая конфигурация выглядит так: title Fedora I core root (hdO.O) kernel initrd
/boot/vmlinuz-2.4.22-1 root=/dev/hdal ro /boot/initrd-2.4.22-l.img
Название (title) выбирается произвольно, а его присутствие обязательно — оно сообщает GRUB, где начинается каждая строфа, а также определяет содержимое пункта меню загрузки. Две другие строки содержат информацию, которая вводилась в командной строке GRUB. Использовать команду boot в menu.Lst не нужно. В меню можно включить сколько угодно операционных систем; каждая система представляется отдельной строфой вроде приведенной ранее. Проследите за тем, чтобы строка kernel указывала на правильный раздел и образ ядра. В одном корневом разделе часто размещаются несколько загружаемых ядер, и все загрузочные конфигурации часто используют один и тот же загрузочный раздел (более того, это даже рекомендуется).
Комментарии Запомните, что корневое устройство, заданное строкой root
(hdO.O)
определяет местонахождение каталога/boot, а в обозначении hdO,O используется собственная система нумерации разделов GRUB. В строке kernel
/boot/vmlinuz-2.4.22-1 root=/dev/hda2 го
параметр root определяет корневую файловую систему с использованием dev-имени ядра.
См. также The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
12.10. Настройка menu.1st
205
12.10. Настройка menu.1st Проблема Требуется изменить внешний вид меню GRUB и задать значения таких параметров, как тайм-аут и пункт по умолчанию.
Решение Внесите изменения в файл /boot/grub/menu. 1st (в некоторых системах используется grub.conf). Содержимое файла делится на две секции: глобальные параметры и загрузочные записи (строфы). Цвета, тайм-аут и пункт меню по умолчанию определяются в секции глобальных параметров. Далее приводится пример полного файла menu.1st с глобальными параметрами: ## Файл конфигурации GRUB для пользователя windbag, создан 22-10-2003 ## Глобальные параметры # Пункт по умолчанию default О # Тайм-аут в секундах timeout 5 # Цвета color cyan/blue white/blue # Отображение заставки splashimage (hdO.0)/boot/splash.xpm.gz foreground bbbbbb background 000000 # Меню загрузки ## Пункт по умолчанию title Libranet GNU/Linux, kernel 2.4.21 root (hdO.O) kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro hdb=scsi hdc=scsi # Новое тестовое ядро 2.6 title Ubranet GNU/Linux. kernel 2.6.3-testl root (hdO.O) kernel /boot/bzImage-2.6.3-testl root=/dev/hdal ro # Red Hat 9 title Red Hat 9 root (hdO.4) kernel /boot/vmlinuz-2.4.22-1 root=/dev/hda5 ro initrd /boot/initrd-2.4.22-l.img
206
Глава 12. Системный загрузчик и альтернативная загрузка
Комментарий Определения глобальных параметров конфигурации: О default 0 — определение загрузочной строфы по умолчанию. Строфы нумеруются последовательно, начиная с 0, поэтому обозначение default 0 соответствует первой строфе; О timeout 5 — промежуток времени, по истечении которого загружается запись по умолчанию; О color cyan/blue white/blue — цветовая схема загрузочного меню GRUB. Первая часть (cyan/blue) определяет цвет текста и фона, а вторая (white/blue) — цвета выделенных строк текста. Список цветов приведен в руководстве GRUB и в описании info grub; О splashimage(hdO,0)/boot/splash.xpm.gz; foreground bbbbbb; background 000000 — заставку, входящую в ваш дистрибутив, можно заменить любым изображением по вашему выбору (см. раздел 12.16). Параметр splashimage задает путь к изображению. Также необходимо задать цвет текста и фона для отображения шрифтов с использованием стандартных шестнадцатеричных цветовых кодов HTML. Параметру default также можно присвоить значение saved. При использовании default saved также необходимо включить в загрузочные строфы строку savedefault: title Libranet GNU/Linux, kernel 2.4.21 root (hdO.O) kernel /boot/vmlinuz-2.4.21 root=/dev/hdal savedefault
В этом случае последняя строфа, использованная при загрузке, по умолчанию будет использоваться при следующей загрузке. Во многих дистрибутивах строка savedefault включается в загрузочные строфы, но параметр default saved отсутствует, поэтому механизм не работает.
См. также The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub; раздел 12.6.
12.11. Добавление Windows 95/98/ME в систему Linux Проблема Требуется организовать на одном компьютере альтернативную загрузку Linux и Windows 95/98/ME. Допустим, вы работаете с приложениями на обеих платформах или администрируете небольшую тестовую сеть и хотите установить как можно больше разных операционных систем, чтобы использовать разные комбинации операционных систем без использования множества компьютеров. А может быть, вы уже пытались установить Windows 95/98/ME в системе Linux, но у вас ничего не получилось — программа установки заявила, что не может
12.11. Добавление Windows 95/98/ME в систему Linux
207
отформатировать диск С: (и хорошо, а то бы она стерла установленные экземпляры Linux). Вы не хотите использовать эмуляторы типа VMWare, позволяющие работать с двумя системами одновременно без перезагрузки, потому что они стоят слишком дорого или ваше оборудование не справится с такой нагрузкой.
Решение Известно несколько хитроумных приемов для добавления Windows 95/98/ME в систему Linux. Вам придется скрыть разделы и восстановить GRUB в записи MBR после установки Windows, потому что Windows заменяет системный загрузчик. Для установки Windows 95/98/ME необходимо заранее подготовить первичный раздел. К сожалению, GRUB не поддерживает загрузку с CD-ROM, поэтому вам потребуется загрузочная дискета Windows. Если у вас еще нет такой дискеты, создайте ее в Windows. Установка Windows 95/98/ME в раздел /dev/hda4 производится так. 1. Загрузите командную консоль GRUB. 2. Вставьте загрузочную дискету Windows. 3. Скройте все существующие разделы в командной строке GRUB: grub> hide(hdO.O) grub> hidethdO.l) grub> hide(hdO,2) 4.
Загрузите W i n d o w s с дискеты: grub> chainioader (fdO) +1 grub> boot
He забудьте включить поддержку CD-ROM в загрузочную дискету. 5. Создайте первичный раздел DOS для установки Windows, используя команду MS-DOS fdisk. Когда создание разделов будет завершено и вы вернетесь к приглашению А:\>, вставьте компакт-диск Windows и запустите программу установки: D:\>
setup
6. Windows заменяет MBR, но это лишь упростит последующие перезагрузки. После того, как система будет установлена, восстановите GRUB в MBR. Загрузитесь с дискеты GRUB и выполните следующие команды: grub> root (hdO.O) grub> setup (hdO) 7. Извлеките дискету GRUB и перезагрузите компьютер. На экране снова появляется меню GRUB. Загрузите Linux и отредактируйте menu.1st: title Windows 98 on /dev/hda4 hide (hdO.O) hide (hdO.l) hide (hd0.2) unhide (hd0.3) rootnoverify(hdO,3)
makeactive
chainloader +1
208
Глава 12. Системный загрузчик и альтернативная загрузка
Комментарий Последние три параметра строки стоит рассмотреть подробнее: О rootnotverify — не пытаться читать или монтировать раздел; О makeactive — установить флаг загрузочного раздела (необходимо для Windows); О chainloader +1 — ссылка на загрузчик операционных систем, не поддерживаемых GRUB напрямую (Windows относится к их числу). Существует более простой способ организации совместной работы Windows 95/98/ ME с Linux: сначала установите Windows 95/98/ME, а затем добавьте Linux. В этом случае программа установки автоматически запишет GRUB в MBR и создаст запись для Windows в меню GRUB.
См. также Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MSDOS»; раздел 9.16; The Grub Manual (http://www.gnu.org/software/manual/grub.htmL).
12.12. Добавление Windows NT/2000/XP в систему с альтернативной загрузкой Проблема Требуется организовать на одном компьютере альтернативную загрузку Linux и Windows NT/2000/XP. Допустим, вы работаете с приложениями на обеих платформах или администрируете небольшую тестовую сеть и хотите установить как можно больше разных операционных систем, чтобы использовать разные комбинации операционных систем без использования множества компьютеров. Вы не хотите использовать эмуляторы типа VMWare, позволяющие работать с двумя системами одновременно без перезагрузки, потому что они стоят слишком дорого, или ваше оборудование не справится с такой нагрузкой... и надеетесь, что хлопот будет меньше, чем при установке Windows 95/98/ME.
Решение С Windows NT/2000/XP дело обстоит намного проще. Программа установки ведет себя более разумно — она позволяет вам выбрать существующий или создать новый раздел. Систему даже можно установить на компьютере с уже установленным экземпляром Linux (при условии, что на диске имеется достаточно свободного места и неиспользованный первичный раздел). Запишите содержимое таблицы разделов и отметьте, что установлено в каждом разделе. Windows не распознает разделы Linux, а только выводит их размеры, поэтому наличие записанной информации поможет лучше разобраться в происходящем.
12.13. Восстановление GRUB в MBR с использованием диска Knoppix
209
Загрузочная дискета на этот раз не понадобится; загрузите систему с компактдиска. После того как система будет установлена, восстановите GRUB в MBR — загрузите компьютер с дискеты GRUB и выполните следующие команды: grub> root (hdO.O) grut» setup (hdO) grub> reboot Извлеките дискету GRUB и перезагрузите компьютер. На экране снова появляется меню GRUB. Загрузите Linux и создайте в menu.1st запись для Windows: •
title Windows XP on /dev/hda4 rootnovenfy(hd0.3) makeactive chainloader +1
Скрывать разделы от Windows NT/2000/XP не нужно.
Комментарий
•
Если потребуется организовать альтернативную загрузку нескольких версий Windows, начните с самой старой и устанавливайте их по порядку, вплоть до самой новой. При этом вы можете установить только один экземпляр Windows 95/98/ ME, потому что эти системы, в отличие от Windows NT/2000/XP, не поддерживают альтернативную загрузку. Для всех версий Windows можно использовать один первичный раздел, разделив его на несколько логических разделов. Для создания разделов и их форматирования следует использовать программу установки Windows NT/2000/XP; не используйте программу Linux fdisk.
См. также Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MSDOS»; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub; раздел 12.13.
12.13. Восстановление GRUB в MBR с использованием диска Knoppix Проблема При установке Windows на компьютере с альтернативной загрузкой Linux/Windows содержимое MBR (главной загрузочной записи) было заменено, а меню GRUB заменилось меню загрузки Windows, поэтому вы не можете загрузить Linux. В документации GRUB сказано, как восстановить GRUB в MBR, но описанная процедура предполагает использование дискеты, а на вашем компьютере нет флоппи-дисковода. Как восстановить GRUB в MBR в подобной ситуации?
210
Глава 12. Системный загрузчик и альтернативная загрузка
Решение Воспользуйтесь компакт-диском Knoppix. Загрузите систему и откройте окно командного процессора. Переключитесь на учетную запись root командой su и запустите консоль GRUB. Выполните следующие три команды: grub> root (hdO.O) grub> setup (hdO) grub> quit После перезагрузки появляется меню GRUB.
Комментарий Флоппи-дисководы постепенно исчезают с компьютеров, особенно с портативных. Даже в ноутбуках, заменяющих настольные компьютеры, вместо флоппидисковода часто устанавливается комбинированный дисковод CD-ROM/DVDROM/CD-R/RW.
См. также Домашняя страница Knoppix (http://www.knopper.net); The Grub Manual (http:// www.gnu.org/software/manual/grub.html); info grub.
12.14. Защита системных файлов паролем GRUB Проблема Вы не хотите, чтобы пользователи могли работать с командной консолью GRUB, потому что они получат доступ ко всем системным файлам независимо от разрешений и привилегий.
Решение Задайте пароль в menu.1st, чтобы ограничить использование командной консоли GRUB. Сначала в Bash сгенерируйте хешированный пароль командой grub-md5-crypt: # grub-md5-crypt Password: Retype password: $l$RiAfJO$QTuAlS/BGqlkYHQADZejsl Вставьте зашифрованный пароль в секцию глобальных параметров menu.1st перед загрузочными строфами: password --md5 $l$RiAfJO$QTuAlS/BGql kYHQADZejsl Т а к ж е м о ж н о и с п о л ь з о в а т ь п р о с т о й т е к с т о в ы й пароль: password bigsecretpassword
12.15. Защита отдельных пунктов меню GRUB
211
Конечно, этот вариант менее надежен. Если вы используете простой текстовый пароль, ограничьте доступ к файлу и разрешите его только root: # chmod 600 menu.1st
Когда во время загрузки системы появится меню GRUB, нажмите клавишу р, чтобы ввести пароль и получить доступ к командной консоли. Пользователи, не знающие пароля, смогут только выбрать один из пунктов меню загрузки; командная консоль GRUB останется для них недоступной.
Комментарий Разрешения на доступ к файлам являются атрибутами файловой системы. GRUB работает вне файловых систем, поэтому каждый, кто имеет доступ к командной консоли GRUB, сможет прочитать любой файл в системе. Даже если вы потеряете пароль GRUB, это еще не катастрофа. Загрузите систему с диска аварийного восстановления и отредактируйте файл menu.Lst. В этом проявляется старый принцип безопасности в Unix: «При наличии физического доступа к компьютеру с ним можно делать все, что угодно».
См. также The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
12.15. Защита отдельных пунктов меню GRUB Проблема Меню GRUB состоит из нескольких пунктов. Вы не хотите, чтобы каждый пользователь мог выбрать любой пункт; некоторые пункты меню должны оставаться недоступными для пользователей.
решение Установите пароль GRUB (см. раздел 12.14), а затем включите команду lock в menu. 1st: title Libranet GNU/Linux, kernel 2.4.21. single user mode lock root (hdO.O) kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro single
GRUB читает menu.Lst последовательно, поэтому все строки после lock становятся недоступными для пользователей, не знающих пароля. При попытке загрузить заблокированный пункт меню будет выдано следующее сообщение об ошибке: Error 32: Must be authenticated
Желательно сообщить пользователям, к каким командам меню ограничен доступ: Libranet GNU/Linux, kernel 2.4.21. single user mode, AUTHENTICATION REQUIRED
212
Глава 12. Системный загрузчик и альтернативная загрузка
Комментарий Пароли GRUB и строка Lock особенно полезны на общих рабочих станциях — например, в учебных залах, лабораториях и на рабочих местах. Тем не менее любой пользователь, обладающий физическим доступом к компьютеру, сможет использовать загрузочный диск аварийного восстановления и получить неограниченный доступ. Чтобы этого не произошло, можно запретить использование аварийных дисков в программе настройки BIOS, но не забывайте, сколько существует различных загрузочных устройств: дискеты, компакт-диски, устройства USB, Jaz/ Zip, Ethernet Wake-on-LAN, SuperDisk... и наверное, это еще не все. Завершив настройку, установите пароль на вход в BIOS.
См. также • The Grub Manual (http://www.gnu.org/software/manual/grub.html);
info grub.
12.16. Создание заставки GRUB Проблема Вам надоела стандартная заставка GRUB из вашего дистрибутива Linux и вы хотите заменить ее другим изображением, созданным вами.
Решение Заставку GRUB можно создать на базе любого графического файла. Преобразуйте изображение к определенному формату и размеру, а затем включите в menu.Lst ссылку на созданный файл. Графические заставки GRUB должны удовлетворять следующим требованиям: О тип файла — xpm.gz; О размеры — 640 х 480; О 14 цветов. Начните с создания изображения размером не менее 640x480 в любом графическом формате. Остальное делается программами ImageMagick и gzip. В следующем примере мы преобразуем файл .jpg: $ convert -depth 14 -resize 640x480 image.jpg newimage.xpm && gzip newimage.xpm Переместите новый файл newimage.xpm.gz. Откройте файл menu.1st и добавьте (или измените) строку с определением заставки: # Отображение заставки splashimage (hdO.5)/boot/newimage.xpm.gz
Комментарий Семейство ImageMagick состоит из нескольких утилит командной строки: animate composite
12.17. Загрузка Linux с использованием LILO
213
conjure
convert display identify import mogrify montage
Отдельной команды imagemagick не существует. За подробностями обращайтесь к imagemagick(l). Попробуйте провести поиск в Google по словам «grub splashimage». Вы найдете всевозможные галереи графических изображений, а также рекомендации и полезные приемы по их созданию.
См. также imagemagick(l), gzip(l), info grub; The Grub Manual manual/grub, html).
(http://www.gnu.org/software/
12.17. Загрузка Linux с использованием LILO Проблема Вы используете загрузчик LILO и хотите знать, как настроить его для загрузки системы Linux.
Решение Сгенерируйте базовый файл liloconf командой liloconfig. Отредактируйте файл, включите в него комментарии, названия и любые дополнительные параметры по вашему усмотрению. Убедитесь в том, что вы загрузили новейшую версию LILO. Как обычно, создайте резервную копию данных и держите под рукой загрузочный диск. Выполните команду: # /sbin/1-ilo -V LILO version 2 2 . 4 . 1
После установки/обновления запустите liloconfig. Программа задает много вопросов и предлагает выполнить многочисленные инструкции. Допустим, корневая файловая система находится в разделе /dev/hda3. Ответьте положительно на четыре вопроса: Install a partition boot record to boot Linux from /dev/hda3? Use LBA32 for addressing big disks using new BIOS features? Install a master boot record on /dev/hda? Make /dev/hda3 the active partition? Запустите lilo, чтобы записать изменения в MBR: # /sbin/lilo -v
Перезагрузите компьютер. Вероятно, файл /etc/lilo.conf стоит отредактировать, потому что он содержит минимальный набор записей.
214
Глава 12. Системный загрузчик и альтернативная загрузка
Комментарий Команда liloconfig хорошо подходит для создания базового файла lilo.conf; после этого файл проще и удобнее редактировать вручную. При каждом изменении /etc/lilo.conf необходимо запускать LILO, чтобы внести изменения в MBR: # /sbin/lilo -v
Параметр -V определяет уровень детализации вывода, а его значения лежат в интервале от 1 до 5: # /sbin/lilo -v5
См. также lilo(8), lilo.conf(5);/usr/doc/lilo или/usr/share/doc/LHo; «The Large Disk Howto» на tldp.org.
12.18. Альтернативная загрузка Linux с использованием LILO Проблема Требуется установить несколько экземпляров Linux на одном компьютере с использованием загрузчика LILO.
Решение Первый установленный экземпляр Linux является «основным». Сохраните его, чтобы обеспечить работу LILO. Проследите за тем, чтобы корневая файловая система, содержащая каталог /boot, находилась в первичном разделе, в противном случае LILO работать не будет. Запишите местонахождение раздела, в котором будет устанавливаться корневая файловая система следующего экземпляра Linux. Если вы также знаете точное имя ядра и образа initrd (если он используется), вы можете немного опередить события. Оставаясь в основном экземпляре Linux, создайте запись lilo.conf для второго экземпляра: # Red Hat 9 image=/boot/vmlinuz-2.4.22-l 1nitrd=/boot/i nitrd-2.4.22-1.img label="Red Hat 9" root=/dev/hda6 read-only
Запишите изменения в MBR: # /sbin/lilo -v
Переходите к установке второго экземпляра. Присутствие записи в меню загрузки LILO ускорит перезагрузки, необходимые для завершения установки. Когда программа установки перейдет к установке загрузчика, обязательно выберите вариант «install to the first sector of the root partition» (возможно, в вашей программе установки формулировка будет выглядеть несколько иначе). Не перезаписывайте MBR.
12.19. Альтернативная загрузка Windows и Linux с использованием LJLO
215
Если точные имена ядра и образа initrd неизвестны, вам придется узнать их в основном экземпляре Linux. Переходите к установке второго экземпляра Linux. Когда дело дойдет до первой перезагрузки, вы снова окажетесь в основном экземпляре Linux. Смонтируйте файловую систему второго экземпляра Linux и прочитайте содержимое каталога/boot: # mount /dev/hda6 /mnt/tmp # cd /mnt/tmp # Is boot System.map
initrd-2.4.22-1.img
System.map-2.4.22-1
vmlinuz v m l i n u z - 2 . 4 . 2 2 . 1
Имена ядра и образа initrd известны. Создайте запись в lilo.conf, перезапустите /sbin/LiLo и перезагрузите компьютер. Теперь вы можете выбрать новую версию Linux в меню загрузчика и завершить установку программы.
См. также 1Но(8), Li"Lo.conf(5); /usr/doc/lilo или/usr/share/doc/lilo.
12.19. Альтернативная загрузка Windows и Linux с использованием LILO Проблема Требуется организовать альтернативную загрузку Linux и Windows (или нескольких экземпляров каждой из систем).
Решение Самый простой способ — установить все версии Windows, которые должны работать в системе. Всегда устанавливайте их по порядку, начиная с самой старой. Сохраните четвертый первичный раздел для Linux. В системе может быть установлен только один экземпляр Windows 95/98/ME, потому что эти системы не поддерживают альтернативную загрузку. Windows NT/ 2000/ХР поддерживают альтернативную загрузку и создают записи для каждого установленного экземпляра в загрузчике Windows. Установите Linux в последнюю очередь. Сделайте четвертый первичный раздел расширенным и создайте логический раздел для Linux. Во время установки Linux установите LILO в MBR, a LILO автоматически создаст запись для Windows. # Стабильное ядро 2.4 image=/boot/vmlinuz-2.4.21 label="Libranet-hd3"
!£.£! root=/dev/hda5 read-only # Windows other = /dev/hdal label="Windowses" table = /dev/hda
216
Глава 12. Системный загрузчик и альтернативная загрузка
Для Windows достаточно одной записи, потому что LILO передает управление загрузочному меню Windows.
Комментарий Когда в системе установлено несколько версий Windows, загрузчик Windows всегда относится к первой из них. Таким образом, если в /dev/hdal установлена система Windows 95, а в /dev/hda2 — Windows 2000, в LILO все равно включается ссылка на/dev/hdal.
См. также Lilo(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo; Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MS-DOS».
12.20. Создание загрузочной дискеты LILO Проблема Требуется создать загрузочную дискету LILO на случай, если возникнут проблемы.
Решение Воспользуйтесь встроенной функцией создания загрузочных дискет: # cd /usr/iib/iilo # make -f Makefile.floppy
He забудьте защитить дискету от записи.
Комментарий В мире Linux существует огромное количество всевозможных загрузочных дисков. Если вам удастся загрузить систему, вы сможете исправить любые ошибки. Обязательно проверьте установочные диски своего дистрибутива, потому что на них часто имеются средства аварийного восстановления, приспособленные для вашего дистрибутива, в том числе и утилиты для переустановки загрузчика.
См. также И1о(8), lilo.conf(5); /usr/doc/lilo или/usr/share/doc/lilo.
12.21. Защита LILO паролем Проблема Вы не хотите, чтобы пользователи испортили тщательно настроенную конфигурацию загрузчика. Также стоит сделать так, чтобы они не могли использовать
12.22. Создание резервной копии MBR
217
возможности LILO по получению доступа root без пароля, что легко делается вводом команды linux single или linux init=/bin/sh
в приглашении LILO.
Решение Ограничьте доступ к liLo.conf и разрешите его только суперпользователю root: # chmod 600 l i l o . c o n f
Затем защитите LILO паролем. Внесите в секцию глобальных параметров lilo.conf следующие записи: password-"" restricted Перезапустите LILO, чтобы изменения вступили в силу: # /sbin/lilo
В ответ на запрос введите пароль root. Программа создает файл/etc/lilo.conf.shs с паролем, доступным только для root. Теперь при перезагрузке системы LILO будет запрашивать пароль у каждого, кто попытается ввести команду linux single или linux init=/bin/sh.
Комментарий Для обеспечения дополнительной безопасности на стадии загрузки заблокируйте все внешние загрузочные устройства в программе настройки BIOS и установите пароль на вход в BIOS. Решение не идеально, но по крайней мере, рядовые пользователи не смогут испортить вашу работу.
См. также lilo(8), lilo.conf(5); /usr/doc/lilo или/usr/share/doc/lilo,.
12.22. Создание резервной копии MBR Проблема Требуется создать резервную копию главной загрузочной записи. Но какая польза от резервной копии, если вы не знаете, как ее восстанавливать?
Решение Запишите резервную копию MBR на дискету. Смонтируйте диск, а затем воспользуйтесь командой dd: # dd if=/dev/hda of=/floppy/mbr bs=512 count=l
218
Глава 12. Системный загрузчик и альтернативная загрузка
Восстановление производится следующим образом: # dd if=/floppy/mbr of=/dev/hda bs=512 count=l
Имя файла с резервной копией может быть произвольным: например, имя /mbr-serverOl указывает, какому компьютеру принадлежит копия. На одной дискете можно сохранить несколько резервных копий MBR: # Is /floppy lost+found mbr-serverOl mbr-workstation04
mbr-hostl5
Если дискету нужно предварительно отформатировать, сделайте это: $ mke2fs /dev/fdO
Команда создает диск, отформатированный для Linux с файловой системой Ext2.
Комментарий Команда dd выполняет побайтовое копирование. Поддержка файловых систем ей не нужна, поэтому она может использоваться для копирования блочных устройств (например, /dev/hda). Если в вашей системе отсутствует флоппи-дисковод, испорченную запись MBR можно восстановить при помощи диска Knoppix (см. раздел 12.13).
См. также dd(l), mke2fs(8); раздел 12.13.
Глава 13
Восстановление работоспособности системы на примере Knoppix 13.1. Введение Крайне неприятно, когда ваш компьютер вдруг отказывается загружаться. Knoppix, полноценный дистрибутив Linux на базе Debian на загрузочном компакт-диске, является первоклассным средством восстановления. В вашем распоряжении оказываются свыше 2 Гбайт утилит и драйверов Linux, сжатых в один 700-мегабайтный компакт-диск. Knoppix прекрасно справляется с идентификацией оборудования, поддерживает все основные файловые системы, автоматически находит существующие разделы, создает точки монтирования и ищет сервер DHCP. Для ручной настройки сети имеется удобная утилита netcardconfig. По простоте использования Knoppix не имеет себе равных. Достаточно вставить диск, загрузить систему — и все работает. Knoppix можно установить в виде 700-мегабайтного файла .iso или приобрести компакт-диск (последнее удобно для пользователей с медленным или дорогим подключением к Интернету). У Knoppix появилось целое сообщество пользователей. На сайте Knoppix.net можно найти большое количество специализированных проектов, вдохновленных Knoppix, а также информации о создании собственных загружаемых компакт-дисков.
13.2. Загрузка Knoppix Требуется настроить процесс загрузки Knoppix. Для начала нужно разобраться, какие изменения можно внести в него.
Решение Чтобы получить список всех параметров загрузки, нажмите F2 при выводе приглашения.
220
Глава 13. Восстановление работоспособности системы на примере Knoppix
В принципе можно просто вставить диск Knoppix в дисковод и предоставить ему загрузиться самостоятельно, но в вашем распоряжении имеются многочисленные параметры загрузки. По умолчанию используется немецкая раскладка клавиатуры; вероятно, вы предпочтете сменить ее с учетом своего локального контекста: knoppix lang=ru
По умолчанию Knoppix загружает рабочий стол KDE. Выбор другой программы осуществляется командой knoppix desktop=icewm Загрузка в консольном режиме без запуска X: knoppix 2
Процесс загрузки можно немного ускорить, отключив идентификацию отсутствующего оборудования: knoppix nopcmcia noscsi Загрузка с минимальной идентификацией оборудования: failsafe
В одной строке можно объединить несколько параметров: knoppix lang=ru desktop=icewm nopcmcia noscsi
Комментарий Для загрузки Knoppix в консольной версии потребуется около 20 Мбайт памяти, а для удовлетворительной работы сеанса X необходимо не менее 96 Мбайт. Для запуска KDE желательно иметь 256 Мбайт памяти. Knoppix найдет и использует раздел виртуальной памяти на жестком диске, если он существует. Если вам не понравится, как прошла загрузка Knoppix, или вы хотите опробовать другой режим, вам не придется возиться с корректным завершением работы — просто выключите питание и начните заново.
Проблемы с Knoppix Запуск программ с компакт-диска сопряжен со специфическими проблемами, особенно на ноутбуках. Системы управления питанием нередко нарушают работу сеанса Knoppix: при выходе из спящего режима Knoppix перестает реагировать на команды. Попробуйте отключить систему управления энергопотребления или нажмите кнопку питания и начните заново. Иногда Knoppix «зависает» во время загрузки в процессе запуска KDE (или любого сеанса X). Переключитесь на первую виртуальную консоль (Ctrl+Alt+Fl) и проверьте список системных сообщений; так можно определить источник проблем. Например, Knoppix может зависнуть при идентификации устройств SCSI. В таком случае перезагрузите компьютер и отключите идентификацию SCSI: knoppix noscsi
См. также Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net); домашняя страница Клауса Кноппера (http://www.knopper.net).
13.4. Сохранение конфигурации Knoppix на флэш-диске
221
13.3. Создание загрузочной дискеты Knoppix Проблема Система не загружается с компакт-диска, но вам все равно хочется использовать Knoppix. Как создать загрузочную дискету Knoppix?
Решение На диске Knoppix имеется загрузочный образ, готовый к копированию на дискеты. Загрузите и смонтируйте компакт-диск Knoppix на любом компьютере с Linux, вставьте чистую дискету и выполните команду # dd if=/cdrom/KNOPPIX/boot.img of=/dev/fdO bs=1440k Загрузочную дискету также можно создать в Windows. Откройте окно DOS, затем откройте каталог KNOPPIX на компакт-диске: с:> d: d:> cd \KNOPPIX
Затем создайте дискету: d:> mkfloppy.bat
Загрузите систему с дискеты, вставьте диск Knoppix, когда вам будет предложено это сделать, и приступайте к работе.
Комментарий Включение пакетного файла DOS для создания загрузочной дискеты Knoppix стоит отметить особо — это еще один полезный инструмент в вашем арсенале аварийного восстановления системы.
См. также Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net); домашняя страница Клауса Кноппера, создателя Knoppix (http://www.knopper.net).
13.4. Сохранение конфигурации Knoppix на флэш-диске Проблема Хорошо бы сохранить конфигурацию Knoppix (параметры сети и рабочего стола и т. д.), чтобы вам не приходилось каждый раз начинать заново.
Решение Для этой цели идеально подойдет флэш-диск с интерфейсом USB. Загрузите Knoppix с вставленным флэш-диском. Откройте меню Knoppix и выберите команду
222
Глава 13. Восстановление работоспособности системы на примере Knoppix
Configuration • Save Knoppix Configuration. Выберите для сохранения устройство /dev/sdal. Во время загрузки Knoppix убедитесь в том, что флэш-диск вставлен в разъем USB, и введите следующую команду: knoppix myconfig=/dev/sdal
Также можно приказать Knoppix обнаружить сохраненную конфигурацию автоматически: knoppix myconfig=scan
Комментарий Флэш-диски USB объемом 256 и 512 Мбайт стали до смешного дешевыми. Носите с собой такое устройство и диск Knoppix, и вы сможете работать почти где угодно.
См. также Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net); домашняя страница Клауса Кноипера (http://www.knopper.net).
13.5. Создание зашифрованного домашнего каталога Knoppix Проблема Вам хотелось бы запускать Knoppix с компакт-диска, потому что его содержимое не может быть заражено вирусами и троянами. Но при этом возникает проблема: где хранить личную информацию, электронную почту и другие персональные данные? Требуется создать защищенный домашний каталог для хранения электронной почты и других файлов данных.
Решение Выполните команду Knoppix • Configure • Create, чтобы создать домашний каталог Knoppix на жестком диске или съемном носителе (скажем, флэш-диске USB, карте памяти или Zip-диске). Команда создает файл с именем knoppix.img. Когда программа спросит, нужно ли применять шифрование AES при создании каталога, ответьте положительно. Каталог шифруется с 256-разрядным ключом, а вам будет предложено ввести пароль длиной не менее 20 символов. Используйте хорошо запоминающуюся фразу (например, «thisismylongpassword»), потому что вам придется вводить ее при каждой загрузке системы. Чтобы загрузить Knoppix с использованием зашифрованного каталога /home, вставьте съемный носитель и введите команду boot: knoppix home=/dev/sdal Если ранее вы сохранили рабочую конфигурацию Knoppix, укажите и ее: boot: knoppix home=/dev/sdal myconfig=/dev/sdal
13.6.
Копирование файлов на другой PC с системой Linux
223
Новый каталог /home появляется в Knoppix в виде /home/knoppix и автоматически монтируется при загрузке. Если зашифрованный каталог /home хранится в существующем разделе Linux на жестком диске, монтируется весь раздел.
Комментарий По умолчанию объем каталога /home/knoppix составляет 30 Мбайт. Увеличьте его до нужных размеров.
См. также Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net); домашняя страница Клауса Кноппера (http://www.knopper.net).
13.6. Копирование файлов на другой PC с системой Linux Проблема Требуется скопировать файлы с проблемного PC на другой компьютер в сети. Например, компьютер «умирает» или странно ведет себя, и вы хотите создать резервную копию нужных файлов.
Решение Загрузите Knoppix. Проблемный PC должен быть подключен к локальной сети; если в сети имеется сервер DHCP, Knoppix свяжется с ним автоматически. Чтобы настроить статический IP-адрес, запустите утилиту netcardconfig в консольном режиме или выполните команду Knoppix • Network/Internet. На компьютере-приемнике должен быть настроен сервер SSH (см. подраздел «Комментарий»). Сначала смонтируйте файловую систему, содержащую копируемые файлы. Knoppix создает /etc/fstab, помещает все точки монтирования в каталог/mnt и создает на рабочем столе значки для всех файловых систем. Самый простой способ смонтировать файловую систему — щелкнуть на значке рабочего стола. Также можно заглянуть в /etc/fstab и использовать командную строку. Сначала получите привилегии root (пароль не нужен): knoppix@ttyO[knoppix]$ su root@ttypO[knoppix]# mount /mnt/hda5 Затем выполните команду scp (Secure CoPy): # scp -rp /mnt/hda5/home/kmarfin 192.168.1.5:/home/kmartin/tmp
На экране появляется предупреждение: Could not create directory '/home/kmartin/.ssh'. The authenticity of host 492.168.1.5 (192.168.1.5)' can't be established. RSA key fingerprint is a2"c6:77:2e:63:b2:ed:90:b2:9b:bc:e7:d4:22:ba Are you sure you want to continue connecting? (yes/no)?
224
Глава 13. Восстановление работоспособности системы на примере Knoppix
Подтвердите подключение. Вам будет предложено ввести пароль root для сервера SSH. Введите пароль, и файлы будут скопированы. То же самое можно сделать в качестве обычного пользователя, для собственной учетной записи пользователя. Создайте нового пользователя в приглашении Knoppix: root@ttypO[knoppix]# useradd kmartin
Пароль назначать не нужно — вам потребуется только пароль пользователя для сервера SSH. Теперь пользователь kmartin может копировать файлы в свою учетную запись на сервер SSH. Только суперпользователь root может копировать файлы в учетные записи других пользователей.
Комментарий Ключ -г команды scp осуществляет рекурсивное копирование каталогов. Ключ -р сохраняет разрешения. А вот как настроить сервер SSH «на скорую руку»: установите OpenSSH на компьютере с системой Linux, на который вы собираетесь копировать файлы. Если программа уже установлена, обновите ее до последней версии, чтобы включить новейшие заплатки системы безопасности. Затем выполните команду # /etc/init.d/ssh start Компьютер готов к приему файлов. Если вы собираетесь постоянно использовать SSH для удаленного администрирования, не останавливайтесь на этом и проделайте еще ряд действий по защите подключения. Дополнительная информация об использовании SSH приведена в главе 17. Так как Knoppix работает в памяти, сохранить данные хостов и ключи SSH не удастся, поэтому вы будете каждый раз получать одни и те же предупреждения. Если вы собираетесь часто копировать файлы командой scp, обратитесь к разделу 13.5.
См. также scp(l), ssh(l); раздел 13.5.
13.7. Копирование файлов в общий каталог Samba Проблема Требуется скопировать файлы с Linux PC на Windows PC по локальной сети с использованием Knoppix.
Решение Предварительно необходимо установить и настроить Samba (см. главу 23). Переключитесь на привилегии root: knoppix@ttypO[knoppix]$ su rootPttypO[knoppi x]#
13.8. Копирование файлов на диск CD-R/RW
225
Создайте локальный каталог для монтирования сетевого общего каталога. Смонтируйте удаленный каталог: root@ttypO[knoppix]# mkdir /mnt/samba root@ttypO[knoppix]# mount -t smbfs -о \ uid=knoppix,workgroup=local,username=helix,passworcM:ehsecuar \ //windbag/1an_share/mnt/samba
Используйте соответствующие имена рабочей группы и пользователя, пароль, имя хоста и общего каталога. Если в Windows 95/98/ME в настройках общего доступа к файлам не был указан пароль, используйте имя пользователя guest, а поле пароля оставьте пустым. Теперь вы можете открыть окна Konqueror для копирования файлов или воспользоваться командой ср: root@ttypO[knoppix]# cp -av /home/helix /mnt/samba
Комментарий Если вы предпочитаете графический интерфейс, существуют и другие варианты. Если имя хоста и общего каталога известны, введите их на панели адреса Konqueror: smb://HOST/SHARE В Knoppix также входит программа LinNeighborhood для обзора сети. Она запускается командой Internet • LinNeighborhood.
См. также The Official Samba-3 Howto and Reference Guide for Samba 3.x (http://samba.org/); глава 23.
13.8. Копирование файлов на диск CD-R/RW Проблема На компьютере установлен записывающий CD-дисковод. Требуется записать файлы на диск CD-R/RW.
Решение Проще всего воспользоваться КЗЬ. Запустите Knoppix и выполните команду System • КЗЬ Setup. K3b автоматически обнаруживает CD-дисководы; проверьте результаты на этапе 3 мастера настройки. На этапе 6 включите всех пользователей, отличных от root, которым разрешено использование КЗЬ (помните, что пользователей нужно создать заранее). Завершив настройку, закройте мастера и запустите программу System • КЗЬ. Выберите команду File • New Project. Перетащите нужные файлы мышью и щелкните на кнопке Burn.
226
Глава 13. Восстановление работоспособности системы на примере Knoppix
Комментарий КЗЬ — замечательный интерфейс записи CD/DVD, один из лучших инструментов на всех платформах. Программа логично устроена и скрывает все технические подробности записи от пользователя, избавляя его от необходимости перебирать многочисленные окна или разбираться в технических терминах «Joliet», «Rock Ridge» или «El Torito».
См. также Глава 11; домашняя страница КЗЬ (http://www.k3b.org/).
13.9. Редактирование конфигурационных файлов в Knoppix Проблема Кто-то (может быть, и вы) слегка «подправил» содержимое конфигурационного файла, и система перестала загружаться. Нужно вернуть ее в рабочее состояние. Но как отредактировать файл на компьютере, который не загружается?
Решение Knoppix позволяет открыть и отредактировать любой файл на компьютере. Загрузите диск Knoppix с оболочкой KDE. Щелкните правой кнопкой мыши на значке файловой системы, выберите Mount, а затем выберите Change read/write mode. Получите права root, перейдите в каталог с редактируемым файлом и откройте файл в редакторе по своему усмотрению: knoppix@ttypO[knoppix]$ su root@ttypO[knoppix]# cd /mnt/hda3/etc root@ttypO[etc]# kate inittab &
Переходите к редактированию файла.
Комментарий В Knoppix входит ряд других оконных менеджеров: larswm, IceWM, XFce, Windowmaker, Fluxbox и TWM, но только KDE включает меню Knoppix и создает на рабочем столе значки для всех разделов. Эти операции, как и все остальные операции Linux, могут выполняться из консоли. Например, монтирование файловой системы чтения/записи выполнится следующей командой: root@ttypO[knoppix]# mount -о rw /mnt/hda3 Открытие файла для редактирования: rootPttypO[knoppix]# vim /mnt/hda3/etc/inittab
См. также mount(8); раздел 9.11.
13.11. Восстановление потерянного пароля root
227
13.10. Установка программ из Knoppix Проблема Требуется запустить apt-get, apt-rpm, up2date или другую утилиту обновления, которая должна запускаться из своей корневой файловой системы.
Решение Knoppix позволяет переключиться на корневую файловую систему, находящуюся на жестком диске, командой chroot: root@ttypO[knoppix]# mount -о rw /mnt/hda6 root@ttypO[knoppix]# chroot /mnt/hda6 root@Knoppix:/
Вместо каталога/mnt в Knoppix вы оказываетесь в файловой системе на жестком диске так, словно система была загружена непосредственно из нее. Далее можно выполнить любую команду так, словно система была загружена обычным образом — в том числе и команду apt-get.
Комментарий В обычном сеансе Knoppix все файловые системы на жестком диске монтируются в каталоге/mnt, но после выполнения chroot файлы Knoppix становятся невидимыми.
См. также chroot(8).
13.11. Восстановление потерянного пароля root Проблема
'
Какая неприятность... Вы потеряли пароль root.
Решение Ничего страшного — запустите Knoppix и откройте консоль root. Смонтируйте файловую систему, содержащую файл /etc/shadow, и разрешите доступ для записи (см. раздел 9.10). Откройте файл /etc/shadow в своем любимом редакторе, найдите запись root: root:$l$7nMNZYci $E.U6ftxnAZU0rk29qvYpk0:12460:0:99999:7::: Удалите хеш-код пароля между первыми двоеточиями: root::12460:0:99999:7::: Теперь при запуске системы и входе в нее под именем root вам не придется вводить пароль.
228
Глава 13. Восстановление работоспособности системы на примере Knoppix
Комментарий Не забудьте поскорее назначить новый пароль root. Это еще одно проявление принципа «При наличии физического доступа к компьютеру с ним можно делать все, что угодно». В главе 12 приведены некоторые рекомендации по защите процесса загрузки.
См. также Shadow(5); разделы 12.14, 12.15 и 12.21.
13.12. Установка Knoppix на жесткий диск Проблема Вам нравится Knoppix и вы хотите установить его на жесткий диск, как «настоящую» версию Linux. •
Решение Загрузите Knoppix и откройте консоль root. Введите команду knoppix-instatler и выполните дальнейшие инструкции. Когда установка будет завершена, на жестком диске появится вполне современная система на базе Debian.
Комментарий Установка Knoppix мало чем отличается от любой другой установки Linux. Ознакомьтесь с документацией по своей версии Knoppix, потому что до версии 3.2 сценарий установки назывался knx-hdinstaU, а в версии 3.3 он был переименован в knoppix-installer. Возможно, в будущем он снова изменится — мир Linux не стоит на месте.
См. также The Knoppix Wiki (http://www.knoppix.net/docs/).
13.13. Запуск антивирусных программ на WindowsPC Проблема Нужен быстрый, недорогой способ проведения антивирусного сканирования в Windows без привязки к операционной системе. Вы знаете, что установочные диски коммерческих антивирусных продуктов (например, от Symantec и McAfee) способны проводить сканирование перед установкой программы, но базы данных на таких дисках быстро устаревают.
13.13. Запуск антивирусных программ на Windows PC
229
Решение Достаньте копию Knoppix 3.4 или более новую версию. Также потребуется подключение к Интернету для загрузки обновленных баз данных с определениями вирусов. В разделах Windows с файловой системой FATI6/32 можно провести как сканирование, так и сканирование с обезвреживанием вирусов. В файловых системах NTFS возможно только сканирование, поскольку поддержка записи в разделы NTFS в Linux все еще недостаточно надежна. Загрузите Knoppix, выполните команду KNOPPIX • Utilities • Install Software. На экране появляется перечень пакетов, доступных для установки; выберите f-prot. После того как программа f-prot будет установлена, выберите команду KNOPPIX • Extra Software • f-prot. Выберите в меню f-prot пункт 4, Online Update. Когда обновления вирусных баз данных будут успешно загружены, выберите разделы или каталоги для сканирования. Knoppix автоматически монтирует все разделы вашей системы, поэтому вы можете легко выбрать разделы для проверки. Чтобы ограничиться только сканированием, щелкните на кнопке Scan — и займитесь чем-нибудь другим, потому что это потребует немалого времени. После завершения на экране выводится отчет с результатами сканирования. Чтобы провести сканирование с обезвреживанием вирусов, запустите f-prot в режиме командной строки (вместо графического меню). Убедитесь в том, что раздел смонтирован для чтения/записи; просто щелкните правой кнопкой мыши на значке диска, находящемся на рабочем столе Knoppix, и выберите команду Actions • Change read/write mode. Введите в командном процессоре следующую команду (укажите раздел, подлежащий сканированию): $ f -prot -disinf -list /mnt/hdal
Ключ -list выводит информацию о ходе сканирования, а ключ -disinf включает режим обезвреживания вирусов.
Комментарий У такого решения имеется ряд преимуществ: О вы работаете в заведомо чистой операционной системе — а поскольку диск защищен от записи, ее невозможно испортить; О загрузка Knoppix требует перезапуска компьютера, поэтому все резидентные вирусы, находящиеся в памяти, будут уничтожены; О Knoppix распространяется бесплатно, поэтому никто не мешает вам записать несколько дисков и проводить сканирование сразу на множестве компьютеров.
См. также Knoppix.net (http://www.knoppix.net); домашняя страница f-prot (http://www.f-prot.com).
Глава 14 CUPS
щ
liiii 14.1. Введение Система CUPS (Common Unix Printing System) — современная подсистема печати для Linux и Unix, заменяющая древние протоколы построчной печати Unix. CUPS работает в Unix, Linux, Mac OS и Mac OS X, а также обслуживает клиентов на практически любых платформах, включая Windows. CUPS идет в ногу со временем и поддерживает лазерные и струйные принтеры, а также матричные и другие старые модели принтеров. CUPS существует в двух версиях: бесплатной версии GPL, которая по умолчанию используется в большинстве серьезных дистрибутивов Linux, и в коммерческой версии. Коммерческая версия обеспечивает техническую поддержку, более широкий ассортимент драйверов и более удобный управляющий интерфейс. Драйверы принтеров CUPS состоят из одного или нескольких фильтров, упакованных в формате PPD (PostScript Printer Description). Все принтеры в CUPS — даже не поддерживающие PostScript — должны иметь файл PPD с описанием принтеров, специфических команд и фильтров. Фильтры занимают центральное место в CUPS. Они преобразуют задания печати в формат, понятный для принтера (PDF, HP-PCL, растровый формат и т. д.), а также передают команды для выполнения таких операций, как выбор страницы и сортировка. Файлы PPD являются текстовыми — если вас интересует, как они выглядят, посмотрите в каталоге/usr/share/cups/model/. Файлы PPD установленных принтеров хранятся в каталоге/etc/cups/ppd.
Поиск драйверов В комплект поставки CUPS входят универсальные файлы PPD для 9- и 24-игольчатых матричных принтеров Epson, принтеров Epson Stylus и Color Stylus Photo, LaserJet и HP DeskJet и даже экзотических устройств печати этикеток Dymo. Они работают на сотнях моделей принтеров, но в некоторых случаях не поддерживают полный набор функций конкретного принтера вроде двусторонней печати, чистки головок или выбора лотка.
14.1. Введение
231
Если производитель вашего принтера не предоставляет драйвер для Linux, существуют четыре хороших ресурса: О Foomatic (http://linuxprinting.org); О Gimp-Print (http://gimp-print.sourceforge.net); О сайт коммерческой версии CUPS (http://www.easysw.com/cups/); О драйверы PostScript для Windows. Foomatic — бесплатный проект, объединяющий все распространенные системы печати Linux (CUPS, LPRng, LPD, GNUlpr, PPR, PDQ, CPS). Проект Gimp-Print изначально был задуман как модуль печати для Gimp, но позднее его рамки были расширены до общей поддержки печати в Linux. Драйверы Gimp-Print отличаются высочайшим качеством. Если для вашего цветного принтера существует такой драйвер, скорее всего, этот выбор окажется оптимальным. Перед тем как приобретать принтер, обязательно сверьтесь со списком совместимости оборудования вашего дистрибутива Linux или с базой данных принтеров linuxprinting.org. Gimp-Print и Foomatic существуют в виде пакетов, которые можно установить в системе (если они не были включены в дистрибутив). Установка гарантирует полноту набора драйверов и наличие всех обязательных подсистем. На странице http://www.cups.org/testppd.php можно проверить файл PPD. Проверка сводится к поиску синтаксических ошибок в файлах PPD — как правило, такие ошибки легко исправляются (опечатки или неверные команды).
Сетевые принтеры Существует четыре основных способа организации совместного доступа к принтерам в сети: О совместное использование принтеров, подключенных к компьютерам пользователей; О создание выделенного сервера печати Linux; О приобретение сетевых принтеров (таких, как принтеры серии HP JetDirect); О приобретение аппаратных серверов печати (например, Linksys EPSX3), позволяющих напрямую подключить любой принтер к локальной сети. В этой главе рассматриваются первые два способа. Два других слишком разнообразны, а количество вариантов слишком велико. Приведу некоторые рекомендации, которые стоит учитывать при выборе. О Использование компьютера с системой Linux в качестве сервера печати обеспечивает максимальную гибкость и полноту настройки. О Сетевые принтеры, содержащие встроенное сетевое оборудование, обычно дорого стоят. О Сетевые принтеры обычно предназначаются для интенсивной загрузки. О Аппаратный сервер печати позволяет организовать сетевой доступ к любому принтеру.
232
Глава 14. CUPS
Сетевые принтеры и аппаратные серверы печати расходуют меньше энергии и занимают меньше места, чем компьютер, используемый в качестве выделенного сервера печати. Тем не менее при покупке следует внимательно изучить вопрос поддержки в Linux, потому что некоторые устройства комплектуются только управляющими программами для Windows. Все, что управляется через веб-интерфейс, должно работать нормально.
14.2. Подключение принтера к автономному компьютеру с системой Linux Проблема Требуется подключить принтер к компьютеру с системой Linux.
Решение Если принтер подключается к порту USB, он должен быть подключен (с подачей питания) во время загрузки системы. Сначала убедитесь в том, что в системе работает демон CUPS: $ lpstat -t scheduler is running
Location'£3rt View Qn Bookmarks Tools Settings Window Help
*„<-* M I
i
. •* *<>v с «
E» Location: p|^Ilitlp.Vlocalhost63I/printers -;-"rir,-.ir mioiainosf-CUPS .
(
_
а.?» Э
те Administralion
Classes
Help
Jobs
Printers
Software
1Printer Default Oettln-tion: ;; '•:
:
р Location,
Devic« UR narajlnl .;ijev/lpa . . • • . • • •
•
•
.
•
4i;;ll«*iO
Copyl Bhl М&Ъ-УЯЪЪ, Еаь. SoUnsi e Prn J_cl5 A» R i y U R e 5 . r « a Trie Common IJHIA Pi inting System CUP5 6inTe logo иге Bib Imdelrieli. uui.ud. of -.a-., Jc •••.^ e_Pi .•.•.._. ; 4 OSlir 1г_авПЯГИ J»9 !•,_ prowrt, ol С я (ewecuve
Рис. 1 4 . 1 . Страница конфигурации CUPS
O,r',
14.2. Подключение принтера к автономному компьютеру с системой Linux
233
Если демон не работает, то команда выдаст следующее сообщение: lpstat: Unable t o connect to server: Connection refused
В этом случае запустите демона CUPS: # /etc/init.d/cupsys start В Red Hat и Fedora используются следующие команды: # /sbin/service cups restart
Проще всего новые принтеры устанавливаются при помощи веб-интерфейса CUPS. Введите следующий адрес в любом браузере: http://local host:631
Вам потребуется пароль root. Перейдите на вкладку Printers и щелкните на ссылке Add printer, открывающей меню Admin. Здесь следует ввести три значения: Name: hp6L Location: room-202 Description: bw-laser Тщательно выбирайте имя — его изменение вызовет проблемы в работе CUPS. Имя принтера будет использоваться на нескольких следующих страницах конфигурации. На рис. 14.1 показано, как должна выглядеть страница конфигурации CUPS.
Комментарий Если вы предпочитаете командную строку, конфигурацию принтера можно задать следующей длинной командой: # lpadmin -p hp6L -L room-202 -D bw-laser -E -v parallel:/dev/lpO \ -m HP-LaserJet_6-hpijs.ppd
Параметры: -р — имя принтера; -L — местонахождение принтера; -D — описание принтера; -Е — перевод принтера в режим готовности к приему заданий; -v — назначение URI; -го — выбор драйвера (файл PPD). Обратите внимание: каталог жестко фиксируется; при попытке использовать путь вида/usr/share/cups/model/laserjet.ppd будет выдано сообщение об ошибке. Используйте имя PPD и проследите за тем, чтобы файл находился в каталоге /usr/share/cups/model/. Если в системе установлены пакеты Gimp-Print и Foomatic (а если не установлены, их стоит установить), вы найдете дополнительные файлы PPD в каталогах /usr/share/cups/model/gimp-print и /usr/share/cups/model/foomatic. Они хранятся в сжатом виде: О о о О О О
HP - LaserJet_6-hpi js.ppd. gz
Содержимое файлов необходимо распаковать и переместить в каталог /usr/ share/cups/model: # gunzip HP-LaserJet_6-hpijs.pp.gz && mv HP-LaserJet_6-hpijs.ppd \ /usr/share/cups/model/
234
Глава 14. CUPS
При установке принтера через веб-интерфейс CUPS распаковывать и перемещать файлы PPD не обязательно.
См. также Раздел «Введение» настоящей главы; CUPS Software Administrators Manual (http:// localhost:631/docurnentation.html).
14.3. Обслуживание клиентов Linux Проблема Требуется организовать совместный доступ к принтеру, подключенному к компьютеру с системой Linux, с других Linux-клиентов локальной сети.
Решение Сначала убедитесь в том, что на всех компьютерах с подключенными принтерами установлена система CUPS. Эти компьютеры должны иметь статические IP-адреса, а в системе должен работать механизм разрешения имен (/etc/hosts или локальный сервер DNS). Затем на компьютерах с подключенными принтерами отредактируйте файл /etc/cupsd.conf. Следующий пример cupsd.conf показывает, как открыть доступ к принтерам из локальной подсети. Вы можете использовать пример в том виде, в котором он представлен, используя свои сетевые параметры: LogLevel info Port 631 <Location /> Order Deny,Allow Deny from Al1 Allow From 127.0.0.1 </Location>
Перезапустите cupsd после правки cupsd.conf: # /etc/init.d/cupsys restart
В Red Hat и Fedora следует использовать команду # /sbin/service cups restart
Напечатайте тестовую страницу. Если вы получите печально известную ошибку «Client-error-not-found», остановите и перезапустите принтер из веб-интерфейса CUPS. Принтеры CUPS автоматически рассылают информацию о себе по сети. Убедитесь в том, что порт TCP с номером 631 не заблокирован ни на сервере, ни на клиентских компьютерах. Откройте веб-интерфейс CUPS (http://Localhost:631) на любом клиентском компьютере с системой Linux; все принтеры CUPS должны автоматически отображаться на странице Printers. Теперь попробуйте напечатать тестовую страницу и выполнить печать из приложений.
f
14.4. Совместный доступ к принтеру без разрешения имен
235
Комментарий Если в системе имеется пример файла cupsd.conf, пусть его размеры вас не пугают. Скорее всего, большинство из его директив вам никогда не понадобятся; возьмите его за образец и создайте свой новый файл cupsd.conf «с нуля». Директивы cupsd.conf описаны в документе «CUPS Software Administrators Manual» (http://localhost:631/documentation.htrril).
См. также Раздел «Printing System Management» документа CUPS Software Administrators Manual (http://[ocalhost:631/documentation.html).
14.4. Совместный доступ к принтеру без разрешения имен П DOблема Вы не создали файл /hosts и не запустили локальный сервер DNS в своей сети, потому что особой необходимости в разрешении имен нет — компьютеры сети находятся за брандмауэром NAT для совместного использования подключения к Интернету и ничего большего им, в сущности, не требуется. Как организовать совместный доступ к принтеру в таких условиях?
Решение Назначьте серверу печати статический IP-адрес. Включите директиву ServerName вфайл/etc/cupsd.conf: ServerName 192.168.1.5 Перезапустите cupsd. В Debian используйте команду # /etc/init.d/cupsys restart В Red Hat и Fedora команда выглядит так: # /sbin/service cups restart На клиентских компьютерах ничего делать не нужно — просто подождите несколько секунд, пока CUPS разошлет информацию о принтере.
Комментарий По умолчанию CUPS использует имя хоста в качестве имени сервера. Если в сети не используется никакая разновидность разрешения имен, клиентские компьютеры не увидят принтеры CUPS. Проблема решается указанием IP-адреса в директиве ServerName. У такого решения есть побочный эффект: возможно, вам не удастся напечатать тестовую страницу с сервера. Вместо этого вы увидите окно, показанное на рис. 14.2. Тем не менее печать из приложений на сервере и на клиентских компьютерах будет производиться нормально.
236
Глава 14. CUPS
©Г
?4.
..-•lit •• Г. !•
К«ЩШ* •-. 6 '
! • ' • '• » "•"••• S-«ing« '.',*И1
Unknown
Рис. 14.2. Страница с сообщением об отсутствии CUPS
Если вам не нужно настраивать сетевую файловую систему (такую, как NFS или Samba) или использовать DNS, такого решения будет вполне достаточно, даже если другие администраторы будут смеяться над вами. Главное правило безопасности гласит: «Не запускай то, без чего можешь обойтись».
См. также CUPS Software Administrators Manual (http://localhost:631/documentation.html).
14.5. Обслуживание клиентов Windows без Samba Проблема Требуется подключать клиентов Windows к серверу печати Linux, но вам не хотелось бы настраивать Samba только для организации совместного доступа к принтерам.
Решение CUPS справится с этой задачей без Samba. Потребуется установочный компактдиск Windows или диск с драйверами принтера, а на клиентских компьютерах Windows должна быть установлена служба печати Интернета — аналог IPP (Internet Printing Protocol) в Linux. Пользователи Windows 95/98 могут загрузить по адресу http://www.microsoft.com/windows98/downloads/ файл с именем wpnpins.exe. В Windows ME программная поддержка службы печати Интернета находится в папке Add-on на установочном компакт-диске. В Windows 2000/XP откройте приложение Сетевые подключения, выполните команду Дополнительно •Дополнительные сетевые компоненты и выберите в категории Другие службы доступа к файлам и принтерам в сети строку Службы печати для Unix.
Запустите мастера установки принтера. Выберите Сетевой принтер и введите URI-адрес принтера, состоящий из IP-адреса или имени сервера, номера порта и суффикса /prir\ters/<uMM_npuHmepa>. Каталога /printers не существует; это всего лишь условное обозначение, используемое CUPS. При первом подключении к серверу CUPS система Windows устанавливает свои локальные драйверы принтера и печатает свою тестовую страницу (вместо тестовой страницы CUPS). Возможно, вам потребуется компакт-диск Windows или диск с драйверами.
14.7. Создание выделенного сервера печати CUPS
237
Комментарий Если в локальной сети работает механизм разрешения имен, вместо IP-адреса можно использовать имя сервера: http://windbag:631/printers/hp6L
См. также Раздел «Введение» настоящей главы.
14.6. Совместный доступ к принтерам в смешанной сети с использованием Samba Проблема В локальной сети принтеры установлены на компьютерах с системами Linux и Windows. Требуется обеспечить доступ к ним для клиентов обоих типов (Linux и Windows).
Решение Чтобы это стало возможным, вам потребуются Samba и CUPS. Обращайтесь к разделам 23.22 и 23.23. р The Official Samba-3 Howto and Reference Guide (http://samba.org).
14.7 Создание выделенного сервера печати CUPS Проблема Совместный доступ к принтерам, подключенным к компьютерам, работает нормально, но он создает лишнюю нагрузку на компьютеры. Кроме того, компьютер, к которому подключен принтер, должен постоянно работать. Требуется создать выделенный сервер печати для упрощения централизованного управления принтерами.
Решение Из простейшего PC с процессором Pentium и несколькими подключенными принтерами выйдет отличный сервер печати. Существует два способа подключения нескольких принтеров к одному компьютеру: О установка дополнительных карт LPT/PCI для подключения принтеров с параллельным портом; о установка концентраторов USB для подключения принтеров USB.
238
Глава 14. CUPS
Установите на сервере печати минимальную версию Linux с CUPS. Установите все пакеты и драйверы Foomatic и Gimp-Prin (они доступны как в виде RPM, так и в архивах Debian). После этого остается лишь установить принтеры и настроить CUPS. В первых четырех разделах этой главы описана процедура установки принтеров и организация совместного доступа к принтерам со стороны клиентов Windows и Linux.
Комментарий Выделенный сервер печати обладает рядом преимуществ: все принтеры находятся в одном месте, расходные материалы удобно хранить поблизости от него, а пользователи не зависят от того, что кто-то другой хочет воспользоваться их принтерами. А если на сервере печати используются Linux и CUPS, вам не придется устанавливать Samba для организации совместного доступа со стороны клиентов Windows.
См. также Раздел «Printing System Management» документа CUPS Software Administrators Manual (http://locaLhost:631/d°curnentation.html).
14.8. Распределенная печать с использованием классов Проблема Одна из групп пользователей выводит на печать большое количество материалов. Необходимо предоставить в ее распоряжение целую группу принтеров, но обойтись без хлопот с отдельными очередями печати.
Решение Воспользуйтесь классами — фактически они создают одну очередь печати, состоящую из нескольких принтеров. На странице Admin веб-интерфейса CUPS щелкните на ссылке Add Class и выберите из списка принтеры, входящие в класс. Теперь пользователи могут направлять задания печати в класс вместо конкретного принтера; задание будет обработано первым свободным принтером. В меню выполняются операции добавления и исключения принтеров и даже создания подклассов. Операции с классами также могут выполняться в командной строке. Создание класса с включением принтеров: # lpadmin -p printerl -p printer2 -p printer3 -с art-dept
Включение нового принтера в класс: # lpadmin -p printer4 -с art-dept
Удаление принтера из класса (ключ -г): # Ipadmin -p printer4 -r art-dept
14.9. Ограничение доступа к принтерам и классам
239
Удаление всего класса: # lpadmin -x art-dept
Комментарии Разумеется, не стоит объединять в один класс принтеры, расположенные далеко друг от друга, — эти принтеры должны находиться в одной комнате. Использование классов создает некоторые проблемы, потому что пользователь не знает, на каком именно принтере было выведено его задание. С другой стороны, если на принтере произойдет сбой и он станет недоступным, задание все равно будет успешно выведено без вмешательства пользователя. Кроме того, классы отлично подходят для печати в больших объемах, так как нагрузка автоматически перераспределяется на свободные принтеры.
См. также Раздел «Printing System Management» документа CUPS Software Administrators Manual (http://localhost:631/documentation.html).
14.9. Ограничение доступа к принтерам и классам Проблема Требуется запретить некоторым пользователям доступ к отдельным принтерам. Скажем, вы не хотите, чтобы пользователи печатали свои семейные фотографии на дорогом цветном лазерном принтере.
Решение Воспользуйтесь командой Lpadmin: # lpadmin -p hp6L -u allow:carl a,jenn,dancer Ограничения также могут устанавливаться для классов: # lpadmin -p art-dept -u alIow:carl a,jenn,dancer
Также возможно ограничение доступа со стороны отдельных пользователей: # lpadmin -p hp6L -u deny:daryl,larry,otherlarry
Комментарий Не пытайтесь редактировать файлы classes.conf и printers.conf напрямую; изменения будут потеряны. Используйте команду lpadmin.
См. также Раздел «Managing Printers» документа CUPS Software Administrators Manual (http://localhost:631/documentation.html).
240
Глава 14. CUPS
14.10. Диагностика Проблема Печать (и особенно сетевая печать) обычно считается самым сложным и беспокойным аспектом системного администрирования. Какие существуют средства диагностики и исправления ошибок?
Решение Начните с файла /var/log/cups/error_Log. По умолчанию в cupsd.conf выставлен уровень детализации LogLevel info, при котором в журнале фиксируются ошибки и обычные операции. Если параметр LogLevel info не обеспечивает достаточно подробной информации, воспользуйтесь более высокими уровнями debug и debug2. Многие проблемы с печатью решаются переходом на другой драйвер. Если тестовая страница не печатается, попробуйте напечатать другой документ. Конечно, ошибки с печатью тестовых страниц говорят о наличии каких-то неполадок, но если основной документ будет успешно напечатан, то без тестовой страницы как-нибудь можно обойтись. Что касается сетевой печати, убедитесь в правильности подключений. Проверьте связь утилитой ping как по IP-адресу, так и по имени хоста. Попробуйте вручную подключиться к общему каталогу Samba; попробуйте провести печать с компьютера, к которому подключен принтер. Проверьте файл PPD принтера на странице http://www.cups.org/testppd.php; возможно, он содержит синтаксические ошибки. Если вам не удается самостоятельно определить причину проблем, отправьте содержимое журнала и описание выполняемых действий на форум соответствующей тематики. Приведу список наиболее полезных форумов: О http://printing.kde.org — форум специализируется на печати в KDE, но при этом содержит подробную информацию по многим аспектам печати в CUPS; О http://gimp-print.sourceforge.net/p_Mailing_Lists.php3 — информация о драйверах Gimp-Print; О http://www.linuxprinting.org/forums.cgi — форумы, посвященные принтерам HP, Epson, Alps, а также моделям других производителей; О http://www.cups.org/newsgroups.php — конференции, посвященные CUPS. И как всегда, прежде чем отправлять запрос, проведите поиск в архивах. Нет ничего нового под солнцем.
См. также The Troubleshooting-CUPS-and-Asking-for-Help Howto (http://www.cups.org/cupshelp.html).
•
•
Глава 15
Настройка видео и X Window
15.1. Введение X Window System является основой графического интерфейса Windows. Все оконные менеджеры и графические среды — XFce, Enlightenment, KDE, Gnome и т. д. — работают на базе X. X Window System — воистину удивительная система. Вы можете работать в графической среде, одновременно открывать текстовые консоли и легко переключаться между ними. Функции X Window System не ограничиваются графическим выводом; система также является сетевым протоколом. Через нее даже можно подключаться к удаленным системам (см. главу 17). Хотя X Window System всегда считалась стандартом графики Linux, в последнее время растет число сторонников новой оконной системы X.org. Это ответвление проекта XFree86™, которое внезапно завоевало популярность, когда в XFree86 версии 4.4 были приняты лицензионные изменения, потенциально несовместимые с GPL. Fedora и Mandrake первыми перешли на X.org. Возможно, к моменту, когда вы будете читать эту книгу, все остальные последуют их примеру. А может быть, в этой области будет царить неразбериха, и появится еще одно различие между дистрибутивами на беду неосведомленным. Чтобы узнать номер версии XFree86 для вашей системы, введите команду $ XFree86 -version То же самое для X.org: $ X.org -version
Система X.org в настоящее время очень близка по функциональности к XFree86; различаются в основном имена и местонахождение конфигурационных файлов. Вероятно, со временем появятся и более существенные различия. С X Window System связано немало запутанных терминов и неудобных сокращений. Приведу несколько определений: О XFree86 Project, Inc. — организация, выпускающая XFree86, свободно распространяемую реализацию X Window System с открытыми текстами; О XFree86 4.x — текущая версия XFree86 для Linux;
242
О О О О
Глава 15. Настройка видео и X Window
X Window System — исходная оконная среда с сетевой поддержкой для Unix; XI1 — одиннадцатая версия X Window System; XI1 R6 — спецификация X Window System; X.Org Foundation — ответвление XFree86 Project. Чтобы не усложнять себе жизнь, будем просто называть ее «X».
Оборудование Любой видеоадаптер работает в Linux; даже самая экзотическая карта сможет работать в универсальном режиме VGA (640x480, 16 цветов). В большинстве основных дистрибутивов Linux имеются хорошие средства конфигурации видеосистемы, которые идентифицируют оборудование и автоматически находят драйверы. Крайне маловероятно, чтобы вам когда-либо пришлось редактировать X86Config (разве что для включения аппаратного ускорения или для настройки многоэкранного вывода). Многие видеоадаптеры комплектуются драйверами для Linux и обеспечивают хорошую скорость выполнения 20-операций. Таким образом, для повседневных задач (электронная почта, веб, электронные таблицы, набор текстов и т. д.) подойдет практически любой адаптер. С аппаратными ЗВ-ускорителями потребуется чуть больше усилий, но для компьютерных игр, систем автоматизированного проектирования или трехмерного моделирования аппаратное ускорение абсолютно необходимо. Современные видеокарты превосходят по мощности компьютеры недавнего прошлого: высокопроизводительная модель имеет 256 Мбайт памяти, 256-разрядную шину, графический процессор с частотой 256 МГц, а нередко и собственный охлаждающий вентилятор. Производительность видеокарты ограничивается типом слота, в который она вставляется. Карты PCI работают медленнее всего. Разъем AGP работает гораздо быстрее и присутствует на всех современных платах. Существует несколько разновидностей AGP: О AGP 1.0: • IX = 266 Мбайт/с; • 2Х = 533 Мбайт/с. О AGP2.0: • IX = 266 Мбайт/с; • 2Х = 533 Мбайт/с; • 4Х= 1,066 Гбайт/с. О AGP3.0: • • • •
IX = 266 Мбайт/с; 2Х = 533 Мбайт/с; 4Х= 1,066 Гбайт/с; 8Х = 2 Гбайт/с.
15.2. Одновременное использование X и консолей
243
Стандарты AGP обладают прямой и обратной совместимостью; новые карты можно устанавливать на старых материнских платах, и наоборот. Тем не менее установка новой, высокопроизводительной карты на старой плате означает, что вы не получите всего быстродействия, за которое заплатили.
Драйверы Для обеспечения аппаратного ускорения графики в Linux можно воспользоваться DRI (Direct Rendering Infrastructure) и видеокартой, поддерживаемой в Linux. В XFree 86 имеется встроенная поддержка DRI. В настоящее время поддержка XFree86/DRI имеется для следующих чипсетов: 3dfx, Gamma, Intel i8xO, Matrox, ATI Rage, ATI Radeon, Mach64 и Sis300. Обновленную информацию о поддерживаемых чипсетах можно найти на сайтах http://xfree.org и http:// dri.sourceforge.net. Другой способ основан на использовании драйверов, предоставленных производителем. Например, nVidia поставляет собственные драйверы и модули ядра, распространяемые только в двоичном виде; в настоящее время это единственный способ обеспечения аппаратного ускорения для адаптеров nVidia. Для работы в 2Б-режиме без ускорения можно воспользоваться драйвером nv с открытыми текстами. Некоторые карты ATI и Matrox полностью поддерживаются драйверами с открытыми текстами, в других случаях для полноценной работы карты требуются двоичные драйверы. Как обычно, информацию стоит поискать перед покупкой.
15.2. Одновременное использование X и консолей Проблема Требуется одновременно работать как с консольными сеансами, так и с сеансами X.
Решение Чтобы переключиться на сеанс X с одной из консолей, достаточно нажать Ctrl+Alt+Fn, где Fn — F1-F6. Переключение между консолями осуществляется клавишами Alt+Fn, а возврат в X — клавишами Alt+F7. Первый сеанс X всегда обозначается :0. Чтобы открыть второй сеанс X, введите следующую команду в консоли: $ startx •• :1
Проследите за тем, чтобы двойной дефис — был окружен пробелами. Только что созданный сеанс X связывается с клавишей F8. Не входите в два сеанса X под одним именем, это может привести к странным и весьма неприятным конфликтам. При запуске X из консоли выводятся всевозможные диагностические и служебные сообщения. KDE отличается особенной «разговорчивостью». Большинство сообщений не содержит полезной информации, но иногда сообщения могут пригодиться для диагностики.
244
Глава 15. Настройка видео и X Window
Комментарий Как правило, дистрибутивы Linux устанавливаются с семью виртуальными консолями. Загляните в файл /etc/inittab: l:2345:respawn:/sbin/getty 38400 ttyl 2:23:respawn:/sbin/getty 38400 tty 2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6
Сеанс X по умолчанию чаще всего связывается с консолью tty7. Исключение составляет система Knoppix, использующая только пять виртуальных терминалов. Что делать с таким количеством консолей? Проявите творческие способности. Войдите в систему под разными именами. Переключитесь на другую консоль, чтобы исправить допущенную ошибку. Наконец, просто наслаждайтесь сознанием гибкости и широты возможностей Linux.
Getty и tty Названия getty и tty, как и многие термины Linux, унаследованы от Unix. Getty означает «get tty», a «tty» — это телетайп. Таким образом, с точки зрения Linux ваш новый монитор с высоким разрешением и миллионами цветов, со встроенными звуковыми разъемами и портами FireWire является обычным телетайпом. Программа getty управляет входом в систему по последовательному подключению. Она открывает последовательное устройство (текстовый терминал, виртуальный терминал или модем) и ожидает подключения. Программа выводит приглашение, а затем, после ввода имени пользователя, передает управление программе Login. Существует много разновидностей getty: mgetty, mingetty, ugetty, agetty, gettyps, fbgetty и т. д. Mingetty — минимальная версия getty, рассчитанная только на виртуальные консоли и не работающая с модемами. Вероятно, лучшей модемной версией getty является mgetty. Как определить, какая версия getty используется в вашей системе? $ ps ах | grep getty 456 tty2 S 0:00 /sbin/getty 38400 tty2 457 tty3 S 0:00 /sbin/getty 38400 tty3 458 tty4 S 0:00 /sbin/getty 38400 tty4 459 tty5 S 0:00 /sbin/getty 38400 tty5 460 tty6 S 0:00 /sbin/getty 38400 tty6
Tty — это программа. Попробуйте запустить ее в консоли: $ tty /dev/tty3
Теперь в терминале X: $ tty /dev/pts/2
Tty сообщает, в каком виртуальном терминале вы находитесь («виртуальном», потому что старые терминалы не имели собственных вычислительных мощностей — они всего лишь предоставляли интерфейс к большим ЭВМ).
15.3. Установка нового видеоадаптера
245
Имена tty* обозначают виртуальные консоли: ttyl, tty2 и т. д. Хотя в большинстве систем Linux используется 7 виртуальных консолей, теоретически их количество может достигать 63. Сокращение pts означает «псевдотерминал». Речь идет о терминалах X вроде xterm, gnome-terminal, wterm, powershelln Konsole.
См. также tty(l), tty(4), pts(4), console(4), getty(8), mingetty(8), mgetty(8).
15.3. Установка нового видеоадаптера Проблема В системе устанавливается второй видеоадаптер (а может быть, заменяется старый видеоадаптер). Как настроить его и привести в рабочее состояние?
Решение Лучше всего воспользоваться графической программой настройки конфигурации, входящей в дистрибутив. В SuSE это SaX, в Red Наг — redhat-config-xf гее, в Fedora — system-соnfig-xfree, а в Mandrake — XFdrake. Второй способ заключается в ручном редактировании XF86Config и изменении только тех частей, которые относятся к новому адаптеру. Редактирование XF86Config рассматривается в следующем разделе.
Комментарий Возможно, вам также пригодятся следующие утилиты X: О XFree96 -configure; О /usr/XlIR6/bin/xf86config; О /usr/sbin/ddcprobe. Все они должны запускаться суперпользователем root. XFree86 -configure проверяет оборудование и автоматически генерирует новый файл XF86Config. Файл предусмотрительно сохраняется отдельно, без замены исходного файла XF86Config, чтобы его можно было сначала протестировать. Программа xf86config требует ввести информацию о мыши, клавиатуре, видеоадаптере и мониторе. Она задает столько вопросов, что в конце концов вы начинаете выходить из себя. Программа/usr/sbin/ddcprobe собирает необходимую информацию о видеокарте. Программа также может опросить монитор, но, скорее всего, делать это не будет, так что держите под рукой документацию по монитору. Если новая конфигурация не работает, проверьте файл /var/Log/Xfree86.0.log и посмотрите, с чем возникли проблемы. Если вам не удается выйти из «зависшего» сеанса X, нажмите клавиши Ctrl+Alt+Backspace.
246
Глава 15. Настройка видео и X Window
См. также Документация XFree86
(http://www.xfree86.org/resources.htmL).
15.4. Редактирование файла XF86Config Проблема В системе был установлен новый видеоадаптер, и вы предпочитаете внести изменения в конфигурацию вручную. Возможно, утилита из вашего дистрибутива не делает того, что нужно, или вы просто предпочитаете отредактировать текстовый файл.
Решение Конфигурация X хранится в файле XF86Config, который может находиться в разных местах: О /etc/Xll/XF86Config-4; О /etc/XF86Config; О
/usr/XllR6/etc/Xll/XF86Config-4;
О
/usr/XllR6/etc/Xll/XF86Config. Установка нового драйвера сводится к изменению в одной секции. В следующем примере адаптер Voodoo 3 заменяется картой nVidia. Просто измените параметры Driver и Identifier (закомментируйте старые строки и введите новые значения): Section "Device"
# Identifier "3dfx" # Driver "tdfx" Identifier "nVidia" Driver "nv" EndSection Значение параметра Identifier задается произвольно, а параметр Driver должен содержать фактическое имя драйвера. Список имен находится по адресу http:// www.xfree86.org/resources.html.
Комментарий Если вы предпочитаете драйверы от производителя оборудования, загрузите их и выполните инструкции по установке.
См. также Документация XFree86
(http://www.xfree86.org/resources.html).
15.5. Включение аппаратного ускорения в XFree86/DRI
247
15.5. Включение аппаратного ускорения в XFree86/DRI Проблема Вы хотите поиграть в Tux Racer, TuxKart ИЛИ Quake 3, заняться трехмерным моделированием или другой работой, требующей интенсивного обсчета трехмерных объектов. Видеокарта обладает соответствующими функциями, вы установили драйверы, но включить аппаратное ускорение все равно не удается. гсШсНИс Для правильной работы аппаратного ускорения трехмерной графики необходим поддерживаемый видеоадаптер и изменения в файле XF86Config, обеспечивающие загрузку модулей ядра. Сначала проверьте, работает ли расширение DRI: $ glxinfo | grep rendering Xlib: extension "XFree86-DRI" missing on display ".0.0" direct rendering: no Если расширение на работает, включите в XF86Config следующие строки: Section "Module" Load "dri" Load "glx" •
EndSection Section "dri" Mode 0666 EndSection
Сохраните изменения и перезапустите X. Проверьте новую конфигурацию, запустив glxgears, Tux Racer, TuxKart или любую другую игру, требующую аппаратного ускорения. Как правило, редактирование XF86Config решает проблему. Если этого не произошло, воспользуйтесь рекомендациями по диагностике, приведенными в следующем разделе.
Комментарий Помните, что местонахождение файла XF86Config зависит от дистрибутива. Начиная с версии 4.0, XFree86 включает встроенную поддержку DRI и библиотек Mesa, поэтому устанавливать дополнительные пакеты не придется. Проверка версии осуществляется командой $ XFree86 -version
Если окажется, что в вашей системе используется XFree86 3.x, проведите обновление. Не стоит пытаться включать DRI и Mesa в версии 3.
248
Глава 15. Настройка видео и X Window
См. также XF86Config(7); The DRI User Guide (http://xfree.org/); страница Resources на сайте http://xfree.org/. . ;
15.6. Диагностика проблем с ускорением трехмерной графики Проблема Вы сделали все, о чем говорилось в разделе 15.5, но аппаратное ускорение так и не заработало.
Решение Начните с начала и убедитесь в том, что в системе выполняются все необходимые условия. Поддерживается ли ваша видеокарта? В разделе «Введение» настоящей главы перечислены поддерживаемые модели. На сайтах http://xfree.org/ и http:// dri.sourceforge.net можно найти обновленную информацию. Загружаются ли модули драйверов? Проверьте командой Ismod: $ Ismod
Module tdfx
Size Used by Not tainted 30432 17
agpgart
37312
0 (unused)
Tdfx — драйвер 3dfx Voodoo3, программа agpgart необходима для работы подсистемы AGP. Если модуль драйвера или agpgart отсутствует в результатах Ismod, загляните в каталог/Lib/modules и проверьте, существуют ли эти модули: /1ib/modules/2.4.21/kernel/drivers/char/agp/agpgart.0 /Iib/modules/2.4.21/kernel/drivers/char7drm/tdfx.0
Если какая-либо из этих программ отсутствует, вам придется собрать и загрузить ее (см. раздел 10.7). После этого перезапустите X. Работает ли подсистема dri? Если каталог/proc/dri/O существует, значит, работает: $ Is /proc/dri/O bufs clients mem name queues
vm vma
Если подсистема DRI не работает, возможно, ее поддержка не была включена в ядре. Проверьте файл конфигурации ядра и найдите в нем фрагмент # Конфигурация оборудования CONFIG_DRM=y # Драйверы DRM 4 . 1 CONFIG_DRM_TDFX=m
Если параметр CONFIG_DRM=y отсутствует, ядро придется построить заново. Если модуль DRM для вашей видеокарты отсутствует, постройте и загрузите его без повторной сборки ядра.
15.7. Настройка startx
249
В отличие от других модулей ядра, все эти модули загружаются сервером X. Убедитесь в том, что они указаны в секции Modules файла XF86Config. Не забывайте о файле/var/log/XFree86.0.Log. Поищите сообщения об ошибках и убедитесь в том, что все модули, перечисленные в секции Modules файла XF86Config, загружены в память. Если все попытки оказываются тщетными, обратитесь к страницам «Getting Help, Resources, and Community Lists» на сайте http://xfree.org.
Комментарий Если вы используете драйверы, предоставленные производителем видеоадаптера, обратитесь к нему за поддержкой. Проверьте документацию, убедитесь в том, что вы используете правильный драйвер, и поищите информацию на веб-сайте производителя.
См. также The DRI User Guide (http://xfree.org/); страница Resources на сайте http://xfree.org/.
15.7. Настройка startx Проблема Вы предпочитаете загружать систему в консольном режиме и вводить команду startx, когда потребуется начать сеанс X. Но для этого нужно выяснить, как настроить startx на запуск графической среды или оконного менеджера по вашему выбору.
Решение Отредактируйте файл .xinintrc в домашнем каталоге. Следующая директива запускает Gnome: exec gnome-session В файл можно включить список всех оконных менеджеров: exec gnome-session #ехес startkde #ехес icewm #ехес #exec #exec #exec
icewm-experimental afterstep enlightenment biackbox
Такой список позволяет легко сменить оконный менеджер по умолчанию, сняв комментарий с другой строки.
Комментарий Gnome, KDE и XFce должны запускаться своими стартовыми сценариями (gnomesession, startkde и startxfce), а не исполняемыми файлами.
250
Глава 15. Настройка видео и X Window
Если файл -/.xinitrc отсутствует, startx ищет глобальный файл .xinitrc, находящийся где-то в /etc (возможно, /etc/Xll/ximt/.xinitrc). Местонахождение файлов X Window зависит от дистрибутива Linux.
См. также startx(lx).
15.8. Смена экранного менеджера Проблема Вам не нравится экранный менеджер и вы хотите заменить его другим. Возможно, ваш дистрибутив установил программу xdm, обладающую минимальными возможностями, а вам хотелось бы опробовать экранный менеджер с расширенными функциями — такой, как gdm или kdm. А может, у вас возникли проблемы (скажем, «зависание» при выходе из системы) и вы надеетесь, что смена управляющей программы поможет решить их.
Решение Три основных экранных менеджера — xdm (X Display Manager), gdm (Gnome Display Manager) и kdm (KDE Display Manager). Чтобы узнать, какой из них используется в вашей системе, воспользуйтесь командой ps: $ ps ax | grep dm 3796 ? S 0.00 /usr/bin/kdm -nodaemon В большинстве дистрибутивов присутствует файл /etc/Xll/default-display-manager, содержащий единственную строку: /usr/bin/kdm Введите имя другой программы с указанием полного пути: /usr/bin/gdm или /usr/bin/xdm В Red Hat и Fedora это делается несколько иначе. Отредактируйте /etc/sysconfig/desktop и включите следующую строку: DISPLAYMANAGER="GNOME"
("KDE" или "XDM"). He пытайтесь указывать путь к исполняемому файлу, это не сработает.
Комментарий Xdm может рассматриваться как графическая замена для команды login. Для работы этой программы достаточно только X Window System (тогда как для gdm и kdm требуются Gnome и KDE соответственно).
15.9. Одновременный запуск разных оконных менеджеров
251
Gdm и kdm делают то же самое, что xdm, а также позволяют выключить или перезапустить систему, выбрать другой оконный менеджер, настроить экран входа и снабдить его своим рисунком или логотипом. В Red Hat и Fedora для запуска экранного менеджера используется сценарий /etc/Xll/prefdm, вызываемый из /etc/inittab. Сценарий /etc/Xll/prefdm читает имя экранного менеджера по умолчанию из файла /etc/sysconfig/desktop.
См. также Глава 7; The xdm and XTerminal mini-howto (http://www.tLdp.org/HOWTO/XDM/xterm); домашняя страница gdm (http://freshmeat.net/projects/gdm); описание kdm (http:// docs.kde.org/en/3.2/kdebase/kdm).
15.9. Одновременный запуск разных оконных менеджеров Проблема В вашей системе установлены замечательные оконные менеджеры и графические среды — KDE, Gnome, Enlightenment, Fluxbox, XFce и т. д. Вам хотелось бы запускать их одновременно. Конечно, можно запустить отдельные сеансы X или выйти из X и запустить другой оконный менеджер, но нельзя ли запустить их одновременно?
Решение Xnest позволяет запускать дополнительные сеансы X из текущих сеансов. Откройте командный процессор в любом сеансе X (допустим, вы работаете в IceWM) и запустите Xnest: $ Xnest -ас :1 Вы увидите пустой экран с курсором X. Запустите оконный менеджер (предположим, WindowMaker): $ wmaker -display :1 Теперь в командном процессоре IceWM введите $ Xnest -ас : 2
Некоторые оконные менеджеры или графические среды (скажем, Gn ne) должны запускаться из xterm в окне Xnest. Сначала запустите xterm: $ xterm -display :2 Затем запустите Gnome из xterm: $ gnome-session Из любого доступного терминала в любом из окон можно запустить новый сеанс Xnest: $ Xnest -ас :3
252
Глава 15. Настройка видео и X Window
Пример одновременного запуска Gnome с IceWM и KDE показан на рис. 15.1.
Рис.
15.1. Gnome
Комментарий Нумерация сеансов X начинается с 0, поэтому сеанс X по умолчанию всегда обозначается :0. Параметр -ас в командной строке Xnest определяет номер сеанса для нового экрана. Он также блокирует контроль доступа, в противном случае X не позволит открывать приложения. Xnest использует те же параметры, что и команда X — см. xserver(lx). Когда в системе одновременно работают несколько оконных менеджеров, то при попытке запуска очередного менеджера может появиться сообщение об ошибке: $ gnome-session gnome-session: you're already running a session manager Ничего страшного — найдите его и «убейте»: $ echo $SESSION_MANAGER local/windbag:/tmp/.ICE-unix/2774 $ rm /tmp/.ICE-unix/2774
Теперь Gnome запустится нормально.
См. также Xnest(l), xserver(l); оконные менеджеры для X (http://www.pLig.org/xwinman).
Глава 16
Архивация и восстановление
16.1. Введение Архивация принадлежит к числу основных операций администрирования. На практике эта работа часто оказывается утомительной и неудобной. В настоящей главе будет рассказано, как организовать надежную и простую архивацию (и что не менее важно, простое восстановление) с применением rsync и Mondo Rescue. Программа rsync отличается исключительно высокой эффективностью. Она передает информацию только об изменениях в файлах и может выполнять сжатие «на ходу». Ее сильной стороной является синхронизация файловых деревьев. Благодаря этим особенностям rsync отлично подходит для обновления и создания зеркальных копий веб-сайтов, деревьев CVS и других больших, сложных деревьев. Существует два варианта использования rsync: с применением ssh для аутентификации входа и с запуском в виде демона для создания общедоступных архивов. При использовании ssh пользователь должен иметь учетную запись на каждом компьютере, с которым он собирается работать через rsync. Mondo Rescue — отличная утилита для создания загружаемых дисков восстановления системы. Она позволяет создать «моментальный снимок» текущей конфигурации системы и воссоздать ее простой загрузкой с компакт-диска или DVD. При этом будут автоматически воссозданы все заплатки и обновления, а также вся конфигурация. Восстановите данные с сервера rsync, и система за рекордно короткое время будет возвращена в рабочее состояние. Mondo также может применяться для полной архивации системы. В течение долгого времени в области архивации господствовали стримеры, потому что они обеспечивали максимум емкости при минимуме затрат. Но запись на ленту выполняется слишком медленно, а восстановление — и того медленнее. Конечно, при повременной оплате это не так уж плохо, но у лент есть и другие недостатки: О емкость современных жестких дисков существенно превышает емкость ленты, поэтому вам либо придется использовать дорогостоящий автоматический загрузчик, либо возиться со сменой лент; О в области восстановления файлов пользователь зависит от системного администратора;
254
Глава 16. Архивация и восстановление
О восстановление «на пустом месте» происходит достаточно сложно: сначала необходимо установить файловую систему, затем драйверы стримеров и только потом можно переходить к восстановлению; О даже если одной ленты хватает для хранения полной резервной копии, ленты все равно нужно менять и где-то хранить. У лент есть одно явное преимущество: долговечность. Компакт-диски, DVD и жесткие диски не подходят для долгосрочного хранения архивов. По моей оценке, записанные в домашних условиях диски CD/DVD обычно выдерживают не более двух лет. Лента при аккуратном хранении выдержит лет 20. Долговечность является главным недостатком всех цифровых носителей. Даже если сохранится сам носитель (лента, DVD и т. д.), нет гарантии, что останутся средства для ее чтения. Оборудование постоянно изменяется, как и файловые форматы. Сможете ли вы прочитать дискету 5,25"? Файлы WordStar? VisiCalc? Даже самый старый файл в формате ASCII легко читается, но что делать с закрытыми двоичными форматами типа .ppt или .pst? Если фирма-производитель прекратит их поддержку или перестанет существовать, вам не повезло. Таким образом, лучшее, на что мы можем рассчитывать, — это краткосрочная архивация и восстановление, и rsync с Mondo Rescue отлично подходят для этой цели. Программа rsync быстра, компактна и полностью автоматизирована; вам не придется помнить о необходимости менять диски или ленты, а восстановление проходит легко и быстро. Вы даже можете создать архивы, доступные для пользователей, чтобы они не приставали к вам с просьбой восстановить тот или иной файл. Как насчет архивации самого сервера архивации? Никаких проблем. Создание удаленного зеркала rsync для архивации архивов считается одним из стандартных приемов. В настоящее время выбор съемных носителей широк как никогда: съемные жесткие диски IDE, переносные диски с интерфейсом USB/FireWire и флэш-диски. Короче говоря, в вашем распоряжении имеется масса превосходных вариантов для планирования схем архивации и восстановления.
16.2. Применение rsync для локальной пересылки и синхронизации файлов Проблема Требуется организовать синхронизацию файловых деревьев на рабочей станции. Ваша рабочая станция используется для создания веб-каталогов, графических галерей и других сложных файловых структур. В рабочем каталоге файлы редактируются, а затем копируются в другой каталог для загрузки. Вы хотите использовать какое-нибудь более быстрое и интеллектуальное средство, чем команда ср, которая работает слишком медленно и не следит за тем, какие файлы нужно копировать, а какие - нет.
16.2. Применение rsync для локальной пересылки и синхронизации файлов
255
Решение Организуйте синхронизацию файлов при помощи программы rsync. Для ускорения программа копирует только изменившиеся файлы и отслеживает изменения внутри файлов и деревьев. Обязательно установите последнюю версию rsync со всеми исправлениями и заплатками безопасности. Вам нужна версия 2.6 и выше: $ rsync --version
rsync version 2.6.6 protocol version 26 Следующая команда копирует каталог веб-файлов в каталог, содержимое которого позднее будет переслано на веб-сервер: $ rsync -av --stats /home/pearlbear/webs building f i l e list...done
~/web_up1oad
Number of f i l e s : 254 Number of files transferred: 235 Total f i l e size: 8923014 bytes Total transferred f i l e size: 8923014 bytes Literal data: 8923014 bytes Matched data: 0 bytes File l i s t size: 6490 Total bytes written 8939848 Total bytes read: 3780
Результат копирования проверяется командой $ Is ~/web_upload webs
ВНИМАНИЕ Здесь есть небольшая тонкость: /home/pearlbear/images копирует содержимое /images и сам каталог. Если добавить завершающую косую черту (/home/pearlbear/images/), будет скопировано только содержимое каталога /images, но не сам каталог. Завершающая косая черта важна только в исходном каталоге, а в приемном каталоге она игнорируется.
Если в каталоге /home/pearLbear/webs появятся новые файлы или в какие-то из существующих файлов будут внесены изменения, просто выполните ту же команду заново. Rsync синхронизирует только изменения. Для копирования можно выбрать несколько исходных каталогов: $ rsync -av --stats /home/pearlbear/webs /home/pearlbear/web_images ~/web_upload
Комментарий Если из исходного каталога были удалены какие-либо файлы, rsync не будет автоматически удалять их из синхронизированного каталога. Чтобы файлы были удалены, включите в командную строку ключ --delete: $ rsync -av --delete /home/pearlbear/webs ~/web_upload
Ключи -av означают соответственно архивацию (Archive) с сохранением файловых разрешений и владельцев я расширенный вывод (Verbose).
256
Глава 16. Архивация и восстановление
Будьте внимательны с ключом --delete. Если из архива rsync будет случайно удален нужный файл, восстановить его уже не удастся. Также следите за правильностью путей, потому что в случае ошибки ключ —delete спокойно удалит целый каталог или файловое дерево. Программа rsync отлично подходит для синхронизации локальных архивов. Если вы занимаетесь веб-дизайном, работаете над программным проектом, собираете файлы для записи на компакт-диск или выполняете операции с любой крупной коллекцией файлов, доверьте rsync отслеживание и синхронизацию всех изменений — это сэкономит вам немало времени.
См. также Ksync(l).
16.3. Безопасная пересылка данных с применением ssh Проблема Требуется использовать rsync для копирования файлов на другой компьютер по локальной сети или Интернету, с защитой пересылаемых данных посредством шифрования и аутентификации.
Решение Используйте rsync на базе ssh. Для этого на всех хостах должна работать программа ssh. Укажите исходный и приемный каталог и включите в командную строку параметр -е ssh. Следующая команда пересылает файлы по локальной сети в учетную запись Ijl на удаленном компьютере с именем stinkpad: ljl@compak:~$ rsync -av -e ssh stationery stinkpad:test 1jl@stinkpad's password: building f i l e l i s t . . . done stationery/ stationery/1jl-return-address-small.sxw stationery/1jl-holiday-label.sxw s t a t i onery/1jl- return•address•MV•smal1.sxw wrote 25984 bytes read 68 bytes 7443.43 bytes/sec total size is 25666 speedup is 0.99
Будьте внимательны с путями. Параметр stinkpad:test загружает каталог stationery и все его содержимое в каталог/home/ljl/test на хосте stinkpad. Если каталог /test не существует, rsync создаст его: 1 jl@stink.pad's password: building f i l e l i s t . . . done created directory test
Чтобы загрузить данные в каталог, находящийся за пределами вашего домашнего каталога, потребуются разрешения, достаточные для создания нового ката-
16.4. Настройка сервера архивации rsync
257
лога программой rsync (или это должен быть существующий каталог, в который вам разрешена запись). Чтобы каталог задавался по отношению к корневой файловой системе, а не к домашнему каталогу, поставьте перед ним символ /: $ rsync -av -e ssh stationery stinkpad:/shared_uploads
Чтобы загрузка файлов производилась по Интернету, укажите свое имя пользователя в удаленной системе и полное доменное имя: $ rsync -av -e ssh stationery ljl@stinkpad.test.net:/shared_uploads
Синтаксис копирования файлов с удаленного хоста выглядит несколько иначе. Следующая команда копирует каталог/scripts и его содержимое с удаленного хоста в локальный каталог/downloads: $ rsync -av -e ssh 1jTOstinkpad.test.net:/shared_uploads/scripts -/downloads/
Комментарий И аутентификация, и пересылка шифруются, поэтому механизм rsync хорошо подходит для пересылки конфиденциальной информации. Единственное неудобство заключается в том, что пользователи должны иметь учетные записи на всех компьютерах, на которых они будут сохранять или загружать файлы, что создает дополнительные хлопоты с настройкой. Центральный сервер с общими каталогами хорошо подходит для управления сложными сценариями совместного доступа к файлам. Для управления доступом используется стандартный инструментарий Linux — разрешения файлов и каталогов, группы.
См. также rsync(l).
16.4. Настройка сервера архивации rsync Проблема Вы хотите, чтобы пользователи могли архивировать свои данные. Тем не менее раздавать пользователям учетные записи только для этой цели было бы нелогично. Вам хотелось бы упростить совместный доступ к файлам, но также без предоставления лишних учетных записей.
Решение Создайте централизованный сервер, на котором rsync будет работать в режиме демона. Пользователям не понадобятся учетные записи для входа на этот сервер, а безопасность будет обеспечиваться собственными средствами rsync. Программа rsync должна быть установлена на всех компьютерах. Сначала на сервере rsync отредактируйте или создайте файл /etc/rsyncd.conf, чтобы создать модуль rsync с определением архива: # Глобальные параметры log f i l e = /var/log/rsyncd.log
258
Глава 16. Архивация и восстановление
# Модули [backup_dirl] path = /backups comment = serverl archive l i s t = yes read only = no
Проверьте, что каталог /backups существует. Затем запустите rsync на сервере в режиме демона: # rsync --daemon
Теперь вы можете копировать файлы с удаленного компьютера на сервер. В следующем примере удаленный PC будет называться «workstation», а сервер rsync — «serverl». Начните с проверки доступности сервера rsync: sue@workstation:~$ rsync serverl:: backupdirl
serverl archive
Следующая команда копирует каталог/spreadsheets в модуль backup_dirl: sue@workstation:~$ rsync -av spreadsheets serverl::backup_dirl building f i l e l i s t . . . done
spreadsheets/aug_03 spreadsheets/sept_03 spreadsheets/oct_03 wrote 126399 bytes read 104 bytes 1522.0 bytes/sec total size is 130228 speedup is 0.94 Просмотрите загруженные файлы: sue@workstation:~$ rsync serverl::backup_dirl drwx 192 2003/02/12 spreadsheets •rw-r--w-- 21560 2003/09/17 aug_03 -rw-r--w-- 21560 2003/10/14 sept_03 •rw-r--w-- 21560 2003/11/10 oct_03
Комментарий Представленная конфигурация абсолютно работоспособна, но не слишком хорошо защищена. Модуль backup_dirl доступен для всех пользователей rsync. Файлы передаются в незащищенном виде, поэтому такой способ не следует использовать для пересылки конфиденциальных данных. В rsync имеются встроенные средства аутентификации и контроля доступа, позволяющие реализовать несложную схему защиты. О том, как это сделать, рассказано в разделе 16.5.
См. также rsync(l), rsyncd.conf(5); домашняя страница rsync (http://rsync.samba.org).
16.5. Защита модулей rsync Проблема Вы последовали рекомендациям из раздела 16.4. В самом деле, было бы удобно предоставить пользователям возможность самостоятельной загрузки своих файлов
16.5. Защита модулей rsync
259
с сервера архивации или поручить обновление веб- и FTP-серверов кому-то еще. Но доступ к файлам открыт для всех пользователей rsync — как организовать защиту модулей?
Решение Rsync содержит простые средства аутентификации и контроля доступа. Чтобы активизировать их, следует создать новый файл с парами «имя/пароль» и включить директивы «auth users» и «secrets file» в/etc/rsyncd.conf. Сначала создайте на сервере rsync файл паролей и присвойте ему разрешения chmod 600: # Пользователи rsync для serverl # Файл создан 2/7/2004 sue:sekkrit
Теперь отредактируйте /etc/rsyncd.comf. Выделите пользователю Sue собственный модуль и заблокируйте доступ к нему всем, кроме Sue: # Глобальные параметры log f i l e = /var/log/rsyncd.log
H archive l i s t = yes read only = no auth users = sue secrets f i l e « /etc/rsync/rsync-users
Чтобы обратиться к модулю, пользователь должен указать перед именем сервера свое имя rsync: sue@workstation:~$ rsync sue@serverl::sue_backup Password: drwx 192 2003/02/12 spreadsheets -rw-r--r-- 21560 2003/09/17 aug_03 •rw-r--r-- 21560 2003/10/14 sept_03 -rw-r--r-- 21560 2003/11/10 oct_03 Теперь пользователь сможет архивировать и восстанавливать файлы так же, как раньше — при условии, что он помнит свое имя rsync. He забудьте двойное двоеточие (::), используемое при подключении к серверу rsync.
Комментарий Пары «имя/пароль» назначаются произвольно и не имеют отношения к системной учетной записи. Это позволяет легко и быстро создавать и изменять модули, а также добавлять и исключать пользователей. Для повышения уровня безопасности добавьте следующие директивы в rsyncd.conf: О strict modes = yes — файл паролей не будет проверяться rsync, если он доступен для чтения кому-либо, кроме демона rsync, и пользователь не получит доступа. По умолчанию используется режим yes, поэтому включать эту строку не обязательно (разве что как напоминание). Если вы не хотите использовать жесткую проверку, включите директиву strict modes = false;
262
Глава 16. Архивация и восстановление
См. также Глава 7.
16.8. Настройка выбора файлов Проблема Некоторые файлы (например, .tmp и .bak) нужно исключить из архивации. А возможно, вы, наоборот, хотите задать список включаемых файлов.
Решение Поместите списки в файлы и укажите их в параметрах rsync —exclude-from и — include-from. Файлы могут содержать перечни включаемых/исключаемых файлов, регулярные выражения или их комбинацию:
/etc/local Затем включите параметры -exclude-from и -indude-from в командную строку rsync: $ rsync -ae ssh /home /etc --exclude-from=~/exclude-list backup.test.net:/home-etc
Комментарий Лучше ограничиться либо включением, либо исключением файлов. Присутствие обоих параметров создает путаницу.
См. также Rsync(l).
16.9. Автоматизация архивации rsync на базе ssh Проблема Требуется автоматизировать процесс архивации rsync на базе ssh.
Решение Напишите сценарий, создайте задание сгоп и настройте keychain для аутентификации на удаленных хостах (использование keychain рассматривается в разделе 17.7). Далее приводится простой сценарий для архивации/home и / e t c пользовате-
16.10. Ограничение загрузки канала при использовании rsync
263
лем backupadmin, созданным специально для этой цели. Вторая строка сценария приказывает сгоп использовать keychain для удаленной аутентификации: #!/bin/bash source /home/backupadmin/.keychain/$HOSTNAME -sh rsync -av -e ssh --delete --force /home /etc stinkpad:home-etc-backup
После того как вы настроите выбор файлов и протестируете сценарий, создайте задание сгоп для запуска сценария. В следующем примере задание стартует каждый вечер в 22:00: # crontab -e О 22 * * * /usr/local/bin/rsyncbackup.sh
Комментарий В документации часто предлагается создавать ключи с пустыми паролями, чтобы пересылку ssh можно было планировать в сгоп. Это делать опасно, потому что каждый, кто получит доступ к вашему приватному ключу, сможет воспользоваться им в своих целях. Keychain выполняет аутентификацию за вас, чтобы вы могли защитить свои приватные ключи паролем. У keychain есть только один недостаток: программа не переживает перезагрузку, поэтому пароль (или пароли) приходится вводить заново при запуске системы. Но в конце концов, это повышает уровень безопасности — ведь вы же не хотите, чтобы после перезагрузки компьютера любой желающий получил беспрепятственный доступ к вашим удаленным хостам.
См. также Ssh(l), rsync(l); раздел 16.8; раздел 17.7; страница Examples на сайте http://samba. anu.edu.au/rsync.
16.10. Ограничение загрузки канала при использовании rsync Проблема Rsync может в мгновение ока парализовать работу канала связи; только представьте, как архивация нескольких гигабайт аудиофайлов отразится на работе загруженной сети. Нельзя ли ограничить загрузку канала без полноценного отслеживания трафика?
Решение Используйте параметр -bwlimit: $ rsync -a --bwlimit=256 rsync.test.net::testnetftp/ /frp/mirror
Комментарий Значение —bwLimit задается в килобайтах в секунду; учтите этот факт при вычислении используемого значения. Помните, что в большинстве сетей скорость передачи данных измеряется в килобитах в секунду.
266
Глава 16. Архивация и восстановление
Комментарий Никто не заставляет вас ограничиваться скучными текстовыми сообщениями. На рис. 16.1 показан пример псевдографического сообщения. <• Sinn В11 V »
',l-m
Fjrurtnri
t
carla@windbag:~$ csync windbag::
I \ l\ I I _\l I I I/ I/ / 1_/1_Л
/ _ \l _ '_ \/ _ \
/ / / _ / /_/ I I I I ,' I !J\ A /_/ IJ IJ\
// //
V
_/ /
I _/ _ \
I IJ 1 I ,' \ /\ ~ /
< I i / / /
I hope you enjoy your visit. If you encounter any difficulties, please contact t5yncadmin@test.net
0-0
/ e\
(i
I)
• \
/
•
My Home Atea home shared directoL-y die caula@windbag:^5
!
I
, Рис. 16.1. «Сообщение дня» в формате ASCII-арта
Для создания таких сообщений можно воспользоваться ASCII-генератором FIGlets (http://www.figlet.org).
См. также rsync(l), rsyncd.conf(5).
16.14. Создание загрузочного компакт-диска в Mondo Rescue Проблема Требуется простое средство для создания образа системы. Вам нужен идеальный дубликат с сохранением конфигурации, всех заплаток и обновлений, чтобы систему можно было легко восстановить «с нуля», перенести на другой жесткий диск или создать несколько идентичных установок. Пользовательские данные ежедневно архивируются, поэтому достаточно сохранить системные и конфигурационные файлы.
16.14. Создание загрузочного компакт-диска в Mondo Rescue
267
Решение Воспользуйтесь Mondo Rescue для создания пользовательского загрузочного компакт-диска. Проследите за тем, чтобы на жестком диске было достаточно места для хранения временного образа (700 Мбайт на каждый диск). Не запускайте другие программы (игры, почтовые клиенты, редакторы и т. д.) во время работы Mondo. Введите с правами root команду mondoarchive в командной строке. Mondo подумает минуту-другую, а затем откроет окно, показанное на рис. 16.2.
1
HBBMS
1 |Ё|Ш:: [
!Ф**~ к1
-г. 1
НЩЩ|
•I '
• 1 •Ешваш! 1 Ш ЗП'^Е
, ** f
Рис. 16.2. Mondo
Выберите носитель информации. В нашем примере будет использоваться дисковод CD-RW по адресу SCSI 0,1,0. В следующем окне программа спросит, поддерживает ли ваш дисковод технологию «Burn-Proof» (yes). Затем выберите уровень сжатия (Maximum), укажите скорость записи (4) и SCSI-адрес дисковода (0,1,0). Затем программа спрашивает, какие файлы нужно архивировать. Выберите / или всю корневую файловую систему, потому что в следующем вопросе вам будет предложено выбрать исключаемые файлы. Файлы /tmp и /ргос исключаются автоматически. Также исключите /home и другие каталоги данных (общие каталоги, почтовые накопители и журналы). Далее Mondo спрашивает, нужно ли проверить архивы после их создания (yes), и уверены ли вы в том, что в вашей системе используется нормальное, стандартное ядро Linux (при использовании старого ядра Debian отвечайте по — дополнительная информация приведена в подразделе «Комментарий»). Наконец, программа попросит ввести имя устройства. Если в системе используется ядро 2.4, введите имя SCSI (/dev/scdn). Для ядра 2.6 используйте имя /dev/ hdw. Архивация может занять пару часов. Впрочем, отходить от компьютера не стоит, потому что в конце потребуется ваше участие.
268
Глава 16. Архивация и восстановление
Комментарий Если вы запустили Mondo из консоли и экран погас от отсутствия активности пользователя, нажмите клавишу Alt. Для получения адреса SCSI вашего дисковода используется команда cdrecord -scanbus. В системах с ядром 2.4 его можно найти в /etc/fstab или в выходных данных dmesg. «Нормальным» считается ядро, включающее следующие компоненты: О поддержка loopfs; О поддержка CD-ROM; О поддержка ISO9660; О поддержка initrd ramdisk (встроенная); О поддержка файловых систем в виртуальной памяти (встроенная); О поддержка флоппи-дисководов (встроенная); О поддержка файловой системы Ext2 (встроенная); О поддержка носителя, на который записывается архив; О эмуляция SCSI в ядре 2.4. Большинство стандартных ядер новее версии 2.4.7 подходят под этот критерий. Старые версии Debian плохо поддерживались Mondo, но начиная с ядра 2.4.17, ядра Debian должны содержать все обязательные компоненты. Если ваше ядро не может использоваться для загрузки компакт-диска Mondo, воспользуйтесь аварийным ядром mindi-kemel (см. раздел 16.18). Ядро mindi-kemeL используется только для загрузки компакт-диска аварийного восстановления, оно не заменяет системное ядро. У Mondo есть свои представления о том, как должен быть настроен загрузчик GRUB. Возможно, пользователям GRUB придется создать следующую мягкую ссылку: # In -s /boot/grub/menu.1st /etc/grub.conf Mondo настаивает на присутствии этой ссылки и отказывается проводить архивацию без нее, так что лучше не спорить. Mondo распространяется в форме исходных текстов, пакетах Debian и RPM. Вам потребуются следующие пакеты: О Mondo; О О О О О
Mindi; Afio; Newt; Lzop; Syslinux;
О Cdrecord; О Mkisofs.
См. также Mondoarchive(l); локальная документация Mondo (/usr/share/doc/mondo/html/ 1.6x-howto); форумы пользователей Mondo (http://forum.mondorescue.org).
16.16. Создание загрузочного диска DVD
269
16.15. Проверка архивов Mondo Проблема Вам хотелось бы убедиться в целостности архива Mondo. Всегда лучше делать это заранее; было бы крайне неприятно узнать о повреждении архива в тот момент, когда вы пытаетесь восстановить систему.
Решение Воспользуйтесь командой Mondo compare. Загрузите диск Mondo в той системе, в которой он был создан. Введите в приглашении: # compare На выполнение команды потребуется некоторое время, зависящее от размера архива. После ее завершения просмотрите протокол изменений в файле /tmp/ changed.txt. Изменения должны ограничиваться файлами журналов, почтой, /etc/ mtab и другими часто изменяемыми файлами. В статических системных файлах (таких, как исполняемые файлы в /bin, /sbin, /usr/bin и /usr/sbin), а также в статических файлах конфигурации в /etc/ быть не должно.
Комментарий Всегда проверяйте резервную копию системы! После выполнения команды compare попробуйте восстановить несколько файлов с диска Mondo. Если у вас имеется свободный компьютер с той же аппаратной конфигурацией, проведите на нем полное восстановление (самый надежный способ).
см. также mondoarchive(l); локальная документация Mondo (/usr/share/doc/mondo/hml/16.xhowto); форумы пользователей Mondo (http://forum.mondorescue.org).
16.16. Создание загрузочного диска DVD Проблема Вы предпочитаете записать резервную копию системы на один диск DVD вместо нескольких компакт-дисков.
Решение Запустите Mondo Rescue из командной строки и создайте файл .iso. Затем запишите файл .iso на DVD. Помимо компонентов Mondo Rescue, перечисленных в подразделе «Комментарий» раздела 16.14, вам потребуются пакеты dvd+rw-tools и cdrtools.
270
Глава 16. Архивация и восстановление
Первая команда создает файл .iso, а вторая копирует его на DVD: # mondoarchive -OVmf -5 -S /tmp/scratch -T /tmp/mondo -E "/home /shared /var/www" \ -i -f /tmp/iso f g r o w i s o f s -dvd-compat -Z /dev/scdO=/tmp/iso
Комментарий В принципе задача может быть решена и в графическом интерфейсе Mondo — на первом экране выберите режим Backup to Hard Disk. Командная строка позволяет лучше контролировать происходящее; например, вы можете отключить создание загрузочных дискет и запретить автоматическое выдвижение лотка. Параметры командной строки mondoarchive: О -0 — создание архива; О -V — проверка архива; О -т — запрет автоматического выдвижения лотка (используется для автоматизированной архивации и на портативных компьютерах, которые обычно не имеют самозадвигающихся лотков); О -F — не выдавать запрос на создание загрузочных дискет; О -5 — уровень сжатия. Допустимые значения лежат в интервале 0-9, где 0 соответствует отсутствию сжатия, а 9 — максимальной степени сжатия. По умолчанию используется значение 3; О -S — местонахождение рабочего каталога, в котором строятся образы перед архивацией; О -Т — каталог для хранения других временных файлов; О -Е — перечень каталогов, исключаемых из архива. Съемные тома, /tmp и /ргос исключаются автоматически; О -i — создание образов .iso; О -d — каталог, в котором хранится итоговый файл .iso. По умолчанию используется каталог /root/images/mondo.
См. также mondoarchive(l),growisofs(l); локальная документация Mondo (/usr/share/doc/mondo/ hml/16.x-howto); форумы пользователей Mondo (http://forum.mondorescue.org).
16.17. Использование Mondo Rescue для клонирования систем Linux Проблема Имеется несколько идентичных компьютеров; на них требуется установить идентичные конфигурации Linux. Звучит просто, но на практике задача установки
16.18. Использование mindi-kemel
271
одинаковых конфигураций на двух и более компьютерах оказывается неприятной и чреватой ошибками. РРШРНИР
Сначала создайте одну установку Linux и настройте ее по своему усмотрению. Затем создайте при помощи Mondo диск CD или DVD для своей настроенной системы и используйте его для новых установок. Загрузите диск Mondo на другом компьютере и выберите режим Nuke. Mondo стирает установленную систему и создает точную копию настроенного экземпляра Linux.
комментарии Mondo экономит время при дублировании конкретной конфигурации сервера или подготовке нескольких идентичных рабочих станций. Не забудьте отредактировать сетевые параметры (имена хостов и статические IP-адреса) и создать необходимые учетные записи пользователей.
См. также mondoarchive(l); локальная документация Mondo (/usr/share/doc/mondo/hml/16.xhowto); форумы пользователей Mondo (http://forum.mondorescue.org).
16.18. Использование mindi-kernel Проблема В ядре Linux отсутствуют некоторые элементы, необходимые Mondo для создания загрузочных дисков аварийного восстановления. Вы узнали об этом, когда попытка загрузки с диска Mondo завершилась с ошибкой «VFS: Unable to mount root fs». Что делать дальше? Как создать работоспособный диск?
Решение Воспользуйтесь ядром mindi-kernel для создания загрузочного диска Mondo. Mindi-kernel — надежное (failsafe) ядро 2.4.7, предоставленное авторами Mondo. Если вы используете графический интерфейс Mondo, программа спросит, хотите ли вы использовать mindi-kernel. Ответьте положительно. В командной строке использование mindi-kernel включается параметром -к: -к FAILSAFE
Комментарий Возможно, пользователям Debian придется установить mindi-kernel отдельно. Ядро mindi-kernel не заменяет системное ядро, а только обеспечивает создание загружаемого диска аварийного восстановления.
272
Глава 16. Архивация и восстановление
См. также mondoarchive(l); локальная документация Mondo (/usr/share/doc/mondo/hml/16.xhowto); форумы пользователей Mondo (http://forum.mondorescue.org).
16.19. Восстановление системы с диска Mondo •
Проблема Требуется провести полное восстановление системы. Возможно, система получила непоправимые повреждения, или вы хотите снести существующую установку и восстановить ее в предыдущем, заведомо работоспособном состоянии.
Решение Чтобы построить систему заново, загрузитесь с диска Mondo и введите в командной строке команду nuke. Команда полностью уничтожает существующую систему и восстанавливает ее в состоянии, сохраненном на диске.
Комментарий Программа Mondo может сохранять всю систему, включая файлы данных или только корневую файловую систему. На практике Mondo обычно используется для сохранения корневой файловой системы на загрузочном компакт-диске, а данные архивируются отдельно при помощи сервера rsync.
См. также mondoarchive(l); локальная документация Mondo (/usr/share/doc/mondo/hml/16.x-howto); форумы пользователей Mondo (http://forum.mondorescue.org).
16.20. Восстановление отдельных файлов с диска Mondo Проблема Требуется восстановить несколько файлов. Вы не собираетесь уничтожать существующую систему и начинать все заново.
Решение Загрузите систему с диска mondo и выберите интерактивный режим.
16.20. Восстановление отдельных файлов с диска Mondo
273
Введите в командной строке команду interactive. Mondo спрашивает, какие разделы следует смонтировать. Выберите нужные вам разделы, а затем ответьте на несколько вопросов: Do you want to partition your devices? no Do you want to format them? no Do you want to restore everything? no Do you want to restore something? yes Which path do you want to restore? /etc/rsync Select your restore path: /etc/rsync Mondo даст возможность напрямую загрузить систему с диска после восстановления файлов, но обычно проще извлечь диск Mondo и перезагрузить систему.
Комментарий Возможно, файлы стоит восстановить в каталоге по умолчанию (/mnt/RESTORE) и просмотреть их перед тем, как копировать в итоговый каталог.
См. также mondoarchive(l); локальная документация Mondo (/usr/share/doc/mondo/hml/16.xhowto); форумы пользователей Mondo (http://forum.mondorescue.org).
•
Глава 17
Удаленный доступ
17.1. Введение Удаленный доступ по праву считается одной из самых замечательных возможностей Linux. Существует много способов организации удаленного доступа. В незащищенных сетях не следует полагаться на старые механизмы telnet или X, поскольку информация учетной записи и данные пересылаются в виде простого текста. Оптимальным выбором станет OpenSSH (Secure SHell) — семейство из нескольких программ защищенной пересылки данных: scp (Secure CoPy), ssh (Secure SHell) и sftp (Secure File Transfer Protocol). Программа ssh является основным инструментом удаленного администрирования; с ее помощью можно подключиться к удаленному компьютеру и работать с ним так, словно вы физически работаете за этим компьютером. Информация учетных записей и данные шифруются. Кроме того, ssh обнаруживает модификацию пакетов во время пересылки. Злоумышленники могут сколько угодно перехватывать пакеты и вносить в них изменения — они этим ничего не добьются. В действительности SSH не является командным процессором (shell); это протокол. Существует две несовместимые версии этого протокола, SSH-1 и SSH-2. OpenSSH поддерживает обе версии. В этой главе рассматривается версия SSH-2, так как в работе следует использовать более современную версию OpenSSH.
ПРИМЕЧАНИЕ Терминология SSH может сбить с толку непосвященных. SSH (прописными буквами) — название протокола, тогда как ssh, scp и т. д. (строчными буквами) — программы, использующие SSH. OpenSSH — реализация SSH, используемая в этой главе.
Работать с SSH несложно. Если ранее вам доводилось пользоваться rsh, rlogin или rep, синтаксис командной строки почти не изменился. На всех компьютерах, к которым должен предоставляться удаленный доступ, должен работать демон OpenSSH sshd, а на всех удаленных компьютерах потребуются учетные записи. Входить можно под любой учетной записью; главное, чтобы вы знали имя и пароль. OpenSSH проводит аутентификацию с использованием пар из открытого и закрытого ключа. Закрытые ключи тщательно охраняются и никогда, ни при каких
17.2. Настройка OpenSSH
275
условиях не передаются другим пользователям. Всегда используйте сильные пароли для шифрования и защиты закрытых ключей. По-настоящему сильный пароль состоит из нескольких слов и содержит буквы и цифры типа «t4is is mai 733t s3kkrit p4ssphr4se». Как обычно, следует выдерживать баланс между надежностью и удобством, потому что пароль придется часто вводить. Открытые ключи передаются удаленным клиентам и серверам SSH. Например, при использовании аутентификации с ключом хоста открытый ключ сервера хранится на клиентских компьютерах, которым разрешен доступ к серверу. Все сеансы SSH начинаются с аутентификации. После того как открытый ключ удаленного хоста будет скопирован в локальный каталог ~/.ssh, вы сможете подключиться к удаленному хосту в качестве любого пользователя, используя данные его учетной записи. Если вы хотите, чтобы при аутентификации использовались ключи SSH (вместо учетных данных пользователя), сгенерируйте собственную пару из открытого и закрытого ключа и скопируйте открытый ключ на все удаленные хосты, к которым вы собираетесь подключаться. Чтобы схема заработала, достаточно выполнить пару дополнительных шагов, описанных в этой главе. Такой вид аутентификации называется аутентификацией с открытым ключом. Если вы собираетесь подключаться к многим удаленным компьютерам, управление входными данными начинает создавать проблемы. Использование одного и того же открытого ключа и пароля создает потенциальную угрозу для безопасности системы, но и запомнить слишком много имен и паролей тоже нелегко. OpenSSH решает эту проблему за счет использования аутентификации с открытым ключом, программ ssh-agent и keychain, позволяющих проводить защищенную аутентификацию без пароля.
17.2. Настройка OpenSSH Проблема Вы хотите установить связь между локальной рабочей станцией и удаленным компьютером. Подключение должно быть защищенным; информация не должна стать доступной для злоумышленников (их не видно, но они существуют — даже если вы не страдаете паранойей). Итак, требуется настроить OpenSSH.
Решение Установите OpenSSH на обоих компьютерах. Чтобы удаленный хост принимал подключения, на нем должен работать демон sshd. Скопируйте открытый ключ удаленного хоста в файл ~/.ssh/known_hosts на локальном компьютере — и можете приступать к работе. Запуск sshd в большинстве систем на базе rpm осуществляется следующим образом: # /etc/init.d/sshd start # /etc/init.d/sshd stop
276
Глава 17. Удаленный доступ
В Debian демон запускается несколько иначе: # /etc/init.d/ssh start # /etc/init.d/ssh stop
Всегда проверяйте имена файлов init, они могут изменяться в зависимости от дистрибутива. Копирование открытого ключа удаленного хоста в локальный файл ~/.ssh/ knownjiosts сводится к простой попытке подключения к удаленному хосту. carla@windbag carlaJ ssh stinkpad The authenticity of host 'stinkpad (192.168.1.100)' can't be established. RSA key fingerprint is a2:c6:70:3e:73:00:b3:ed:90:bl:9a:bc:e7:d5:32:ba. Are you sure you want to continue connecting (yes/no)?
Ответьте yes, и на экране появится сообщение: Warning: Permanently added 'stinkpad,192.168.1.100' (RSA) t o the l i s t of known hosts. car1a@stinkpad's password: Linux stinkpad 2.4.21 #1 Sun Aug 3 20:15:59 PDT 2003 i686 GNU/Linux Libranet GNU/Linux Last Login: Sat June 3 22:16:24 2004 from :0.0 car1a@stinkpad:~$
Подключившись к удаленному компьютеру, вы сможете работать с ним точно так же, как если бы вы сидели за ним (о том, как запустить удаленный сеанс X, рассказано в разделе 17.11). Чтобы закрыть сеанс удаленного подключения, введите команду exit.
Комментарий Простая команда ssh <xocm> создает подключение к другому хосту локальной сети с использованием данных текущей учетной записи. Чтобы подключиться с данными другого пользователя, укажите параметр -I: carla@windbag -$ ssh -1 wilmaf stinkpad
При подключении SSH по Интернету следует указывать полное доменное имя: carla@windbag ~$ ssh stinkpad.test.net Установление исходного подключения и копирование ключа RSA с хоста является самой рискованной частью создания SSH. Если злоумышленнику удастся вмешаться в работу сервера имен, он может перехватить сеанс SSH и похитить данные вашей учетной записи. Впрочем, риск относительно невелик, и перед первым подключением можно проверить IP-адрес удаленного хоста. Чтобы закрыть эту брешь в системе безопасности, заранее вручную скопируйте открытый ключ хоста в локальный файл ~/.ssh/known_hosts. При этом файл придется слегка подредактировать; далее приводятся примеры. Ключи хостов хранятся в каталоге /etc/ssh и используются для проверки «личности» удаленного хоста. Для подключения пользователю потребуется только копия открытого ключа в его файле ~/.ssh/known_hosts и учетная запись, под которой осуществляется вход в систему. В некоторых дистрибутивах Linux при установке OpenSSH создаются две пары ключей, RSA и DSA: $ Is /etc/ssh
ssh_host_dsa_key ssh_host_dsa_key.pub
17.3. Построение новых ключей хостов
277
sshhostrsakey ssh_host_rsa_key.pub
Если система не создает ключи или вы захотите изменить их, обратитесь к рецепту 17.3 — в нем рассказано, как сгенерировать новые ключи хостов. Открытый ключ RSA выглядит примерно так: $ cat ssh_host_rsa_key.pub ssh-rsa
AAAAB3NzaClyc2EAAAABIwAAAIEA5pSqNmtqRzK2JaLr8qkIQ41nBDLI2JRJ6gRBmwg9gwK3S8xX nMUHIsu8wh5Sloei8hs47x2I9cpNpxHfjlwQWwqP61VyelDfD+y+WIz0UgzUXN5IrqYZ70EdQ4Xn ++J1 lkmFG6L16KySb0700XonlC09rNxisHL5GC0qil+qM= rootPwindbag Сам ключ должен быть одной длинной, неразрывной строкой — он не должен содержать внутренних разрывов. Скопируйте его на съемный диск, перенесите в локальный файл ~/.ssh/known_hosts и измените следующим образом: w i n d b a g . t e s t . n e t , 1 9 2 . 1 6 8 . 1 . 6 ssh-rsa AAAAB3NzaClyc2EAAAABIwAMIEA5pSqNmtqRzK2JaLr8qkIQ41nBDLI2JRJ6gRBmwg9gwK3S8xX nMUHIsu8wh5Sloei8hs47x2I9cpNpxHfjlwQWwqP61VyelDfD+y+WIz0UgzUXN5IrqYZ70EdQ4Xn ++J1 lkmFG6Ll6KySb0700XonlC09rNxisHL5GC0qil+qM=
Имя хоста и IP-адрес добавляются в начало строки, а завершающее имя хоста удаляется. Открытые ключи доступны для всех, но закрытые ключи должны читаться только владельцем ключа.
См. также ssh(l).
>чей хостов Проблема Вы заглянули в каталог/etc/ssh, но не нашли там файлов с ключами: дистрибутив Linux не сгенерировал их при установке OpenSSH. А может быть, вы просто хотите сгенерировать новые ключи самостоятельно.
Решение Сгенерируйте новую пару ключей программой ssh-keygen. Программа должна запускаться с правами root и с указанием имени новой пары ключей. Всегда задавайте контрольную фразу (пароль): # ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_rsa_key. Your public key has been saved in /etc/ssh/sshjiost_rsa_key.pub. The key fingerprint is: 6c:24:75:54:d3:21:17:c9:ll:db:41:dd:95:3f:d0:ac rootPwindbag
278
Глава 17. Удаленный доступ
В приведенном примере используются имена ключей по умолчанию, но вы можете назвать их как угодно. При использовании других имен не забудьте включить их в файл /etc/ssh/sshd_config: HostKey /etc/ssh/ssh_host_rsa_key Закомментируйте или удалите записи несуществующих ключей.
Комментарий О выборе сильных паролей говорилось в разделе «Введение» настоящей главы. После того как OpenSSH заработает, и открытые ключи будут распространены среди пользователей, не стоит изменять закрытые ключи без особо веских причин, потому что вам придется распространять открытые ключи заново. Если пользователь попытается подключиться со старым открытым ключом, он получит следующее сообщение: &
WARNING: HOST IDENTIFICATION HAS CHANGED!
@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! ... Are you sure you want to continue connecting? (yes/no) Проинструктируйте пользователей, чтобы они всегда отвечали по и ставили вас в известность о происходящем.
См. также ssh(l), ssh_keygen(l).
17.4. Аутентификация с использованием открытых ключей Проблема Требуется проводить аутентификацию сеансов SSH с применением ключей (вместо системных учетных записей). Это позволит вам использовать пароль SSH вместо данных учетной записи, что повышает уровень защиты этих данных. Кроме того, одна пара ключей (открытый и закрытый) может использоваться для произвольного количества удаленных хостов.
Решение В следующем примере пользователь Valorie хочет подключиться с компьютера saturn к компьютеру jupiter. Для этого он должен сгенерировать Hajupiter новую, персональную пару ключей утилитой ssh_keygen, а затем передать копию своего нового открытого ключа на saturn. Следующая команда генерирует новую пару ключей RS А, защищенную паролем: valorie@jupiter:~$ ssh-keygen -t rsa Generating public/private rsa key pair.
17.4. Аутентификация с использованием открытых ключей
279
Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/valorie/.ssh/idrsa. Your public key has been saved in /home/valorie/.ssh/idrsa.pub. The key fingerprint is: 79:lf:a5:5f:5f:17:e5:a8:bC:02:50:8c:3a:le:el:dl valorie@jupiter
Далее пользователь Valorie копирует новый ключ id_rsa.pub в свою учетную запись на компьютере saturn. Поскольку данные в файл authorized_keys на saturn заносятся впервые, для копирования можно воспользоваться командой scp: valorie@jupiter:~$ scp -/.ssh/id_rsa.pub valorie@saturn:.ssh/authorized_keys Теперь при входе на saturn пользователю Valorie будет предложено ввести пароль закрытого ключа SSH>K valorie@jupiter:~$ ssh saturn Enter passphrase for key 'home/valorie/.ssh/idrsa': Linux saturn 2.4.21 #1 Sun Aug 3 20:15:59 PDT 2003 i686 GNU/Linux Libranet GNU/Linux
va1orie@saturn:~$ Сеанс завершается командой exit.
Комментарий OpenSSH использует ключи RSA и DSA. Оба вида ключей поддерживают SSH2, поэтому неважно, какой из них будет выбран. По умолчанию используются RSA. Копирование ключа в файл authorized_keys на удаленном компьютере также может осуществляться простым копированием/вставкой. Откройте нормальный сеанс SSH: $ ssh valorieteaturn Password:
Затем запустите текстовый редактор на обоих концах подключения и выполните копирование/вставку. Это можно проделать для любой учетной записи на доступном сервере SSH. Одной пары ключей должно быть достаточно; открытый ключ можно скопировать на любое количество хостов и использовать один и тот же пароль на всех хостах. Следите за тем, с каким компьютером вы работаете! Легко ввести команду, полагая, что вы находитесь на локальном хосте, тогда как на самом деле вы подключены к удаленному компьютеру. Защищайте ключи! Открытые ключи должны быть общедоступными для чтения, но запись в них должна разрешаться только владельцу (режим 644). Закрытые ключи должны быть недоступны по чтению/записи для всех, кроме их владельца (режим 600). Никогда, ни при каких условиях не передавайте закрытые ключи другим пользователям. Помните, что некоторые текстовые редакторы автоматически создают резервные копии файлов. Либо отключите этот режим, либо немедленно удаляйте резервные копии ключей и других конфиденциальных файлов SSH.
См. также ssh(l).
280
Глава 17. Удаленный доступ
17.5. Использование нескольких пар ключей Проблема Требуется сгенерировать отдельные ключи для обращения к разным хостам или разным типам учетных записей. Например, вы хотите, чтобы один ключ SSH применялся для администрирования сервера FTP, а другой — для обращения к вашим личным учетным записям.
Решение Утилита ssh_keygen позволяет задать парам ключей любые имена по вашему усмотрению. К имени открытого ключа автоматически присоединяется суффикс .pub. Всегда указывайте пароль! akkana@windbag:$ ssh-keygen -t rsa -f /home/akkana/.ssh/ftp_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your i d e n t i f i c a t i o n has been saved i n /home/akkana/.ssh/ftp_key. Your public key has been saved i n /home/akkana/.ssh/ftp_key.pub. The key fingerprint i s : 95:d2:12:55:66:ba:ec:a8:5c:40:4b:le:03:2b:6c:ea akkana@windbag akkana@windbag:~$
При создании пары ключей с пользовательскими именами имя закрытого ключа вводится в файле ~/.ssh/ssh_config. Если файл не существует, создайте его и введите строку вида IdentityFile ~/.ssh/ftp_key
Комментарий В каталоге/etc/ssh должна находиться копия стандартного файла ssh_config. При внесении изменений проще всего добавить новые параметры в конец файла. Файл ssh_config предназначен для хранения как данных конфигурации конкретного пользователя, так и клиентских настроек общесистемного уровня. Копия файла в домашнем каталоге пользователя задает параметры, относящиеся к конкретному пользователю.
См. также ssh(l), ssh_config(5).
17.6. Вход без пароля с использованием ssh-agent Проблема Вводить пароли утомительно, особенно если они состоят из нескольких слов. Требуется использовать OpenSSH для открытия подключений без ввода пароля (но при этом сохранить защиту подключения).
17.6. Вход без пароля с использованием ssh-agent
281
Решение Начните с настройки открытого и закрытого ключей (см. раздел 17.3), а затем воспользуйтесь ssh-agent. Эта программа обрабатывает запросы на аутентификацию при подключении к различным системам через SSH. Пароль вводится только один раз, в начале сеанса SSH; после выхода из сеанса его придется вводить заново. Ssh-agent не позволит запланировать пересылку данных через SSH из сгоп — о том, как это делается, рассказано в разделе 17.8. Прежде всего запустите ssh-agent с указанием используемого командного процессора: $ ssh-agent bash
После появления стандартного приглашения запустите утилиту ssh-add, которая загружает все ключи из каталога ~/.ssh: $ ssh-add Enter passphrase for /home/jenn/.ssh/idrsa: Identity added: /home/jenn/.ssh/idj-sa (/home/jenn/.ssh/idrsa) Enter passphrase for /home/jenn/.ssh/apache_key: Identity added: /home/jenn/.ssh/idrsa (/home/jenn/.ssh/apachekey) В дальнейшем вы сможете войти на любой хост SSH без ввода пароля: jenn@windbag:$ ssh powerpc Linux powerpc 2.4.21 #1 Sun Aug 3 20:15:59 PDT 2003 i686 GNU/Linux Libranet GNU/Linux Last Login: Web Feb 7 18:28:20 2004 from windbag.test.net jennOpowerpc:~$ Чтобы завершить работу ssh-agent, просто выйдите из командного процессора ssh-agent: S exit
Комментарий Поскольку пароли и ключи ассоциируются с конкретным процессом Bash, при выходе из командного процессора ssh-agent они пропадают. Если запустить второй командный процессор для запуска другой копии ssh-agent, пароль придется вводить заново, даже если первый процесс остается активным. Чтобы узнать, какие ключи использует ssh-agent, введите команду $ ssh-add -1 1024 65:91:77:71:24:66:46:ea:cb:00:fe:83:ad:b8:4a:34 /home/jenn/.ssh/id_rsa (RSA) 1024 da:f7:27:6a:37:4e:a5:bb:ld:00:c7:a8:e9:fe:23:d8 /home/jenn/.ssh/apachekey (RSA) Чтобы команда сработала, необходимо вернуться к локальному командному процессору ssh-agent и не быть подключенным к удаленному хосту. При подключении работой терминала управляет удаленный хост, и вы получите сообщение об ошибке «Could not open a connection to your authentication agent». Команда ssh-add позволяет загружать конкретные ключи: $ ssh-add /home/jenn/adminkeys/id_rsa_http
и удалять ключи из активного сеанса ssh-agent (при этом ключ не удаляется из системы): $ ssh-add -d /home/jenn/.ssh/id_dsa Identity removed: /home/jenn/.ssh/iddsa (/home/jenn/.ssh/idjdsa.pub)
282
Глава 17. Удаленный доступ
Следующая команда удаляет все ключи: $ ssh-add -D All i d e n t i t i e s removed.
См. также Ssh(l), ssh-add(l), ssh-agent(l).
17.7. Вход без пароля с использованием keychain Проблема Программа ssh-agent неплоха, но пользователю приходится вводить пароль при каждом открытии нового командного процессора. С выходом вся введенная информация теряется. Кроме того, ssh-agent не позволяет использовать беспарольную пересылку данных SSH с сгоп.
Решение Используйте программу keychain, которая сохраняет пароли SSH на общесистемном уровне вплоть до перезагрузки. Keychain также работает совместно с сгоп. Загрузите и установите keychain из обычных источников в формате RPM, .deb или в виде исходных текстов. Затем отредактируйте локальный файл ~/bash_profile и добавьте следующие строки: keychain i d d s a . ~/.keychain/$HOSTNAME-sh
Укажите фактическое имя закрытого ключа: idjrsa, my_own_groovy_key и т. д. Обратите внимание на начальную точку во второй строке; она приказывает Bash прочитать файл, имя которого указано в этой строке. Вот и все. Теперь после входа на локальную рабочую станцию на экране появится запрос на ввод пароля от keychain. В дальнейшем keychain будет обеспечивать аутентификацию вплоть до перезагрузки системы.
Комментарий В файле можно указать столько ключей, сколько вы собираетесь использовать: keychain iddsa apachekey ftpkey
Для каждого ключа при входе в систему необходимо ввести пароль. Программа keychain будет обеспечивать аутентификацию в течение всего времени работы системы, даже при выходе и повторном входе пользователя в систему. После перезапуска системы пароли придется ввести заново.
См. также ssh(l), ssh-add(l), ssh-agent(l), keychain(l).
17.9. Автоматическое завершение ssh-agent при выходе
283
17.8. Беспарольный вход для заданий сгоп Проблема Требуется запланировать архивацию или пересылку файлов через SSH с использованием сгоп. Как приказать сгоп использовать keychain для аутентификации на удаленных хостах?
Решение Включите в сценарий сгоп ту же строку, которая использовалась в .bash_profile. Следующий простой сценарий архивирует домашний каталог пользователя при помощи rsync: #! /bin/bash source /home/saz/.keychain/$HOSTNAME-sh rsync -a -e ssh --delete --force rsync.test.net::home/saz/
/backups/saz
Оформите его как задание сгоп, и архивация будет выполняться автоматически вплоть до следующей перезагрузки.
См. также ssh(l), keychain(l); глава 16.
17.9. Автоматическое завершение ssh-agent при выходе Проблема Все существующие процессы ssh-agent должны автоматически «убиваться» при выходе из системы (для повышения безопасности).
Решение Включите следующую запись в файл ~/.bash_Logout: k i l l $SSH_AGENTJ>ID
Комментарий Не делайте этого для программы keychain — ведь keychain используч я прежде всего для того, чтобы при повторном входе в систему пользователю i приходилось заново вводить пароли. Если на вашем компьютере нет файла ~/-bash_logout, создайте его. Возьмите за образец общесистемный файл /etc/skel/.bash_logout.
им. также bash(l), ssh-agent(l).
284
Глава 17. Удаленный доступ
17.10. Настройка приглашения Bash для ssh Проблема При подключении через SSH внешний вид приглашения изменяется, и в нем отображается имя удаленного хоста. Но черно-белое приглашение выглядит убого, а вам хочется иметь собственное многоцветное приглашение, которые бы вдобавок указывало на наличие активного подключения SSH.
Решение Настройте приглашение Bash на удаленном компьютере. В следующем примере приглашение выводится красным цветом и к нему добавляется суффикс ssh. Включите следующий фрагмент в файл -./bashrc удаленной учетной записи, которая будет использоваться для подключения: if
-n "SSSHCLIENT" ] : then text=" ssh"
fi export PSl='\[\e[O:31m\]\u0\h:\w${text}$\[\e[m\] '
Теперь при подключении приглашение будет выглядеть так (и отображаться красным цветом): carla@serverO6:~ssh $
Красным будет только приглашение; прочий текст выводится обычным цветом.
Комментарий Настройка приглашения Bash могла бы стать темой для отдельной книги. Вы можете легко изменить представленный пример по своему усмотрению. Вы не обязаны использовать суффикс «ssh» или называть переменную «text». Код [\е[0;31т\] определяет цвет текста. Настройка основана на проверке переменной среды SSH_CLIENT. Если переменная определена, Bash понимает, что вместо стандартного приглашения следует использовать специальное приглашение SSH.
См. также bash(l); The Bash Prompt Howto index.html).
(http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/
17.11. Туннелирование Х через SSH Проблема Вам хотелось бы работать с удаленными сеансами X, но вы знаете, что они совершенно не защищены. Из-за этого данные X требуется пересылать через SSH.
17.12. Подключение с компьютера с системой Windows
285
Решение Настройте и запустите SSH так, как было описано в предыдущих разделах, затем включите пересылку X на сервере SSH в файле /etc/ssh/sshd-config. Укажите ключ -X при запуске сеанса SSH. В файл /etc/ssh/sshd-config на сервере SSH включается строка XllForwarding yes При подключении к серверу используется ключ -X: $ ssh -X saturn.test.net Следующая команда проверяет, что пересылка X работает: $ echo SDISPLAY l o c a l host: 10.0
Если пересылка не работает, команда вернет пустую строку. А любую программу X, установленную на сервере, можно запустить так, словно она является локальной.
Комментарий Запуск удаленных сеансов X через SSH проще и надежнее, чем запуск «обычных» сеансов X без SSH, в которых защита данных вообще отсутствует. Тем не менее некоторый риск все же присутствует. Используйте этот способ для подключения только к доверенным хостам, потому что любопытный администратор может легко перехватить нажатия клавиш или входные данные или даже подключиться к вашему локальному рабочему столу и продолжить исследования. Проследите за тем, чтобы для локального файла -/-^authority был установлен режим 600; по крайней мере вы будете избавлены от любопытства со стороны непривилегированных пользователей удаленного хоста. Убедитесь, что следующие записи присутствуют в локальном файле /etc/ssh/ ssh_config и во всех файлах ~/ssh/ssh_config вашей системы: Host *
ForwardXll no ForwardAgent no В зависимости от физического расстояния от удаленного сервера и скорости канала возможны задержки с реакцией на нажатия клавиш или перемещения мыши.
См. также ssh(l).
17.12. Подключение с компьютера с системой Windows Проблема SSH в Linux — отличная штука, но вы хотите подключиться к Linux PC из системы Windows. Можно ли использовать OpenSSH на компьютере с системой Windows?
Глава 17. Удаленный доступ
286
Решение Это можно сделать несколькими способами. Мы рассмотрим два из них: Cygwin и PuTTY. В разделе 16.12 подробно описан процесс установки и запуска пакета Cygwin, создающего на компьютере Windows Linux-среду. Вы сможете запустить OpenSSH из Windows точно так же, как в системе Linux (как в качестве сервера, так и в качестве клиента). Более того, возможен даже запуск сеанса X через SSH. PuTTY — бесплатный клиент SSH для Windows. Программа не содержит серверный компонент. Работать с PuTTY предельно просто — загрузите и установите программу, запустите ее двойным щелчком, введите имя хоста, к которому нужно подключиться, и щелкните на кнопке Open. На рис. 17.1 изображено главное окно PuTTY.
:
fPuTTY Configuration
Е Session j
E Logging
ф • Terminal \
!•••• K e y b o a r d
!
U Bell
!
<-•• Features
ф~ Window ;
U Appeaiance
j
{••• Behaviour
Basic options 1см youi PuTTY session •jpecily VO.JI corineehon by host r.srr.e or I? adiie i ,.,rl
Г
Raw
Г
telnet
Г
Rlogm
.'• SSH
jd ,-з»е or delete о '.toied session -
i •••• Tfanslation I- Selection i
>•••• Colours
ЁЗ Connection
;1оа|.:;: j
Default Settings
I- •• Proxy I- Telnet [•••• R l o g i n BSSH I -Auth !••- T u n n e l s -• B u g s
Clovs t».nr«Jow or> "suit С Always Г Nevei
f» Only on dean еий
Oper.
Cancel
Рис. 17.1. PuTTY
Комментарий Если ваши потребности ограничиваются простым клиентом SSH, используйте PuTTY — это самый простой и быстрый вариант. Файл putty.exe легко помещается на дискету для проведения «мобильных сеансов SSH».
См. также Домашняя страница PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/ download.html); Cygwin (http://www.cygwin.com).
17.13. Назначение разрешений для файлов ssh
287
17.13. Назначение разрешений для файлов ssh Проблема Файлам и ключам SSH должны быть назначены правильные, самые безопасные разрешения доступа.
Решение Для пользовательских учетных записей в каталоге ~/.ssh назначаются следующие разрешения: ~/.ssh ~/.ssh/id_dsa и другие закрытые ключи ~/.ssh/id_dsa.pub и другие открытые ключи ~/.ssh/ssh_config
700 400 644 644
~/.ssh/known_hosts ~/.ssh/authorized_hosts Разрешения для содержимого каталога /etc/ssh:
644 644
/etc/ssh /etc/ssh/sshd_config
755 644
/etc/ssh/ssh_config /etc/ssh/ssh_host_dsa_key и другие закрытые ключи /etc/ssh/ssh_host_dsa_key.pub и другие открытые ключи /etc/ssh/moduli
644 400 644 644
См. также ssh(l), ssh(8).
Глава 18
Управление версиями
18.1. Введение Для чего нужны системы управления версиями? Они позволяют эффективно отслеживать изменения в документах и хранить полную историю проекта. Даже спустя несколько месяцев вы можете легко вернуться к предыдущей конфигурации системы, состоянию программного блока или версии рукописи. Системы управления версиями полезны при работе с разными видами данных: исходными текстами программ, двоичными файлами, конфигурационными файлами, сценариями, статьями и книгами, индексами, складскими базами данных — словом, с любыми текстовыми документами. Поскольку система управления версиями отслеживает все вносимые изменения, вы можете легко вернуться к любой точке жизненного цикла определенного проекта. Система управления версиями выполнит всю работу — она не зависит от добросовестности пользователей, создающих и сохраняющих копии разных версий документа. Системы управления версиями помогают организовать совместную работу групп над общим проектом. Например, проект можно разбить на несколько ветвей, которые позднее будут объединены. Также возможно объединение нескольких версий файла, хотя следует помнить, что программа не понимает смысл содержимого файла и не способна разумно разрешать конфликты — она знает лишь то, что файлы различаются, поэтому объединение иногда требует человеческого участия. Существует немало бесплатных программ управления версий. Приведу список самых распространенных: О RCS (Revision Control System); О CVS (Concurrent Versions System); О Subversion; О GNU Arch; О Monotone. Некоторые коммерческие продукты: О BitKeeper; О Visual SourceSafe;
18.2. Построение локального репозитария RCS
289
О О О О
ОрепСМ; CMSynergy; Perforce; ClearCase. Программы RCS и CVS существуют уже давно и получили самое широкое распространение. Они просты в настройке и использовании, а их давнее использование обеспечило тестирование в жестких условиях. Subversion, SNU Arch и Monotone обладают возможностями, отсутствующими в CVS: созданием распределенных репозитариев (в отличие от модели CVS с центральным сервером) и атомарными операциями закрепления изменений. При атомарном закреплении все изменения происходят одновременно. Изменения, вносимые пользователем в репозитарий, применяются как единое целое и становятся видимыми для других пользователей только после завершения. CVS вносит изменения на уровне отдельных файлов, поэтому если закрепление будет прервано из-за сбоя сети, оно будет внесено только частично. Несмотря на всю полезность атомарного режима, Subversion, GNU Arch и Monotone все же нельзя назвать зрелыми продуктами. GNU Arch и Subversion трудны в установке и настройке и не так легко осваиваются. В Monotone используется другая, весьма интересная архитектура — принципиальное отличие заключается в том, что файлы передаются по внедренному сетевому протоколу netsync вместо HTTP, NNTP или SMTP. Тем самым ликвидируются многие сложные этапы настройки, а каждая установка Monotone может выполнять функции как клиента, так и сервера. Дальновидный администратор может установить некоторые из этих продуктов на тестовых компьютерах, следить за их разработкой и постепенно привыкать к ним, потому что эти программы будут использоваться для управления версиями в будущем. BitKeeper — один из самых популярных коммерческих продуктов. В частности, он используется при разработке ядра Linux. Разработчики BitKeeper предлагают как 30-дневную пробную версию, так и усеченную бесплатную версию для личного использования. Несмотря на большое количество альтернатив, в этой главе основное внимание уделяется RCS и CVS, самым зрелым и широко используемым системам управления версиями. RCS является прикладной частью (backend) CVS, что упрощает освоение обеих программ. RCS идеально подходит для одного пользователя с простыми потребностями; CVS хорошо подойдет как для одного пользователя, так и для группы пользователей, работающих над сложными проектами.
18.2. Построение локального репозитария RCS Проблема Вы боитесь, что когда-нибудь отредактируете какой-нибудь файл, в системе чтонибудь сломается, а вы не будете помнить, как отменить изменения. Таким образом, вы хотите создать простой, локальный репозитарий для отслеживания изменений в программах, конфигурационных файлах, сценариях и других документах для
290
Глава 18. Управление версиями
одного пользователя. Доступ к сети или многопользовательская поддержка не обязательны — нужна простая система для вашего личного пользования.
Решение Установите RCS (Revision Control System) из пакетов RPM, .deb или исходных текстов, а затем создайте собственный репозитарий RCS. Сначала создайте рабочий каталог, затем подкаталог RCS: $ mkdir projecthome $ cd projecthome $ mkdir RCS Убедитесь в том, что в рабочем каталоге (projecthome) имеются файлы для экспериментов. Занесение файла в репозитарий выполняется следующей командой: terri@workstationl:~7projecthome$ ci -u cupsd.conf RCS/cupsd.conf,v <-• cupsd.conf enter description, terminated with single '.'or end of file: NOT: This is NOT a log message! » LAN printer server, for windows and linux. no samba »•
initial revision: 1.1 done
Чтобы отредактировать файл, извлеките его из репозитария и откройте в своем любимом текстовом редакторе: terri@workstationl:~7projecthome$ со -1 cupsd.conf RCS/cupsd.conf,v •-> revision 1.1 (locked) done
cupsd.conf
terri@workstationl:~7projecthome$ kate cupsd.conf &
После завершения редактирования сохраните и закройте файл, а затем занесите его в репозитарий так, как показано выше. Добавьте в журнал комментарий с описанием изменений: $ ci -u cupsd.conf RCS/cupsd.conf.v <•• cupsd.conf new revision: 1.2; previous revision: 1.1 enter log message, terminated with single '.'or end of file: » added administrative controls to prevent users from making changes to the server done •
Комментарий В простой системе управления версиями используются два каталога: в рабочем каталоге хранятся рабочие копии документов, а каталог RCS выполняет функции репозитария. Файлы в репозитарий снабжаются суффиксом ,v: $ I s RCS cupsd.conf.v
В файле хранится информация о различных версиях отслеживаемого файла: $ less cupsd.conf.v head 1.3: access:
18.3. Выборка старых версий файлов в RCS
291
symbols; locks: strict; comment # fc date 2004.06.15.03.33.46; author terri; state Exp: branches; next 1.2; 1.2 date 2004.06.13.30.47; author terri: state Exp: branches: next 1.1; 1.1 date 2004.06.12.03.27.01: author terri; state Exp; branches; next desc PLAN printer server, for windows and linux, no samba Помните, что файлы в рабочем каталоге представляют временные версии. Когда файл достигнет состояния, которое бы вы хотели зафиксировать, занесите его в репозитарий. Основные команды RCS: О ci -u — занести файл в репозитарий и снять блокировку; О со -L — извлечь файл из репозитария и заблокировать. Флаг -и при занесении файла в репозитарий защищает копию в рабочем каталоге. Файл в рабочем каталоге становится доступным только для чтения, что предотвращает случайные изменения и напоминает, что для редактирования файл необходимо извлечь из репозитария. Установление блокировки означает, что файл в любой момент времени может быть извлечен и отредактирован только одним человеком, поэтому RCS не подходит для проектов с большим количеством участников. Тем не менее система отлично подходит для малых проектов и отдельных пользователей и к тому же легко осваивается.
См. также rcsintro(l), ci(l), co(l); домашняя страница RCS (http://www.cs.purdue.edu/homes/ trinkle/RCS).
18.3. Выборка старых версий файлов в RCS Проблема Беда все-таки произошла: вы изменили рецепт секретного соуса, ошиблись и не можете восстановить его в исходном виде. Но вы использовали RCS, и в репозитарий хранится несколько версий файла. Требуется вывести список всех версий, протокол изменений и даты последней модификации. Определив, какая версия вам нужна, извлеките старую версию из репозитария.
292
Глава 18. Управление версиями
Решение В репозитарии накопилось несколько версий файла. Чтобы просмотреть весь протокол изменений по конкретному файлу, воспользуйтесь командой rlog: $ rlog cupsd.conf RCS f i l e : RCS/cupsd.conf,v Working f i l e : cupsd.conf head: 1.2 branch:
locks:strict access list: symbolic names: keyword substitution: kv total revision: 2; selected revisions: 2 description: LAN printer server, for windows and linux. no samba revision 1.3 date: 2004/07/31 03:33:46; author: terri: state: Exp; lines: +1 -1 corrected error in Allow directive revision 1.2 date: 2004/07/27 05:29:27: author: terri; state: Exp; lines: +2 -0 added administrative controls to prevent users from making changes to the server revision 1.1
date: 2004/07/27 05:19:25; author: t e r r i ; state: Exp; Initial revision
Вероятно, вы уже поняли, почему так важно писать содержательные комментарии. Для извлечения конкретной версии документа следует указать ее номер: $ со -1 - r l . l cupsd.conf
ВНИМАНИЕ Извлечение файла из репозитария приводит к стиранию рабочей копии файла (projecthome/ cupsd.conf в данном примере). Чтобы этого не произошло, начните с занесения рабочей копии в репозитарии RCS.
Чтобы быстро вывести файл без его извлечения и открытия в редакторе, используйте ключ -р: $ со -р - r l . 5 cupsd.conf
Комментарий Если репозитарии содержит несколько версий файла и при извлечении не указывался номер версии, по умолчанию будет извлечена самая последняя версия. Вы можете просмотреть свои файлы в каталоге RCS и даже открыть их в текстовом редакторе, чтобы узнать, что с ними делает RCS. Даже если в репозитарии будет сохранено несколько десятков версий одного файла, вся история изменений все равно будет представлена одним файлом. RCS изменяет только содержимое одного файла и не создает отдельных копий для каждого изменения.
18.4. Сравнение версий файла в RCS
293
RCS избавляет вас от лишних хлопот. Вам не нужно тратить усилия и вспоминать, что происходило с файлом, потому что RCS отслеживает все изменения за вас.
См. также rcsintro(l), ci(l), co(l), rlog(l); домашняя страница RCS (http://www.cs.purdue.edu/ homes/trinkle/RCS).
18.4. Сравнение версий файла в RCS Проблема Текущая версия конфигурационного файла работает не так, как вы хотели, или текстовый документ не содержит нужных данных. Вы уверены, что со старой версией все было в порядке. Таким образом, нужно сравнить новую версию со старыми версиями и узнать, в какой момент вы сбились с пути.
Решение Воспользуйтесь командой rcsdiff. Команда сравнивает две версии файла: $ rcsdiff - r l . l - r l . 2 cupsd.conf
Проследите, чтобы после ключей -г не было пробелов. Следующая команда сравнивает рабочий файл с указанной версией: $ rcsdiff -rl.2 cupsd.conf Сравнение текущего рабочего файла с последней версией: $ rcsdiff cupsd.conf
Используйте эту команду для просмотра внесенных изменений после редактирования файла, но до его занесения в репозитарий.
Комментарий Если выходные данные rcsdiff окажутся слишком длинными, направьте их в файл для удобства просмотра: $ rcsdiff - r l . l -rl.2 cupsd.conf > cupsdiff.txt
Пример вывода rcsdiff: $ r c s d i f f - r l . l - r l . 3 cupsd.conf RCS f i l e : RCS/cupsd.conf,v retrieving revision 1.1 retrieving revision 1.3 diff - r l . l -rl.3 9c9.17 < BrowseAddress 192.168.1.255 \ No newline at end o f f i l e > BrowseAddress 192.168.1.255
294
Глава 18. Управление версиями
> > > > > >
<Location /admin> AuthType Basic AuthClass System Allow From 127.0.0.1 Order Deny.Allow Deny From All
> </Location>
Сверху указано, какие версии файлов сравниваются. < — префикс строки, уникальной для первого файла. > — префикс строки, уникальной для второго файла. \ — префикс комментариев от RCS.
См. также rcsdiff(l); домашняя страница RCS (http://www.cs.purdue.edu/homes/trinkLe/RCS). •
18.5. Управление системными конфигурационными файлами в RCS Проблема Требуется сохранять все версии системных конфигурационных файлов, чтобы легко вернуться к более ранней конфигурации.
Решение Возникает соблазн скопировать все содержимое /etc в репозитарий RCS, но это не нужно и расточительно. Заархивируйте /etc обычным способом, а затем используйте RCS для сохранения только изменяемых файлов. Начните с занесения в репозитарий всех файлов, которые вы собираетесь редактировать. Извлекайте их, чтобы вносить изменения, а затем возвращайте обратно после завершения правки. После занесения в репозитарий скопируйте рабочий файл на его положенное место в /etc. После этого у вас появится полная история изменений всех конфигурационных файлов, подвергавшихся правке.
Комментарий В следующем примере создается репозитарий RCS для двух программ Amavisdnew и Clam Anti-Virus. Каждая программа имеет собственный подкаталог в репозитарий. Все команды должны выполняться с правами root. # # # # # #
mkdir /rcs_configs cd /rcs_configs mkdir -p amavis/RCS mkdir -c clamav/RCS cd /amavns cp /etc/amavis/amavisd.conf amavisd.conf
18.5. Управление системными конфигурационными файлами в RCS
# ci -I amavisd.conf RCS/amavisd.conf.v < - - amavisd.conf enter description, terminated with single NOTE: T h i s i s NOT t h e l o g message!
295
' . ' o r end o f f i l e :
» original amavis config. used with clamav and postfix » initial revision: 1.1 done # со -1 amavisd.conf # vim amavisd.conf
Внесите изменения, сохраните и закройте файл, а затем снова занесите его в репозитарий: # ci -u amavisd.conf
Скопируйте свой рабочий файл в /etc: # ср amavisd.conf /etc/amavisd/amavisd.conf
Исходная копия и первая измененная версия надежно сохранены, и все готово к сохранению других версий. Вместо того чтобы создавать подкаталоги для каждой программы, все данные можно хранить в одном каталоге. Вы сами выбираете способ организации файлов. При использовании RCS легко запутаться и заблокировать файлы при занесении в репозитарий (вместо извлечения) или извлечь файл и забыть занести его обратно. Если вы допустите подобную ошибку, то при следующей попытке извлечения файла будет получено следующее сообщение: # со -1 amavisd.conf RCS/amavisd.conf,v •-> amavisd.conf со: RCS/amavisd.conf.v: multiple revisions locked by carla; please specify one
При указании конкретной версии вы все равно получите предупреждение: # со -1 -rl.4 amavisd.conf RCS/amavisd.conf.v •-> amavisd.conf revision 1.4 (locked) writable amavisd.conf exists; remove it? [ny](n): у со: RCS/amavisd.conf.v: warning: You now have 2 locks, done Самый простой выход заключается в том, чтобы открыть файл RCS (в данном примере RCS/amavisd.conf,v) и отредактировать его напрямую. Для этого сначала нужно разрешить запись в файл: # chmod 644 amavisd.conf,v
Затем отредактируйте заголовок. Найдите следующий фрагмент: head 1.4; access: symbols: locks carla:l.l carla:1.2; s t r i c t ; comment @$ @;
Удалите блокировки из секции locks. Фрагмент должен выглядеть так: head 1.4; access; symbols;
296
Глава 18. Управление версиями
locks;strict; comment @$ @; Сохраните и закройте файл. Не забудьте вернуть его в режим «только для чтения»: # chmod 444 amavisd.conf,v
См. также rcsintro(l), ci(l), co(l); домашняя страница RCS (http://www.cs.purdue.edu/homes/ trinkLe/RCS).
18.6. Использование CVS для создания однопользовательских локальных репозитариев Проблема Вы бы предпочли создать свой личный, локальный репозитарий на базе CVS, потому что вы собираетесь использовать CVS в крупном проекте и хотите привыкнуть к этой системе. А может быть, ваш личный репозитарий становится слишком сложным, и вы хотите использовать дополнительные возможности CVS, включая поддержку более сложной структуры каталогов и возможность одновременного извлечения нескольких файлов или целых каталогов.
Решение CVS легко масштабируется от хранения персональных данных до больших проектов. Процесс установки прост. Пакеты (как RPM, так и .deb) называются «cvs»; если вы предпочитаете собрать программу по исходным текстам, загрузите их с сайта https://www.cvshome.org/. После установки CVS создайте свой личный репозитарий следующими командами: $ mkdir -/cvsroot $ chmod -R 700 -/cvsroot $ cvs -d -/cvsroot init Теперь выберите каталог с файлами, которые должны храниться в репозитарий. Перейдите в этот каталог и импортируйте его в репозитарий: $ cd /scripts $ cvs -d -/cvsroot import scripts jenns_configs versionl
N scripts/useradd.txt
N scn'pts/postfix_ube.txt N scripts/1 ogparse.pl No conflicts created by this import
В процессе импорта запускается текстовый редактор по умолчанию со следующим текстом: CVS:
CVS: Enter log. Lines beginning with 'CVS:' are removed automatically
18.6. Использование CVS для создания однопользовательских репозитариев
297
CVS: CVS:
Введите описание проекта. Описание должно быть достаточно подробным, чтобы даже через полгода вы вспомнили, о чем идет речь. Чтобы извлечь файл для редактирования, необходимо сначала создать рабочий каталог, находящийся за пределами каталога с репозитарием CVS. Перейдите в рабочий каталог и извлеките файл: $ mkdir -/sandbox $ cd -/sandbox $ cvs -d -/cvsroot checkout scripts/postfix_ube.txt cvs checkout: Updating scripts U scripts/postfixube.txt
При извлечении файлов из репозитария CVS в рабочем каталоге создается локальный рабочий каталог, в котором выполняется вся непосредственная работа (так называемая «песочница»). При извлечении файлов из CVS в «песочнице» создается набор административных файлов CVS. Всегда работайте в «песочнице»; никогда не входите в репозитарий CVS для непосредственного редактирования файлов. Имя «песочницы» выбирается произвольно. В нашем примере извлеченный файл находится в каталоге scripts, который и является «песочницей». Перейдите в этот каталог, чтобы отредактировать файл: $ cd scripts $ vim postfix_ube.txt
Завершив редактирование файла, сохраните его обычным способом и верните в репозитарий CVS подкомандой commit: $ cvs commit cvs commit: Examining . /home/jenn/cvsroot/scripts/postfix_ube.txt.v <•- p o s t f i x _ u b e . t x t new revision: 1.2; previous revision: 1.1
Как и ранее, при этом запускается редактор по умолчанию, в котором вводится запись журнала с описанием изменений. Если вы находитесь в «песочнице» (-/sandbox/scripts в нашем примере), при выполнении операций извлечения и занесения файлов имя репозитария можно не указывать. J
,,
у.
Комментарии Синтаксис команд CVS:
cvs [глобальныепараметрь!]
команда \_ключи_коиандь1\ \_аргуненты_командь1\
Не жалейте времени на ввод записей журнала — вы еще не раз похвалите себя за это во время работы над проектом CVS. Имя корневого каталога CVS выбирается произвольно. Аргументы jenns_config и version_l определяют метку поставщика и номер версии соответственно. Возможно, вам эти аргументы не понадобятся, но они нужны для нормальной работы CVS. Метка поставщика обычно указывает, от кого были получены исходные файлы, а второй аргумент задает начальный номер версии проекта.
298
Глава 18. Управление версиями
Один каталог со всеми файлами и подкаталогами называется проектом. Каждый проект должен храниться в отдельном каталоге, даже если он состоит из одного файла. Из репозитария можно извлекать отдельные файлы, группы файлов и целые каталоги: $ cvs checkout scripts/postfixjjbe.txt $ cvs checkout scripts/postfix_ube.txt scripts/logparse.pl $ cvs checkout scripts
В отличие от RCS при извлечении файлов в CVS не устанавливается блокировка, предотвращающая одновременный доступ к ним со стороны других пользователей.
См. также Локальная документация (/usr/share/doc/cvs/html-info/cvs_l.html); домашняя страница CVS (https://www.cvshome.org/).
18.7. Включение новых файлов в репозитарий CVS Проблема Вы создали новый файл. Теперь его нужно поместить в репозитарий CVS.
Решение Выполните следующие команды из рабочего каталога («песочницы»). В данном примере новый файл называется newfile и располагается в «песочнице»: $ cvs update
cvs update: Updating . ? newfile $ cvs add newfile cvs -d /home/jenn/cvsroot add newfile cvs add: scheduling file 'newfile' for addition cvs add: use 'cvs commit' to add this file permanently $ cvs commit -m 'simple Ethereal filter for monitoring HTTPS traffic' newfile /home/jenn/cvsroot/scripts/newfile,v <-• newfile initial revision: 1.1
Комментарий При выполнении команды update вопросительным знаком отмечаются файлы, которые еще не были занесены в репозитарий CVS. Команда update синхронизирует изменения по направлению из репозитария в «песочницу» (а не наоборот!). Чтобы просмотреть список изменений без модификации «песочницы», используйте команду status: $ cvs status Команда commit -m показывает, как создать запись в журнале для одного файла из командной строки, без запуска текстового редактора.
18.8. Удаление файлов из репозитария CVS
299
Когда файл перейдет в такое состояние, которое вы захотите сохранить, занесите его в репозитарий. Не оставляйте файл лежать в «песочнице». В начале работы следует прежде всего обновить локальные копии командой update. Даже если вы являетесь единственным пользователем репозитария, «песочницу» все равно стоит синхронизировать с репозитарием, а в многопользовательских репозитариях синхронизация особенно важна — мелкие конфликты разрешаются гораздо проще, чем крупные, а при синхронизации конфликты возникают реже.
См. также А.18 update — Bring work tree in sync with repository (/usr/share/doc/cvs/html-info/ cvs_16.html); домашняя страница CVS (https://www.cvshome.org).
18.8. Удаление файлов из репозитария CVS Проблема Требуется удалить некоторые файлы из репозитария CVS.
Решение Удалите файлы из «песочницы», затем выполните команду cvs remove: $ rm badfile
$ cvs remove badfile cvs remove: scheduling 'badfile' for removal cvs remove: use 'cvs'commit' to remove this file permanently При следующем выполнении команды commit файл будет перемещен в специальный подкаталог с именем Attic. Тем самым сохраняется полная история всех операций с файлами и обеспечивается возможность восстановления файла, если позднее вы измените свое решение. Удаление файла из «песочницы» и репозитария можно выполнить одной командой: $ cvs remove -f badfile
Комментарий Вы не сможете удалить каталоги так, как удаляются файлы. Ключ -Р в командах update и checkout предотвращает копирование пустых каталогов в «песочницу». Как правило, этот режим включается по умолчанию в -/cvsrc (см. раздел 18.15). CVS никогда ничего не удаляет полностью. Более того, программа и не должна этого делать. Главной целью системы управления версиями является поддержание полной истории проекта.
См. также Раздел 18.15; домашняя страница CVS (https://www.cvshome.org).
300
Глава 18. Управление версиями
18.9. Создание общего репозитария CVS Проблема CVS хорошо подходит для отслеживания персональных файлов, но в реальном мире над проектами обычно одновременно работает много людей. Как создать репозитарий CVS, совместно используемый группой пользователей?
Решение Сначала создайте владельца и группу, которым будет принадлежать репозитарий. Затем создайте сам репозитарий: # groupadd cvsusers # useradd -g cvsusers -u 105 cvs # mkdir /cvsroot # chown -R cvs /cvsroot # chmod -R 770 /cvsroot # cvs -d /cvsroot init # chgrp cvsusers /cvsroot # chmod g+s /cvsroot Чтобы предоставить пользователям доступ к репозитарию, включите их в группу cvsusers. Любой пользователь из группы cvsusers сможет импортировать проект в репозитарий. В следующем примере в репозитарий включается проект techbook: $ cd /techbook t cvs -d /cvsroot import techbook cupsjiowto version_l
Владельцами нового проекта является пользователь, который его импортировал, и группа cvsusers: $ stat /cvsroot/techbook File: 'techbook' Size: 136 Blocks: 1 10 Block: 4096 directory Device: 306h/774d Inode: 69624 Links: 2 Access: (2775/drwxrwsr-x) Uid: ( 1000/ carla) Gid: (1005/cvsusers)
Комментарий Команды, приведенные в предыдущем подразделе, должны выполняться на сервере CVS. О работе с временным каталогом рассказано в разделе 18.11. Очень важно соблюдать приведенную последовательность команд для правильного назначения полномочий. Команда cvs init создает набор административных файлов с собственными разрешениями, которые не следует изменять (вы можете просмотреть их в подкаталоге CVSROOT). При создании системного пользователя (демона) не забудьте назначить соответствующий код UID (см. раздел 8.2).
18.10. Совместное использование репозитария группами пользователей
301
Задайте всем пользователям маску umask равную 007, чтобы устранить какойлибо внешний доступ к файлам в репозитарии CVS. Для этого достаточно включить следующую строку в файл -/.bashrc каждого пользователя: umask 007
Установка бита закрепления ограничивает возможность переименования или удаления файла и позволяет выполнять эти операции только владельцу, группе или суперпользователю.
См. также Локальная документация (/usr/share/doc/cvs/html-info/cvs-2.html); домашняя страница CVS (https://www.cvshome.org).
18.10. Совместное использование репозитария группами пользователей Проблема Имеется несколько рабочих групп, каждой из которых нужен собственный репозитарии С VS. Вы хотите разместить эти репозитарии внутри одного главного репозитария, чтобы упростить архивацию и административные операции. Требуется настроить файловые разрешения таким образом, чтобы пользователи не могли работать с чужими репозитариями.
Решение Последуйте рекомендациям из раздела 18.9 и создайте новый подкаталог для каждого отдельного репозитария. Задайте разрешения владельца и группы для отдельных репозитариев: # cd /3dgame # cvs -d /cvsroot import 3dgame best_game_ever version_l # chown gamers:gamegroup /cvsroot/3dgame
Комментарий Для каждого проекта можно создать отдельный репозитарии или же разместить все в одном корневом репозитарии CVS. Единый корневой репозитарии CVS упрощает архивацию, а наличие нескольких отдельных репозитариев упрощает настройку разрешений.
См. также Раздел 18.15; домашняя страница CVS (https://www.cvshome.org).
302
Глава 18. Управление версиями
18.11. Обращение к удаленному репозитарию CVS Проблема Сервер CVS настроен и готов к работе. Как защитить удаленный доступ к нему со стороны пользователей?
Решение Используйте OpenSSH — самый простой и защищенный метод доступа к репозитариям CVS как по локальной сети, так и по Интернету. Если правильно настроить OpenSSH с самого начала, то для обеспечения всего удаленного доступа будет достаточно одного подключения и метода аутентификации (настройка OpenSSH рассматривается в главе 17). Подключение через SSH настраивается следующим образом: 1. Установите и настройте OpenSSH на всех хостах (на сервере CVS и на всех хостах, которые к нему будут подключаться). 2. Запустите OpenSSH на сервере CVS в режиме демона. 3. Убедитесь в том, что у всех пользователей имеются учетные записи на сервере CVS. 4. Настройте ключи и протестируйте подключения SSH к серверу. 5. На компьютерах пользователей включите следующую строку в файлы -/.cvsrc (при необходимости создайте эти файлы): CVS_RSH SSH
Допустим, удаленный сервер CVS находится на хосте cvs.project.net. Подключение к репозитарию из родительского каталога локальной «песочницы» осуществляется так: $ cvs -d :ext:jenn@cvs.project.net:/cvsroot checkout scripts jenn@cvs.project.net's password: Если сервер CVS находится в локальной сети, достаточно указать имя или IP-адрес хоста: $ cvs -d :ext:jenn@cvs:/cvsroot checkout scripts
Комментарий OpenSSH поддерживает разные способы подключения к удаленным хостам. Вы можете использовать учетные записи или (что проще) проводить аутентификацию при помощи парных ключей (открытого и закрытого). Программа keychain обеспечит удобную и безопасную аутентификацию с использованием ключей, так что вам не придется вводить пароль (см. раздел 17.7). OpenSSH шифрует весь обмен данными — как при подключении, так и при пересылке данных. Механизм подключения легко реализуется, а использование одного механизма для доступа как к локальной сети, так и к Интернету упрощает администрирование сервера CVS.
18.12. Обновление рабочих файлов в CVS
303
См. также Раздел 17.7; домашняя страница CVS (https://www.cvshome.org).
18.12. Обновление рабочих файлов в CVS Проблема Вы работаете над общим проектом и хотите быть уверены в том, что первое извлечение файлов из репозитария обновляет все содержимое «песочницы» с учетом изменений, внесенных другими пользователями.
Решение В начале дня выполните из «песочницы» команду update с ключом -n (Not really): $ cvs -n update -dP
cvs update: Updating cvs update: Updating CVSROOT cvs update: Updating project M project/oidfile ? project/oldfile
Команда показывает, какие файлы различаются, и выводит информацию о состоянии каждого файла. Чтобы синхронизировать «песочницу» с репозитарием, выполните команду заново без ключа -п. Команда выполнит слияние (или попытается выполнить) двух наборов файлов. Для получения расширенной информации выполните следующую команду: $ cvs diff
Команда выводит построчную информацию об изменениях.
Комментарий Регулярное выполнение команды update обеспечивает синхронизацию локальных рабочих копий с копиями из репозитария. Если вас раздражают изменения со стороны других пользователей (что является не недостатком CVS, а следствием плохого управления проектом), вы можете всегда сначала просмотреть их. Помните: когда в ходе редактирования файл достигает состояния, которое бы вам хотелось сохранить, занесите его в репозитарий. Не оставляйте его лежать в «песочнице» — система CVS существует как раз для того, чтобы хранить многие версии одного файла. Возможные состояния файла: LJ — файл был успешно обновлен; А — файл был добавлен, но изменения не были закреплены; R — файл был удален, по изменения не были закреплены; М — файл в репозитарий отличался от копии в «песочнице», и изменения были успешно объединены; С — между копией в репозитарий и копией в «песочнице» существует конфликт, требующий вмешательства со стороны пользователя;
304
Глава 18. Управление версиями
? — файл находится в рабочем каталоге, но отсутствует в репозитарии, и CVS не знает, что с ним делать. Обычно это происходит при создании нового файла, еще не включенного в CVS.
См. также Раздел 18.7; домашняя страница CVS (http://www.cvshome.org); раздел 18.8.
18.13. Выборка конкретных старых версий из CVS Проблема Требуется извлечь из репозитария конкретную старую версию файла: конфигурационный сценарий, к которому вы бы хотели вернуться, прежнюю версию программы и т. д.
Решение Выполните из «песочницы» команду cvs Log, чтобы получить список всех доступных версий файла. Затем восстановите нужную версию командой $ cvs update -г 1.1 newerfile U newerfile Команда загружает статическую, неизменяемую версию файла. Статическая метка (sticky tag) отображается в результатах команды cvs status; именно она помечает файл как статический и фиксирует его определенной версией: i cvs status newerfile File: newerfile Status: Up-to-date Working revision: 1.1 Sun Aug 1 07:47:17 2003 Repository Revision: 1.1 /home/foober/cvsroot/project/newerfile,v
Sticky tag: Sticky Date:
Sticky Options:
1.1 (none) -kkv
На этой стадии файл может использоваться для различных целей: для сравнения, копирования фрагментов и т. д. Не пытайтесь редактировать его напрямую, поскольку это нарушит историю изменений. Если вы создадите копию прежней версии, из нее необходимо удалить статическую метку. Откройте копию в текстовом редакторе и измените «Sticky Tag: 1.1» на «Sticky Tag:(none)». После завершения правки закрепите изменения обычным способом: $ cvs commit
См. также Домашняя страница CVS (http://www.cvshome.org).
18.14. Построение анонимного репозитария CVS
305
18.14. Построение анонимного репозитария CVS •
Проблема Требуется создать общедоступный репозитарий CVS, чтобы любой желающий мог загрузить хранящуюся в нем информацию, но при этом анонимным пользователям должен быть разрешен доступ только к подкаталогам, но не к вышестоящим каталогам; также им должно быть разрешено только чтение оглавления каталога и файлов в нем, но не запись.
Решение Настройте CVS Pserver. Вам понадобится cvsd, рабочий сервер CVS и OpenSSH на сервере CVS в режиме демона. Программа cvsd — дополнение для запуска CVS в режиме Pserver — существует в тестовой версии для Debian, а также в виде tar-архива с исходными текстами. На момент написания книги единственные доступные пакеты RPM были слишком старыми (версия .6-2). Раздел написан для версии 1.0.2, так что если вам не удастся найти более новый пакет RPM, постройте программу по исходным текстам. Исходные тексты (а также файлы .deb) можно загрузить с домашней страницы cvsd (http://tiefighter.et.tude.nl/~arthur/cvsd). Установка по исходным текстам: $ ./configure --prefix=/usr --sysconfdir=/etc # make install
Создайте пользователя и группу cvsd: # groupadd cvsd
# useradd -d /cvs/home -s /bin/false -c "cvs pserver daemon" -g cvsd -u 110 cvsd Затем создайте корневой каталог репозитария и «песочницу»1 (подкаталог пустого каталога): # mkdir /cvs # cd /cvs # cvsd-buildroot /cvs
Назначьте их владельцами пользователя и группу cvsd и задайте разрешения: # chown -R cvsd:cvsd /cvs # chmod 775 /cvs Инициализируйте новый репозитарий cvsd: # cvs -d /cvs/home init
Внесите в /etc/cvsd/cvsd.conf следующие изменения: о UID-cvsd; О GID-cvsd; chroot jail. — Примеч. ред.
306
Глава 18. Управление версиями
О Umask-027; О RootJaiL — корневой каталог репозитария CVS (в нашем примере/cvs); О отредактируйте одну из записей Repos так, чтобы в ней был указан новый корневой каталог вашего репозитария (/home). Откройте анонимный доступ к репозитарию. Создайте с правами root каталог«песочницу» и выполните команду checkout для каталога CVSROOT: # mkdir /sandbox # cd /sandbox # cvs -d /cvs/home checkout CVSROOT # cd CVSROOT Создайте файл CVSROOT/readers и включите в него пользователя guest (создайте в файле отдельную строку, состоящую из слова «guest»). Проследите за тем, чтобы файл завершался парой пустых строк. Затем занесите файл в репозитарий командами add и update: # cvs -d /cvs/home update # cvs -d /cvs/home add readers # cd /sandbox # cvs -d /cvs/home commit -m 'pserver guest access' CVSROOT/readers Наконец, назначьте пользователю guest пустой пароль: # cvsd-passwd /cvs/home guest He создавайте пароль; просто нажимайте Enter, пока запрос не исчезнет. Теперь запустите cvsd и подключитесь как обычный пользователь: # /etc/init.d/cvsd start $ cvs -d:pserver:guest:@localhost:/home login Logging in to :pserver:guest@localhost:2401/home
Если после guest следует двоеточие, команда не будет запрашивать пустой пароль. Помните, что вместо /cvs/home следует указывать /home.
Комментарий Для правильного назначения разрешений очень важно выполнить все действия в указанном порядке. Cvsd должна принадлежать файловая система внутри /cvs, но не каталог CVSROOT. Новый общедоступный репозитарий заполняется обычным способом. Включите в группу cvsd авторизованных пользователей, которые могут импортировать файлы проекта локально или через SSH. Не используйте CVS Pserver ни для каких целей, кроме анонимного общего доступа, и никогда не разрешайте заносить файлы в репозитарий через Pserver. Аутентификация проводится на уровне простого текста. Чтобы полностью исключить запись через Pserver, создайте пустой файл CVSROOT/writers.
См. также Файлы Readme и FAQ в архиве исходных текстов; домашняя страница cvsd (http://tiefighter.et.tude.nl/~arthur/cvsd); домашняя страница CVS (https:// www.cvshome.org).
18.15. Настройка среды CVS
307
18.15. Настройка среды CVS Проблема Требуется изменить параметры рабочей среды CVS: редактор по умолчанию, пути к файлам, репозитарий по умолчанию, некоторые параметры командной строки. Короче говоря, вы хотите настроить рабочую среду так, чтобы вам было приятно работать.
Решение Создайте файл .cvsrc и сохраните его в домашнем каталоге. Каждый пользователь может сделать это, чтобы настроить рабочую среду CVS. В следующем примере задаются базовые параметры по умолчанию: cvs -Т /tmp cvs -d /cvsroot cvs -e nano update -dP checkout -P cvs -z3 d1ff -c Настройка совершенно не затрагивает сервер CVS и относится только к клиентской стороне.
Комментарий В документации CVS часто предлагается задать переменные среды CVS в системном профиле (например, в -/.bashrc). Вариант с файлом -/.cvsrc обычно предпочтительнее, потому что он лучше переносится и проще настраивается. Файл -/.cvsrc, если он присутствует в системе, переопределяет все переменные окружения, заданные в -/.bashrc. Смысл приведенного фрагмента -/.cvsrc: О cvs -T/tmp — назначение временного каталога; О cvs -d /cvsroot — путь к репозитарию по умолчанию, чтобы вам не приходилось вводить команду cvs -d <cvsserver>. Экономит немного времени при импортировании новых проектов; после инициализации новой «песочницы» задавать репозитарий все равно не нужно; О cvs -e nano — редактор по умолчанию; О update -dP — новые каталоги заносятся в репозитарий только в том случае, если они не являются пустыми; О checkout -P — пустые каталоги не заносятся в репозитарий; О cvs -z3 — выбор уровня сжатия; допустимые значения — от 1 до 9. Учтите, что более высокий уровень сжатия повышает нагрузку на сервер CVS и может вызвать нарекания со стороны администратора сервера; О diff -с — контекстное форматирование выходных данных diff (упрощает чтение).
308
Глава 18. Управление версиями
См. также cvs(l); локальная документация (/usr/share/doc/cvs/html-info/cvs_16.html и /usr/ share/doc/cvs/html-info/cvs_19.html). •
18.16. Вычисление объема репозитария CVS Проблема Требуется узнать, сколько дискового пространства выделить для репозитария CVS для его размещения в специальном разделе.
Решение Простое эмпирическое правило: объем выделяемой области должен в 10 раз превосходить предполагаемый окончательный объем файлов проекта. Если над проектом работает большое количество пользователей, дисковое пространство расходуется очень быстро. Впрочем, самое надежное правило — «чем больше, тем лучше». Репозитарий лучше всего разместить в файловой системе, уже изолированной в собственном разделе (например, /var или /home). Это упростит архивацию и изолирует репозитарий от корневой файловой системы, что вообще желательно для файлов данных. Вы также можете создать каталог верхнего уровня в специальном разделе (например, /cvsroot) для упрощения поиска.
•
Глава 19 NTP
19.1. Введение Точный отсчет времени на отдельном компьютере или в локальной сети важен по многим причинам: он обеспечивает точную пометку времени в журналах и базах данных, а также обеспечивает запуск пакетных заданий и других автоматизированных процессов в нужный момент. Что еще важнее, поддержание точного времени позволяет синхронизировать работу всех серверов и рабочих станций. Linux содержит великое мноисество утилит для работы с датой и временем: htpdate, hwdock.sh, date, 822-date, tzselect, tzsetup, vcstime, uptime, zdump, ddate, rdate, ctime и т. д. Раньше приходилось запускать hwdock.sh, rdate или ntpdate во время загрузки системы или оформлять их запуск в задания сгоп для периодического обновления. С появлением NTP (Network Time Protocol) все это стало лишним. Более того, все утилиты, настроенные на автоматический запуск (из файлов rc*.d или сгоп), лучше отключить и поручить все наблюдение за временем ntp... С одним исключением: для больших корректировок по-прежнему хорошо подходит ntpdate. Если системное время сбилось на 20 или 30 минут, то для его исправления ntp понадобится несколько часов или даже дней, тогда как ntpdate исправит ситуацию мгновенно. Команда ntpd -g вроде бы должна заменить ntpdate, но она плохо работает для смещений более часа. Если системное время отличается от истинного на несколько часов, в документации ntp рекомендуется внести изменения вручную. Если вас это устраивает — хорошо; но в этой главе будет показано, как поручить всю работу компьютерам. В Linux протокол NTP реализован в виде демона ntpd. В сущности, система работает по принципу «настроил и забыл»: вы один раз настраиваете и запускаете ntpd, а в будущем только периодически проверяете правильность системного времени. По правилам сетевого этикета один хост локальной сети синхронизируется с группой внешних серверов времени, а затем обслуживает всю локальную сеть. При такой схеме снимается лишняя нагрузка на общедоступные серверы времени, а хосты локальной сети синхронизируются друг с другом.
310
Глава 19. NTP
Когда-то администратору приходилось выбирать общедоступные серверы времени из списка http://www.eecis.udeL.edu/~mills/ntp/servers.html. Тем не менее изза злоупотреблений и несоблюдения политики доступа был создан сайт http:// pool.ntp.org для автоматического распределения нагрузки на серверы.
19.2. Настройка локального сервера времени Проблема Требуется создать локальный сервер времени. Он синхронизируется с общедоступным сервером времени, а клиенты локальной сети связываются с локальным компьютером для выполнения синхронизации. Компьютер, выполняющий функции локального сервера времени, постоянно подключен к Интернету.
Решение Сначала установите или обновите поддержку NTP на компьютере, который будет выполнять функции сервера времени для вашей локальной сети. Заодно стоит установить ntpdate. Затем остановите демона ntpd, если он работает в системе: # /etc/init.d/ntpd stop
В Debian следует использовать команду # /etc/init.d/ntp-server stop Включите следующий фрагмент в файл /etc/ntp.conf и создайте служебные файлы, если они еще не существуют; их владельцем должен быть root (chmod 644): #/etc/ntp.conf driftfile /etc/ntp.drift logfile /var/log/ntp.log server pool.ntp.org server pool.ntp.org server pool.ntp.org
Произведите начальную корректировку времени командой ntupdate: # ntpdate pool.ntp.org
Затем запустите ntpd: # /etc/init.d/ntpd start
В Debian следует использовать команду # /etc/init.d/ntp-server start
Команда ntpq выводит информацию о том, к каким серверам производится подключение: # ntpq -p
remote refid st t when poll reach delay offset jitter
+clock.fmt.he.ne .GPS. 1 u 37 64 377 105.562 26.771 2.539 +dewley.1ib.ci.ph reaper.twc.weat 2 u 25 64 377 398.666 -30.285 51.555 *c1ock.sjc.he.ne .CDMA. 1 u 21 64 377 98.269 15.298 4.000
19.3. Подключение к локальному серверу времени
311
Будьте терпеливы: список серверов появится лишь через несколько минут, а до выполнения первой корректировки пройдет до 30 минут. Префиксы * и + означают, что подключения были выполнены успешно и в настоящее время происходит синхронизация. ВНИМАНИЕ Если Б системе работают базы данных, проконсультируйтесь с администраторами баз данных перед внесением серьезных изменений в системное время. Масштабные, непредвиденные изменения обычно плохо отражаются на работе баз данных. Возможно, будет лучше ограничиться запуском демона ntpd и предоставить ему вносить изменения в обычном пошаговом режиме.
Комментарий Проследите за тем, чтобы устанавливаемый пакет RPM назывался ntp, а не xntp. Пользователям Debian понадобятся пакеты ntp-simple, ntp-doc и ntp-server. Демон ntpd вносит небольшие, пошаговые изменения в течение некоторого времени. В обычных условиях регулировка системного времени займет часы и даже дни, в зависимости от величины отклонения. Если системное время отличается от истинного более чем на 60 минут, то для внесения начальных изменений быстрее всего воспользоваться ntpdate. Если в системе работает ntpd, ntpdate не запустится. Ответственные за сопровождение на сайте ntp.org пытаются объявить программу ntpdate устаревшей. Они утверждают, что команда «мгновенного обновления» ntpd -g делает то же самое. К сожалению, при отклонениях свыше 60 минут эта команда работает ничуть не быстрее, чем ntpd, поэтому программа ntpdate остается актуальной. Трехкратное повторение одной записи (server pool.ntp.org) в файле ntp.conf означает трехкратное обращение к пулу DNS, чтобы у вас не было проблем с временной недоступностью серверов. Сайт pool.ntp.org обеспечивает циклическую смену DNS серверов времени, участвующих в проекте. В разделе 19.5 рассказано о других пулах NTP и о том, как обеспечить максимальное быстродействие.
См. также Локальная документация (/usr/share/doc/htp-doc/htmL) или документация в Интернете (http://www.ntp.org/documentation.html); домашняя страница проекта ntp.org (http://www.pooL.ntp.org); веб-сайт ntp.org (http://www.ntp.org/); архивы группы Usenet сотр.protocols.time.ntp.
19.3. Подключение к локальному серверу времени Проблема Вам надоело видеть разное время на каждом компьютере сети и вы создали локальный сервер времени — но как организовать подключение к нему клиентов?
312
Глава 19. NTP
Решение Установите или обновите ntp на клиентских компьютерах. Остановите демона ntpd, если он работает в системе: # /etc/init.d/ntpd stop
В Debian следует использовать команду # /etc/init.d/ntp-server stop
Отредактируйте файл /etc/ntp.conf и включите в него ссылку на локальный сервер времени: #/ etc/ntp.conf driftfile /etc/ntp.drift logfile /var/log/ntp.logfriftfile # Имена хостов или IP-адреса server 192.168.1.101 Также можно включить резервную запись на случай временной недоступности сервера имен: # Stratum 10 означает низкий приоритет server 127.127.1.0 fudge 127.127.1.0 stratum 10 Ntp будет пытаться поддерживать время на основании старых данных до тех пор, пока сервер снова не станет доступным. Теперь запустите ntpdate с указанием локального сервера: # ntpdate 192.168.1.101
Запустите ntpd: # /etc/init.d/ntpd start В Debian используется команда # /etc/init.d/ntp-server start
Комментарий На клиентах Windows следует использовать бесплатного клиента SNTP (Simple Network Time Protocol) Automachron. Программа работает во всех версиях Windows и легко настраивается. Ее можно загрузить по адресу http://www.oneguycoding.com/ automachron.
См. также Раздел 19.4; локальная документация (/usr/share/doc/htp-doc/html) или документация в Интернете (http://www.ntp.org/documentation.htmL); домашняя страница ntp.org (http://pool.ntp.org); архивы группы Usenet сотр.protocols.time.ntp.
19.4. Управление доступом Проблема Нужно проследить за тем, чтобы локальные клиенты выполняли функции только клиентов, но не серверов ntp. Они должны пользоваться только услугами службы времени и только от указанных серверов.
19.4. Управление доступом
313
Решение Включите правила управления доступом в /etc/ntp.conf или создайте пару правил iptables на брандмауэре клиента. Чтобы использовать механизм управления доступом ntp, включите следующие строки в /etc/ntp.conf: # Политика доступа по умолчанию # Запретить весь трафик ntp, который не был специально разрешен restrict default ignore restrict 192.168.1.101 # Локальный хост является доверенный r e s t r i c t 127.0.0.0 mask 255.0.0.0
Не забудьте перезапустить ntpd после внесения изменений в ntp.conf. Другой вариант — настройка правил брандмауэра iptables. Если на клиентском компьютере работает iptables, добавьте следующие правила: iptables -A INPUT -p udp --dport 123 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p udp --dport 123 -j REJECT Первое правило принимает все ответы на отправленные пакеты ntp, а второе отклоняет все остальные пакеты. Таким образом, попытка подключения со стороны другого хоста будет заблокирована, а ответы на запросы клиента будут успешно обработаны.
Комментарии Некоторые из параметров конфигурации ntp.conf: О peer [хост или IP] — указанный хост опрашивается в симметричном активном режиме, то есть хосты синхронизируются друг по другу. Параметр никогда не используется для общедоступных серверов времени; О server [хост или IP] — указанный сервер опрашивается в клиентском режиме (синхронизация выполняется только на клиентском компьютере); О restrict — определение ограничений для конкретных хостов с переопределением значений по умолчанию; О ignore — игнорирование всех пакетов ntp; О nomodify — запрет изменения конфигурации на стадии выполнения. Запросы, возвращающие информацию, разрешены; О пореег — запрет одноранговой синхронизации. Это означает, что синхронизация обеспечивается только серверами, указанными в директиве server, а другие хосты не могут использовать этот компьютер как сервер времени; О notrap — запрет на перехват управляющих сообщений режима 6 (фактически запрет remote logging); О noquery — игнорирование всех информационных запросов NTP режимов 6 и 7. Управление доступом используется, прежде всего, для того, чтобы клиенты не брали на себя функции серверов, а также для поддержания порядка в сети.
314
Глава 19. NTP
См. также Локальная документация (/usr/share/doc/htp-doc/html) или документация в Интернете (http://www.ntp.org/documentation.htmL); домашняя страница проекта pool.ntp.org (http://www.pool.ntp.org); веб-сайт ntp.org (http://www.ntp.org/); архивы группы Usenet comp.protocols.time.ntp.
19.5. Выбор пула NTP Проблема Похоже, при подключении к глобальному пулу NTP возникает риск использования слишком удаленных серверов, что снижает точность синхронизации. Требуется узнать, какие еще существуют пулы NTP.
Решение Пулы NTP делятся на три класса: О Глобальный пул: •
pool.ntp.org.
О Региональные пулы: •
europe.pooL.ntp.org;
• north-america.pooL.ntp.org; •
oceania.pooL.ntp.org;
•
asia.pooL.ntp.org.
о Пулы стран •
us.pool.ntp.org;
•
de.pooL.ntp.org;
•
fr.pooL.ntp.org.
Единого списка пулов для стран еще не существует. Чтобы узнать, существует ли такой пул для вашей страны, воспользуйтесь командой ping: $ ping ru.pool.ntp.org PING ru.pool.ntp.org (195.230.70.112): 56 data bytes 64 bytes from 195.230.70.112: icmp_seq=O ttl=49 time=240.8 ms Список кодов стран приведен на странице http://www.iana.org/cctLd/cctLd-whois.htm. Как правило, пул следует использовать только в том случае, если он содержит не менее трех серверов. Количество серверов проверяется командой $ dig ru.pool.ntp.org Команда ping также позволяет составить представление о скорости отклика. Затем несколько раз выполните команду traceroute, обращая внимание на количество хопов и возникающие тайм-ауты.
19.6. Подключение к серверу времени при непостоянном подключении
315
Комментарий Пулы NTP хороши тем, что они выполняют всю работу за вас. Стоит один раз настроить систему и возиться с ней в будущем уже не придется. Если вы располагаете хорошим постоянным подключением к Интернету и хотите стать частью пула, обращайтесь за подробностями по адресу http://www.pool.ntp.org. Чем больше серверов времени входит в пул, тем меньше нагрузка на каждый отдельный сервер.
См. также Локальная документация (/usr/share/doc/htp-doc/html) или документация в Интернете (http://www.ntp.org/documentation.html); домашняя страница проекта pool.ntp.org (http://www.pool.ntp.org); веб-сайт ntp.org (http://www.ntp.org/); архивы группы Usenet сотр.protocols.time.ntp.
19.6. Подключение к серверу времени •
а
ш
а
при непостоянном подключении Проблема У вас нет постоянного подключения к Интернету — возможно, вы продолжаете пользоваться модемным подключением, взяли ноутбук в поездку и т. д. Как провести синхронизацию по серверу NTP?
Решение Установите ntp и ntpdate. Остановите демона ntpd, если он работает в настоящий момент. Откройте файл /etc/ntp.conf и создайте служебные файлы, если они не существуют (владелец — root, разрешения 644): #/etc/ntp.conf driftfile /etc/ntp.drift logfile /var/log/ntp.log server pool.ntp.org server pool.ntp.org server pool.ntp.org Пользователи Debian (или любой системы, в которой сценарии PPi размещая в каталоге/etc/ppp/ip-up.d/) могут скопирс ются скопировать следующий cm прий: #! /bin/bash /bin/bash # Сценарий ntp с модемным подключением для Debian 1 /usr/sbin/ntupdate pool.ntp.org if [ -х /etc/init.d/ntp-server ]; then /etc/init.d/ntp-server restart fi Владельцем сценария должен быть root (chmod 744). Сценарий будет выполняться при каждом запуске РРР.
316
Глава 19. NTP
В Red Hat и Fedora отредактируйте или создайте сценарий/etc/ppp/ip-up.local, включив в него следующие строки: #! /bin/bash
# В Rad Hat и Fedora добавьте следующий фрагмент # в /etc/ppp/ip-up.iocal /usr/sbin/ntupdate pool.ntp.org i f [ -х /etc/init.d/ntpd ] : then /etc/init.d/ntpd restart fi
Ntupdate скорректирует время в первую минуту или две после подключения. Затем демон ntp продолжит работу в фоновом режиме: 11 Feb 11:38:18 ntupdate[6796]: adjust tine server 163.1.87.28 offset -0.01803 sec ntpdate is updating the time Starting NTP server: ntpd. Если сервер удаленного доступа обслуживает локальную сеть Ethernet, настройте клиентские компьютеры так, как описано в разделе 19.3.
Решение Сценарии легко адаптируются для компьютеров, подключающихся к частной сети с локальным сервером времени. В сценарии РРР свяжите вызов ntupdate с локальным сервером и включите ссылку на локальный сервер в/etc/ntp.conf.
См. также Раздел 19.4; документация по дистрибутиву; локальная документация (/usr/share/doc/ htp-doc/html) или документация в Интернете (http://www.ntp.org/documentation.html); домашняя страница проекта pool.ntp.org (http://www.pool.ntp.org); веб-сайт ntp.org (http://www.ntp.org/); архивы группы Usenet comp.protocols.time.ntp.
19.7. Настройка нескольких локальных серверов времени Проблема Локальный сервер времени перегружен, поэтому в сети необходимо установить дополнительные серверы. Дополнительные серверы должны всегда синхронизироваться друг с другом.
Решение В следующем примере два внутренних сервера, serverl и server2, синхронизируются с us.pool.ntp.org и друг с другом: # /etc/ntp.conf для serverl driftfile /etc/ntp.drift
19.8. Аутентификация с использованием ключей NTP
317
l o g f i l e /var/log/ntp.log # Политика доступа по умолчанию # Запретить весь трафик ntp, который не был специально разрешен r e s t r i c t default ignore # Список серверов ntp server pool.ntp.org server poo1.ntp.org server pool.ntp.org peer server2 # Разрешить синхронизацию с другим сервером # Запретить изменения конфигурации во время выполнения # Запретить remote logging r e s t r i c t server2 nomodify notrap # Локальный хост не ограничивается r e s t r i c t 127.0.0.0 mask 255.0.0.0
Файл /etc/ntp.conf для сервера server2 выглядит идентично, но ссылки на server2 заменяются ссылками на serverl. Настройте клиентов в локальной сети так, как описано в разделе 23.2: # Файл /etc/ntp.conf для клиентов drift f i l e /etc/ntp. d r i f t logfile /var/log/ntp.log server serverl server server2
Комментарий Вы можете создать сколько угодно дополнительных серверов; даже рабочие станции могут синхронизироваться друг но другу. Ради собственного спокойствия сохраняйте конфигурацию как можно более простой. Не пытайтесь использовать одноранговую синхронизацию с общедоступными серверами времени! У них нет причин доверять вашим серверам и незачем попусту раздражать системных администраторов.
См. также Документация по дистрибутиву; локальная документация (/usr/share/doc/htp-doc/ html) или документация в Интернете (http://www.ntp.org/documentation.htmL); вебсайт ntp.org (http://www.ntp.org/); архивы группы Usenet comp.protocols.time.ntp.
19.8. Аутентификация с использованием ключей NTP Проблема Требуется организовать некоторую разновидность аутентификации на локальных серверах. Случаи использования уязвимостей NTP злоумышленников встречаются
318
Глава 19. NTP
редко, но вам хотелось бы каким-то образом убедиться в том, что клиенты и серверы — именно те, за кого они себя выдают.
Решение Воспользуйтесь встроенной в ntp схемой аутентификации ntpkeys. Начните с настройки сервера (в нашем примере serverl): # /etc/ntp.conf crypto pw seekitword keysdir /etc/ntp/keys Пароли хранятся в текстовом виде, поэтому для файла ntp.conf необходимо установить права chmod 600. Создайте ключ на сервере serverl: # ntp-keygen -T -I -p seekritword
Скопируйте сгенерированный файл ntpkey_IFFpat_serverl.4558615255 в файлы /etc/ntp всех клиентов serverl (временная пометка будет выглядеть иначе). Ключ является секретным, поэтому пересылка должна быть защищена. Вполне подойдет обычная дискета (не забудьте надежно сохранить ее после завершения копирования). Переходите к настройке клиентов. Для начала создайте две символьные ссылки на новый ключ: # In -s ntpkey_ IFFpat_serverl.4558615255 ntpkey_iff_serverl # In -s ntpkey_ IFFpat_serverl.4558615255 ntpkey_iff_clientl Отредактируйте запись сервера в файле /etc/ntp.conf клиента, добавив в нее ключевое слово autokey: server serverl autokey Перезапустите ntpd на всех компьютерах-участниках и займитесь другими делами. Чтобы новая схема аутентификации синхронизировалась и заработала, клиентам и серверам понадобится некоторое время. Через час или два все будет нормально.
Комментарий Ключи ntp_keygen: О -Т — сгенерировать доверенный сертификат; О -I — применение схемы идентификации IFF с заменой существующих файлов ключей; О -р — назначение пароля. Для использования аутентификации на общедоступных серверах времени необходимо: 1. Найти общедоступные серверы, поддерживающие аутентификацию. 2. Включить в ntp.conf данные конкретных серверов (вместо пулов ntp). Текущий список общедоступных серверов времени находится по адресу http:// www.eecis.udeL.edu/~miLls/ntp/servers.htmL.
19.8. Аутентификация с использованием ключей NTP
319
На практике вероятность использования слабостей ntp невелика. Даже если сервер злоумышленника выдаст себя за общедоступный сервер времени и начнет передавать неверное время, вы отчасти защищены: ntp вносит небольшие изменения, а при синхронизации используется целый пул серверов, поэтому любые ошибки (намеренные или случайные) быстро исправляются. СМш Т Э К Ж 6 Раздел «Ntp-keygen — Generate Public and Private Keys» описания NTP в локальной документации (/usr/share/doc/htp-doc/html) или в Интернете (http://www.ntp.org/ documentation.html); веб-сайт ntp.org (http://www.ntp.org/); архивы группы Usenet сотр.protocols.time. ntp.
нВ Л
•
'.01!
i
Глава 20 Почтовый сервер Postfix
1
20.1. Введение В мире Linux существует много превосходных программ для работы с почтой. Четырьмя лучшими почтовыми агентами (МТА, Mail Transfer Agent) считаются Sendmail, Exim, qmail и Postfix. Настоящая глава посвящена Postfix. Как и многие почтовые агенты поколения, следующего после Sendmail, программа Postfix изначально проектировалась с расчетом на надежность и безопасность. Она отлично масштабируется от одного пользователя, желающего лучше управлять своей личной перепиской, до потребностей крупнейших поставщиков почтовых услуг. Для начала разберемся с терминологией. О МТА — почтовый агент (Mail Transfer Agent), то есть почтовая программа, пересылающая электронную почту между серверами. Почтовый агент должен поддерживать SMTP. О SMTP — протокол пересылки почты (Simple Mail Transfer Protocol), используемый при пересылке сообщений между почтовыми серверами. О MUA — пользовательский агент (Mail User Agent), также называемый «почтовым клиентом», то есть программа для создания, отправки и получения электронной почты. Примеры MUA — Mutt, Pine, Kmail, Evolution и Balsa. MUA может принимать почту из локального каталога или с удаленного почтового сервера с использованием POP и ШАР. О MDA — агент доставки (Mail Delivery Agent), посредник между МТА и MUA. Популярные MDA — Procmail и Fetchmail. Присутствие MDA не является обязательным; MDA всего лишь обеспечивает такие дополнительные возможности, как фильтрация, сортировка и автоответ. О POP — почтовый протокол (Post Office Protocol), используемый для пересылки сообщений с сервера в почтовый ящик пользователя. Сервер POP прост в настройке и не требует высокопроизводительного оборудования. О IM АР — почтовый протокол (Interactive Message Access Protocol). Сервер IM АР требует больших объемов оперативной памяти и дискового пространства.
20.2. Построение почтового сервера РОРЗ
321
О TLS — (Transport Layer Security) результат эволюции SSL (Secure Sockets Layer). Обеспечивает шифрование транспорта для подключений с аутентификацией SASL. О SASL — (Simple Authentication and Security Layer) механизм аутентификации пользователей. SASL обеспечивает аутентификацию, a TLS обеспечивает шифрование передачи аутентификационных данных. Официальные порты различных почтовых протоколов: о tcp/25-SMTP; О tcp/110-РОРЗ; О tcp/995 - РОРЗ через SSL; О tcp/143-IMAP; О tcp/993 - ШАР через SSL. Существуют разные подходы к построению почтового сервера в Linux. Многие администраторы выбирают модульный подход и строят сервер из набора специализированных компонентов (именно этот вариант будет рассматриваться в настоящей главе). Другой подход основан на использовании пакета Courier, объединяющего МТА, РОРЗ, IMAP и менеджер списков рассылки. Наконец, вы можете приобрести дистрибутив, в котором все компоненты собраны воедино (скажем, SuSE OpenExchange).
20.2. Построение почтового сервера РОРЗ Проблема
•
Требуется настроить почтовый сервер РОРЗ — ничего особенного, базовый сервер пересылки интернет-почты для одного домена, с поддержкой TLS/SSL для защиты подключений.
Решение Потребуются следующие компоненты: О Postfix; О Courier-IMAP (поддержка как РОРЗ, так и ШАР); О OpenSSL; О демон famd (File Alteration Monitor Daemon). ПРИМЕЧАНИЕ Инструкции для Debian приведены в разделе 20.3.
Начните с установки или обновления OpenSSL и famd. Затем удалите все установленные почтовые агенты и серверы POP/ШАР. Начните с поиска Sendmail, поскольку эта программа часто устанавливается по умолчанию. Не бойтесь разрывать зависимости, они будут обслуживаться Postfix.
322
Глава 20. Почтовый сервер Postfix
Остановите все процессы, принадлежащие старому почтовому агенту: $ ps ах | grep sendmail root 10204 0.0 0.7 5296 1980 ? S 19:27 0:00 sendmail:accepti $ su # kill 10204 Установите Postfix. Если программа строится по исходным текстам, не забудьте включить поддержку SASL (см. файл SASL_README в tar-архиве). После установки Postfix создайте резервную копию /etc/postfix/main.cf: # ср /etc/postfix/main.cf /etc/postfix/main.cf-old Сотрите все содержимое оригинала и скопируйте следующий фрагмент. Используйте пути и имена хостов/доменов, относящиеся к вашей системе. command_directory • /usr/sbin mai1_owner • postfix defaultprivs = nobody # Доменное имя mydomain = tuxcomputing.com # Полное имя хоста
myhostname = windbag.tuxcomputing.com myorigin = $mydomain aliasjnaps = hash:/etc/aliases alias_database = hash:/etc/aliases inetinterface = all mydestination • $myhostname, local host.Smydomain $mydomain mynetworksstyle = subnet homejnailbox . Maildir/ mai4_spoo1_directory = /var/mail mtpd_banner = $myhostname ESMTP $mai1_name mailboxsizejimit = 0 recipientdelimiter • +
Определите псевдонимы для root и postmaster в /etc/aliases: # Описание формата - см. man 5 aliases root: foober@test.net postmaster:root
Создайте базу данных псевдонимов: # newaliases
и запустите встроенную программу проверки синтаксиса: # postfix check В некоторых дистрибутивах Postfix запускается автоматически после установки. Ручной запуск Postfix производится командой # postfix start Если Postfix уже работает, перезапустите программу: # postfix reload postfix/postfix-script: refreshing the Postfix mail system
Убедитесь в том, что Postfix работает в системе: $ ps as | grep postfix 26342 ? Ss 0:00 /usr/lib/postfix/master
20.2. Построение почтового сервера РОРЗ
323
Убедитесь в том, что работает демон SMTP: $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is ' * ] ' . 220 windbag.test.net ESMTP Postfix (Libranet/GNU) EHLO windbag.test.net 250-windbag.test.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-XVERP 250 8BITMIME *] telnet> quit Connection closed. Теперь установите Courier-IMAP. Если устанавливаются пакеты RPM, вам потребуются courier-imap-common и courier-imap-рорЗ. При сборке из исходных текстов прочитайте файл OOREADME.NOW.OR.SUFFER. После установки сгенерируйте сертификат РОРЗ TLS/SSL. Сначала отредактируйте файл /etc/courier/pop3d.cnf (подставьте свои данные): [ reqdn ] ST=NHS L=A1buquerque Omail server OU=Automatically-generated РОРЗ SSL key CN=Windbag emailAddress=postmaster@tuxcomputing.com Сгенерируйте ключ: # mkpop3dcert Generating a 1024 bit RSA private key writing new private key to 7usr/1ib/courier/pop3d.pem' 1024 semi-random bytes loaded Generating DH parameters, 512 bit long safe prime, generator 2
В некоторых дистрибутивах Courier запускается автоматически после установки. Используйте следующие команды для ручного запуска Courier в случае необходимости: # /etc/init.d/courier-pop3d start # /etc/init.d/courier-pop3d-ssl start Проверьте имена файлов, так как они могут зависеть от дистрибутива. Теперь в вашем распоряжении имеется полностью рабочий почтовый сервер РОРЗ.
Комментарий Некоторые дистрибутивы Linux вносят изменения в Postfix и Courier, так что обязательно проверьте правильность путей и имен файлов.
324
Глава 20. Почтовый сервер Postfix
Если вы привыкли, что почта ставится в общую очередь в /var/spooL, в Courier дело обстоит немного иначе. Почтовая очередь создается в домашнем каталоге каждого пользователя: # Is /home/foober Desktop Maildir # Is /home/foober/Maiidir courierimapkeywords courierimapuiddb cur tmp courierimapsubscribed courieripop3dsize1ist new
Новая почта находится в /Maildir/new до тех пор, пока она не будет загружена пользователем. Соответствующий параметр задается в Postfix, в каталоге main.cf: homejnailbox = Maildir/
Почтовый сервер РОРЗ может работать на любом старом компьютере с процессором Pentium и даже 486. Под почтовый сервер рекомендуется выделить отдельный компьютер — так как сервер доступен для небезопасных сетей, все, что находится на этом компьютере, также в той или иной степени подвержено риску. Сгенерированный для Courier сертификат SSL является «самоподписаным» (self-signed); это означает, что никакая «доверенная» третья сторона не ручается за подлинность сертификата. Для большинства пользователей этого вполне достаточно. Если вы полагаете, что вам нужен полноценный, коммерческий сертификат SSL от такого поставщика, как VeriSign или Thawte, учтите: это будет стоит несколько сот долларов в год. Также попробуйте обратиться к поставщику услуг Интернета или веб-хостинга — возможно, они предлагают дешевые совместные сертификаты.
См. также Раздел 20.3; локальная документация Courier (/usr/share/doc/courier-doc); Postfix Basic Configuration (/usr/share/doc/postfix/html/basic.html); домашняя страница Courier-IMAP (http://www.inter7.com/counermap.html); домашняя страница Postfix (http://www.postfix.org).
20.3. Построение почтового сервера РОРЗ в Debian Проблема Требуется наладить работу сервера РОРЗ Postfix/Courier в Debian.
Решение В Debian большая часть процесса настройки сервера автоматизирована. Установите или обновите famd, OpenSSL и Postfix: # apt-get install famd openssl postfix postfix-doc postfix-tls
Debian производит базовую настройку конфигурации Postfix и запускает программу. Создайте резервную копию /etc/postfix/main.cf: # ср /etc/postfix/main.cf /etc/postfix/main.cf-old
20.3. Построение почтового сервера РОРЗ в Debian
325
Сотрите все содержимое оригинала и скопируйте следующий фрагмент. Используйте пути и имена хостов/доменов, относящиеся к вашей системе. а
command_directory /usr/sbin mail owner = postfix defau1t_privs = nobody # Доменное имя mydomain = tuxcomputing.com myhostname = windbag.tuxcomputing.com myorigin = $mydomain aliasmaps = hash:/etc/aliases alias_database = hash:/etc/aliases inet_interface = all mydestination = $myhostname. local host.$mydomain $mydomain mynetworksstyle 7 subnet homemailbox = Maildir/ mailspooldirectory = /var/mail mtpd_banner = $myhostname ESMTP $mail_name mailboxsizelimit = 0 recipientdelimiter = +
Определите псевдонимы для root и postmaster в /etc/aliases: # Описание формата • см. man 5 aliases root:foober@test.net postmaster:root
Создайте базу данных псевдонимов: # newaliases
и запустите встроенную программу проверки синтаксиса: # postfix check
Перезапустите Postfix: # postfix reload postfix/postfix-script:
refreshing the Postfix mail system
Теперь установите Courier: # apt-get install courier-authdaemon courier-base courier-doc courier-pop courier-popssl courier-ssl
Debian автоматически генерирует ключи и запускает демонов Courier. Тем не менее вы должны отредактировать/etc/courier/pop3d.cnf и вручную сгенерировать новый сертификат с обновленными данными. В разделе 20.2 описано, как это сделать.
Комментарий Команда postfix reload — самый быстрый способ активации изменений в main.cf, который создает меньше всего проблем. Используйте эту команду, когда система находится под нагрузкой и вы не хотите прерывать ее работу. Всегда посещайте страницу поиска пакетов Debian http://packages.debian.org. В Debian используется собственная схема выбора имен пакетов, а пакеты разбиваются на более мелкие компоненты.
326
Глава 20. Почтовый сервер Postfix
См. также Раздел 20.2; страница поиска пакетов Debian (http://packages.debian.org); Postfix Basic Configuration (/usr/share/doc/postfix/htmL/basichtml); локальная документация Courier (/usr/share/doc/courier-doc); раздел 20.4.
20.4. Тестирование почтового сервера SMTP/POP3 Проблема Требуется убедиться в том, что различные компоненты сервера успешно работают.
Решение В этом вам помогут программы telnet и openssl s_client. Работа сервера SMTP проверяется при помощи telnet: $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost.local domain. Escape character is ' * ] ' . 220 windbag.test.net ESMTP Postfix (Libranet/GNU) ehlo windbag 250-wi ndbag.test.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-XVERP 250 8BITMIME mail from: foober@test.net 250 O K rcpt to: carla@test.net 250 O K data 354 End data with <CR><LF>.<CR><LF> Date: Jan 15, 2004 From: foober Reply-to: foober@test.net Message-Id: six Subject: telnet test Hi Carla, Did you get this?
250 O K : queued as 6069F2290C quit 221 Bye Connection closed by foreign host.
20.4. Тестирование почтового сервера SMTP/POP3
327
Программа telnet также используется для проверки простой, незашифрованной пересылки РОРЗ: $ telnet localhost ПО Trying 127.0.0.1... Connected to local host.local domain. Escape character is 'P]'. +OK Hello there. user carla +OK Password required.
я 5r +OK 2 1275
list +OK P0P3 clients that break here, they violate STD53. 1 638 2 637
retr 1 +OK 638 octets follow. Return-Path: <stinkpad@test.net> X-Original-To: carla@test.net Received: from 192.168.1.100 (unknown [192.168.1.100]) by windbag.test.net (Postfix) with ESMTP id 409E722884 for <carlattest.net>: Thu, 15 Jan 2004 15:29:54 -0700 (PDT) From: stinkpad <stinkpad@test.net> To: carla@test.net Subject: telnet etst Date: Thu. 15 Jan 2004 15:29:50 -0700 User-Agent: KMail/1.5.4 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id:<200401151529.50714.sti nkpad@test.net> Hi Carla. Did you get this? .
quit + O K Bye-bye. Connection closed by foreign host. Для тестирования поддержки TLS/SSL используется программа openssi s_client: $ openssi s_client -connect local host:995 CONNECTED(00000003) depth=0 /C=US/ST=NM/L=Albuquerque/0=Courier Mail Server/OU=Automatically-generated POP3 SSL key/CN=windbag/emailAddress=postmaster@test.net verify error:num=18:self signed certificate ...
328
Глава 20. Почтовый сервер Postfix
+0К Hello there. user carla +OK
Password required.
pass sekritword +0K
logged i n .
Дальше все делается так же, как в обычном сеансе РОРЗ. Проверка клиентских подключений осуществляется по имени хоста или по IPадресу: $ telnet windbag 25
$ telnet 192.168.1.5 ПО
$ openssl s client -connect windbag:995
Комментарий Некоторые распространенные команды РОРЗ: О list — список сообщений (с количеством байт в каждом сообщении); О top msg lines — вывод заголовка сообщения msg с отображением lines строк. Например, команда top 3 5 выводит заголовок сообщения 3 с первыми 5 строками тела сообщения; О retr msg — отображение сообщения с заданным номером (например, retr 2); О dele n — удаление сообщения с номером п; О rset — восстановление сообщений, помеченных для удаления; О quit — уничтожение сообщений, помеченных для удаления, и завершение сеанса.
См. также RFC 1939 с полным списком команд POP; раздел «Введение» настоящей главы; telnet(l).
20.5. Отправка интернет-почты Проблема Как настроить Postfix на отправку интернет-почты? Сервер настроен, но почта почему-то не отправляется.
Решение Задача решается сложнее, чем раньше — и все из-за спамеров. Если ваш поставщик услуг Интернета не требует аутентификации SMTP, вы можете пересылать исходящую почту через его сервер SMTP. Включите директиву relayhost в файл /etc/postfix/main.cf. relayhost = isp.smtpserver.com
Используйте сервер SMTP, указанный в данных, полученных от поставщика услуг Интернета. Если поставщик требует аутентификации SMTP — см. раздел 20.7.
20.7. Установка Cyrus-SASL
329
См. также Раздел 20.7; описание Postfix (/usr/share/doc/postfix/html/index.html).
20.6. Прием интернет-почты Проблема Почтовый сервер готов к работе — но как заставить его принимать интернет-почту?
Решение Вам потребуются статический IP-адрес, зарегистрированное доменное имя и записи DNS, связывающие окружающий мир с почтовым сервером. В конфигурации DNS должна присутствовать запись А для сервера IP и запись MX для почтового сервера. Вот как выглядят записи BIND: $ORIGIN tuxcomputing.com windbag A 10.11.12.23 mx 10 windbag За дополнительной информацией о DNS обращайтесь к главе 24.
Комментарий Существует много вариантов обеспечения сервиса DNS. Это может сделать ваш поставщик услуг Интернета, или независимая служба DNS вроде Dyndns.org, или регистратор доменного имени. Вы также можете запустить свой собственный общедоступный сервер DNS.
См. также Глава 24; описание Postfix (/usr/share/doc/postfix/html/index.html).
20.7. Установка Cyrus-SASL Проблема Требуется включить на почтовом сервере поддержку Cyrus-SASL.
Решение Пользователям RPM-систем потребуются следующие пакеты: О cyrus-sasl-2.x; о cyrus-sasL-plain-2.x. ПРИМЕЧАНИЕ Информация для пользователей Debian приводится в разделе 20.8.
330
Глава 20. Почтовый сервер Postfix
Прежде чем устанавливать Cyrus-SASL, убедитесь в том, что ваша версия Postfix поддерживает SASL и TLS. Для этого выполните команду Idd для исполняемого файла smtpd. Вас интересуют записи Iibsasl2, libssl и Libcrypto: $ Idd /usr/lib/postfix/smtpd libssl.so.0.9.7 => /usr/lib/i686/cmov/libssl.so.0.9.7 (ox4006f000) libcrypto.so.0.9.7 => /usr/lib/i686/cmov/libcrypto.so.0.9.7 (ox4009e000) libsas!2.so.2 => /usr/lib/libsasl.so.2 (ox4018f000)
Если Postfix компонуется с этими библиотеками, значит, можно переходить к установке Cyrus-SASL. Если нет, у вас есть два варианта: О постройте Postfix по исходным текстам. Ознакомьтесь с файлами README и SASL_README. Обязательно установите Cyrus-SASL заранее, до компиляции Postfix; О замените Postfix обновленным пакетом RPM, в котором вся необходимая поддержка будет встроена. После установки Postfix и Cyrus-SASL запустите saslauthd: # /etc/init.d/saslauthd start
Включите следующий фрагмент в main.cf: smtpd_sasl_auth_enable « yes smtpd_sasl2_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_local_domain • $myhostname smtpdrecipientrestrictions = permitsaslauthenticated permitmynetworks reject_unauthjlestination
и активируйте изменения: # postfix reload
Затем убедитесь в том, что Postfix видит новые библиотеки SASL: $ telnet local host 25 Trying 127.0.0.1... Connected to localhost.localdomain.
Escape character is ' * ] ' . 220 windbag.test.net ESMTP Postfix (Libranet/GNU) EHLO windbag.test.net 250-windbag.test.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250•STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=L0GIN PLAIN 250-XVERP 250-8BITMIME
Нас интересуют только строки STARTTLS и AUTH. Теперь можно переходить к следующему шагу, описанному в разделе 20.9.
20.8. Установка Cyrus-SASL в Debian
331
Комментарий Файл main.cf содержит свыше сотни параметров конфигурации. Не надо пугаться; никто не заставляет вас использовать все параметры. Используйте тот минимум, который необходим для выполнения вашей работы. Многочисленные примеры конфигураций содержатся в архиве/usr/share/doc/postfix/exampLes/sample-smtpd.cf.gz. Запись smtpd_recipient_restrictions может содержать несколько аргументов, разделенных запятыми. Все аргументы находятся в одной строке или разбиваются на несколько строк. Каждая дополнительная строка должна начинаться с пробела (или табуляции).
См. также Описание параметров main.cf в/usr/share/doc/postfix/examples/; описание параметров аутентификации в /use/share/doc/postfix/examples/sample-auth.cf.gz; описание Postfix (/usr/share/doc/postfix/html/index.html).
20.8. Установка Cyrus-SASL в Debian Проблема Требуется установить поддержку Cyrus-SASL в Debian.
Решение ТД
QAQT
Начните с установки SASL: # apt-get install Iibsasl2 sasl2-bin Iibsasl2-modules Внесите в /etc/default/saslauthd следующие изменения: START=yes
MECHANISMS="pam"
Включите следующий фрагмент в main.cf: smtpdsaslauthenable = yes smtpd_sasl2_auth_enable = yes smtpd_sas1_security_options = noanonymous broken_sasl_auth_c1ients = yes smtpd_sasljocal_domain = Smydomain smtpdrecipientrestrictions = permit_sasl_authenticated permitjnynetworks reject unauth destination — —
и активируйте изменения: # postfix reload
Затем убедитесь в том, что Postfix видит новые библиотеки SASL: $ telnet local host 25 Trying 127.0.0.1... Connected to local host.local domain.
332
Глава 20. Почтовый сервер Postfix
Escape character is ' * ] ' . 220 windbag.test.net ESMTP Postfix (Libranet/GNU) EHLO windbag.test.net 250•wi ndbag.test.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=L0GIN PLAIN 250-XVERP 250-8BITMIME
Нас интересуют только строки STARTTLS и AUTH. Теперь можно переходить к следующему шагу, описанному в разделе 20.9.
См. также Описание параметров main.cf в/usr/share/doc/postfix/examples/; описание параметров аутентификации в/use/share/doc/postfix/examples/sample-auth.cf.gz; описание Postfix (/usr/share/doc/postfix/html/index.htrnl).
20.9. Настройка smtp-auth для аутентификации пользователей Проблема Вы хотите организовать аутентификацию пользователей (особенно удаленных) на сервере Postfix, чтобы сервер не использовался для несанкционированных пересылок.
Решение Потребуются следующие компоненты: О Cyrus-SASL2; О OpenSSL; О программа Postfix, откомпилированная с поддержкой Cyrus-SASL; О ключи и сертификат сервера. Если поддержка Cyrus-SASL не установлена, обратитесь к разделу 20.7. Когда поддержка SASL будет установлена и успешно заработает, переходите к созданию сертификата сервера SSL. Найдите каталог/ssl/misc и войдите в него: # cd /usr/lib/ssl/misc # Is CA.pl
cinfo
c_name
derchop
CA.sh
c_hash
c_issuer
demoCA
Ключи генерируются сценарием CA.pl (возможно, в каталоге также будет присутствовать сценарий CA.sh — «обертка» для CA.pL, немного расширяющая его функциональность). Выберите один из сценариев и создайте его резервную копию: # ср CA.sh CA.sh-old
20.9. Настройка smtp-auth для аутентификации пользователей
333
Отредактируйте сценарий и вставьте ключ -nodes всюду, где имеется строка $REQ: -newcert) # Создание сертификата
$REQ -new -nodes -x509 -keyout newreq.pem -out newreq.pem $DAYS
-newreq) # Создание запроса сертификата $REQ -new -nodes -keyout newreq.pern -out newreq.pern SDAYS RET=$? else echo "Making CA certificate..." $REQ -new -nodes -x509 -keyout ${CATOP}/private/$CAKEY \ -out ${CATOP}/$CACERT $DAYS Мы отказываемся от создания пароля, чтобы его не приходилось вводить при каждом перезапуске сервера, и автоматическая перезагрузка не прервалась бы из-за ожидания ввода пароля. Вы можете пропустить этот этап и использовать пароль; естественно, применение пароля повышает безопасность. Сгенерируйте новый сертификат: # ./CA.sh -newca # ./CA.sh -newreq # ./CA.sh -sign
В результате будут сгенерированы файлы newreq.pem, newcert.pem и demoCA/ cacert.pem. Скопируйте их в каталог/etc/postfix: # ср newcert.pem /etc/postfix/ # ср newreq.pem /etc/postfix/ # ср demoCA/cacert.pern /etc/postfix/
Включите следующий фрагмент в /etc/postfix/main.cf: smtpd_use_t1s = yes smtpd_tls_auth_only = yes smtpd_tls_key_file = /etc/postfix/newreq.pem s m t p d t l s c e r t f i l e = /etc/postfix/newcert.pem smtpd_tls_CAfile = /etc/postfix/cacert.pem smtpd_tlsjoglevel = 3 smtpdtlsreceivedheader - yes smtpdtlssessioncachetimeout = 3600s tls random source - dev:/dev/urandom
Активируйте изменения: postfix reload
и протестируйте сервер: $ telnet local host 25 Trying 127.0.0.1... Connected to localhost.localdomain.
Escape character is ' * ] ' .
220 windbag.test.net ESMTP Postfix (Libranet/GNU)
EHLO windbag.test.net 250-windbag.test.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS
334
Глава 20. Почтовый сервер Postfix •
250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-XVERP 250-8BITMIME о t AK I ! l_o
S:
220 Ready to s t a r t TLS
Остается лишь настроить почтовых клиентов пользователей. Многие почтовые клиенты позволяют сохранить имя и пароль, поэтому пользователям остается лишь щелкнуть на кнопке отправки почты.
Комментарий Установки Postfix почти не зависят от формата пакетов и дистрибутивов Linux, и все же полезно лишний раз проверить все пути в файле /etc/postfix/main.cf.
См. также Описание параметров main.cf в/usr/share/doc/postfix/examples/; описание параметров аутентификации в /use/share/doc/postfix/examples/sample-auth.cf.gz.
20.10. Применение smtp-auth для аутентификации Postfix на другом сервере Проблема Требуется организовать пересылку почты с сервера SMTP вашего поставщика услуг Интернета, но для этого необходимы имя и пароль. В вашей системе механизм smtp-auth уже настроен и работает для пользователей.
Решение Создайте или отредактируйте файл /etc/postfix/sasl_passwd и сохраните в нем имя и пароль: mail.tuxcomputing.com carla:sekritword Ограничьте доступ к файлу: # chown root:root /etc/postfix/sasl_passwd && chmod 600 /etc/postfix/sasl_passwd
Преобразуйте в хешированный формат DB: # postmap hash:/etc/postfix/sasl_passwd
В результате будет создан файл/etc/postfix/sasLpasswd.db. Добавьте в /etc/postfix/main.cf еще одну строку: smtp_sas1_password_maps = hash:/etc/postfix/sasl_passwd и активируйте изменения: # postfix reload
20.11. Настройка полного доменного имени
335
Комментарий Файл /etc/postfix/sasLpasswd может содержать несколько записей для разных хостов: mail.tuxcomputing.com carla:sekritword smtp.goodeats.com carl a:sekri tword mail.saddles.net horselady:secritword
См. также Описание параметров main.cf в/usr/share/doc/postfix/exampLes/; описание параметров аутентификации в/use/share/doc/postfix/exampLes/sample-auth.cf.gz; раздел 20.7; раздел 20.9.
20.11. Настройка полного доменного имени Проблема Как настроить полное доменное имя в вашей системе? Вы знаете, что для этого нужно отредактировать несколько файлов, но не совсем уверены, какие это файлы и что в них нужно сохранить.
Решение В большинстве разновидностей Linux необходимо отредактировать файлы /etc/ hostname и /etc/hosts. В файле /etc/hostname задается только имя хоста: windbag
В файле /etc/hosts задается доменное имя: 127.0.0.1 localhost.localdomain localhost 192.168.1.5 windbag.test.net windbag
В Red Hat и Fedora вместо /etc/hostname редактируется файл /etc/sysconfig/ network: HOSTNAME=windbag
Проверка конфигурации производится так: $ hostname windbag
$ hostname --fqdn windbag.test.net $ dnsdomainname test.net Чтобы изменения вступили в силу, систему необходимо перезагрузить.
Комментарий
•
Содержимое файлов /etc/sysconfig/network и/etc/hostname читается во время загрузки.
336
Глава 20. Почтовый сервер Postfix
Вы можете изменить доменное имя в любой момент. Чтобы изменения вступили в силу, достаточно перезагрузить сетевую подсистему. В Debian для этого используется команда # /etc/init.d/networking restart
В Red Hat и Fedora команда выглядит так: # /etc/init.d/network restart
Тем не менее такое решение нельзя считать абсолютно надежным, потому что некоторые приложения не обновляются перезапуском сетевой подсистемы. Полная перезагрузка надежнее.
См. также hosts(5), hostname(l).
20.12. Построение почтового сервера IMAP Проблема Пользователи вашей сети часто перемещаются. Они хотят иметь возможность подключиться к своему почтовому серверу оттуда, где они находятся в данный момент, просмотреть всю свою почту и при этом не беспокоиться о том, что их почта разбросана по разным компьютерам.
Решение Одно из возможных решений — создание сервера IMAP. Если вы используете систему на базе RPM (скажем, Fedora) и выполнили рекомендации из раздела 20.2, в вашей системе будет установлен сервер IMAP. Пользователи Debian (см. раздел 20.3) должны установить два дополнительных пакета: # apt_get install courier-imap courier-imap-ssl
Сгенерируйте ключ TSL/SSL и запустите сервер: # mkimapdcert # /etc/init.d/courier-imap start # /etc/init.d/courier-imap-ssl start
Проверьте имена файлов по сценариям init, поскольку они могут изменяться в зависимости от дистрибутива Linux. Теперь у вас имеется работоспособный сервер ШАР. О подключении пользователей рассказано в разделе 20.13. ВНИМАНИЕ В системе должен работать демон famd, обеспечивающий постоянное обновление каталогов Maildir. Демон famd является стандартным для большинства систем Linux; чтобы проверить, работает ли он в системе, выполните команду ps ax | grep famd.
20.13. Подключение пользователей
337
Комментарий Для реализации этого решения потребуется более мощный компьютер, чем древний Pentium из раздела 20.2. Сервер IMAP требует больших вычислительных мощностей и дискового пространства, чем сервер РОРЗ. Разумеется, этот компьютер не должен использоваться для других целей — он должен быть выделен исключительно под выполнение функций сервера ШАР. Аппаратные требования зависят от нагрузки, поэтому привести точные рекомендации трудно. В общем случае компьютер с процессором 1,5 ГГц, 256 Мбайт памяти и 30-гигабайтным жестким диском способен обслуживать 100 пользователей. Обращайте внимание на дисковое пространство, обычно этот ресурс оказывается наиболее критичным.
См. также Локальная документация Courier (/usr/share/doc/courier-doc/htmldoc/imapd.html); полный список команд ШАР в RFC 3501; раздел 20.13.
20.13. Подключение пользователей Проблема Итак, сервер заработал — как пользователи должны подключаться к нему?
Решение Настройте параметры сервера в почтовых клиентах. Конкретный состав меню зависит от специфики клиента, но во всех клиентах вводятся одни и те же данные: О имя; О пароль; О имя или IP-адрес сервера; О режим шифрования (или его отсутствие); О номер порта на сервере. На рис. 20.1 показано меню настройки Balsa Mail. Многие почтовые клиенты для Linux автоматически распознают шифрование и настраивают порт.
а,
Комментарии В Linux существует множество хороших почтовых клиентов: Mutt, Pine, Kmail, Balsa, Mozilla Mail, Evolution, Sylpheed и др. Mozilla Mail хорошо подходит для смешанных сетей, так как программа работает в Linux, Windows и Mac OS X.
Глава 20. Почтовый сервер Postfix
338
См. также Mozilla (http://moziLla.org); Thunderbird (http://www.mozilla.org/projects/thunderbird); Kmail (http://kmaiL.kde.org); Mutt (http://www.mutt.org); Evolution (http:// www.noveLL.com/products/evoLution); Balsa (http://www.newton.cx/baLsa); Pine (http:// www.washington.edu/pine); Sylpheed (http://sylpheed-claws.sourceforge.net).
Mail Servers Address Books Mail Options Display Spelling _Misc Startup Remote Mailbox Servers Type.; Mailbox Name
1
,,.-.•••,••••
&dd
.Oelete
Local Mail i i!ii-j /home/carla/Maildir
firowse...
Outgoing Mail .. :; Remote SMT:p.s^rver u
-
,
o
r
".•••••;•••••
use TLS Certificate Pass Phrase
Рис. 2 0 . 1 . Конфигурация Balsa Mail
20.14. Общий доступ к папкам IMAP Проблема Требуется создать общие папки на сервере IMAP, а также предоставить пользователям возможность создавать собственные общие папки.
20.14. Общий доступ к папкам IMAP
339
Решение Используйте команду Courier maildirmake. Сначала создайте общий каталоге ключом -S: # maildirmake -S /var/mail/sysadmins Затем создайте общую папку (да, это обычный каталог Linux, но в Courier используется термин «папка») с ключом -s. Ключ write разрешает чтение/запись всем желающим: # maildirmake -s write -f reports /var/mail/sysadmins Также можно создать другую папку, доступную только для чтения: # maildirmake -s read -f policies /var/mail/sysadmins Обратите внимание: команда maildirmake создает скрытые каталоги: # Is -a /var/mail/sysadmins
. .. .reports .policies cur new tmp Разрешения могут задаваться на уровне отдельных папок, как и в случае с любыми каталогами Linux (в разделе 9.7 рассказано, как настроить разрешения для общих каталогов). Чтобы убрать общую папку, просто удалите ее. Пользователи также могут предоставлять общий доступ к своим папкам. Их общие папки находятся в их домашних каталогах: $ maildirmake --add images=/var/mail/sysadmins $HOME/Maildir
Для отмены общего доступа к каталогу используется ключ —del: $ maildirmake --del images $H0ME/Mai1dir
Комментарий Если вам потребуется полноценный сервер коллективного доступа к файлам/электронной почте1, его можно собрать из отдельных компонентов (бесплатных и публикуемых с открытыми текстами). Также существует целый ряд готовых пакетов для рабочих групп — как свободно распространяемых, так и коммерческих. Приведу лишь небольшую подборку: О PHP GroupWare (http://www.phpgroupware.org); О OpenGroupware (http://www.opengroupware.org); О The Kolab Project (http://kolab.org); О SuSE OpenExchange (http://www.suse.com); О SKYRiX Groupware (http://www.skyrix.com); О Novell Linux (http://www.noveU.com/linux).
см. также maitdirmake(l). 1
Groupware/email server. — Примеч. ред.
340
Глава 20. Почтовый сервер Postfix
20.15. Использование виртуальных доменов Postfix Проблема Сервер Postfix должен обслуживать сразу несколько доменов. А может быть, вы хотите отделить системные учетные записи Linux от почтовых учетных записей. Другими словами, вы хотите иметь возможность раздавать пользователям почтовые учетные записи, не создавая для них учетные записи Linux на почтовом сервере. Чем меньше системных учетных записей, тем безопаснее система.
Решение Воспользуйтесь виртуальными доменами Postfix. Это позволит вам создавать виртуальные почтовые ящики без создания системных учетных записей пользователей. Затем введите данные пользователей в файле userdb в Courier (для POP или IMAP). Сначала включите следующий фрагмент в /etc/postfix/main.cf (подставьте свои имена доменов и каталогов): virtualmailboxdomains = tuxcomputing.com test.net foober.com virtual_mailbox_base = /var/mail/vhosts virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_minimum_uid = 1000 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_alias_maps = hash:/etc/postfix/virtual Создайте или отредактируйте файл /etc/postfix/vmailbox. В этом файле указываются пары из имен пользователей и их локальных каталогов для хранения почты, которые в данном примере находятся в каталоге/var/mail/vhosts: akkana@tuxcomputing.com tuxcomputi ng.com/akkana/ dancer@tuxcomputi ng.com tuxcomputi ng.com/dancer/ telsa@test.net test.net/telsa/ telsa.gwynne@test.net test.net/telsa/ val. henson@foober.com foober.com/valh/ # Для спана и вирусов 0foober.com foober.com/catchall Преобразуйте файл в таблицу поиска Postfix: # postmap /etc/postfix/vmailbox На следующем этапе создаются почтовые учетные записи пользователей. Это делается не в Postfix, а в Courier. Создайте или отредактируйте файл /etc/courier/ userdb, используя следующий формат (обязательно включите символ табуляции после имени и задайте уникальную комбинацию UID/GID): tel sa uid=1100gid=11001home=/var/mail/vhosts/telsa|shel l=/bin/bash|imapww=|pop3pw=
В строке не должно быть пробелов. Теперь наступает самая нудная часть: для каждого нового пользователя необходимо сгенерировать новый пароль командой userdbpw. В следующем примере пароль создается с применением хеширования MD5: $ userdbpw -md5 Password:
20.16. Создание списка рассылки с применением couriermlm
341
Reenter password: $l$G41nVriv$GzWal_KidkoVIE2DxMxHBxl
Скопируйте полученный код в /etc/courier/userdb: telsa uid=1100gid=11001 home=/var/mai 1 /vhosts/tel sa | shen=/bin/bash | imapw=$l$G 41nVriv$GzWaLKidkoVIE2DxMxHBxl|pop3pw=$l$G41nVriv$GzWaLKidkoVIE2DxMxHBxl
He забудьте записать пары «имя/пароль»! Когда все будет готово, остановите authdaemond и преобразуйте/etc/courieruserdb в хешированную базу данных: # /etc/init.d/courier-authdaemon stop # makeuserdb Настройте Courier так, чтобы при аутентификации наряду с системными паролями использовался файл /etc/courier/userdb. Для этого в файл /etc/courier/ authdaemonrc включается строка authmodulelist="authuserdb"
"authpam"
Наконец, перезапустите authdaemonrc: # /etc/init.d/courier-authdaemon start Теперь пользователи могут изменить конфигурацию своих почтовых клиентов, а ваша работа закончена.
Комментарий Если количество доменов велико, перечислите их в текстовом файле (по одному домену на строку) и включите в директиву virtual_mailbox_domains имя этого файла: virtualmaiiboxdomains « /etc/postfix/virtualdomains
20.16. Создание списка рассылки с применением couriermlm
i
Проблема Требуется создать списки рассылки на сервере Postfix/Courier.
Решение Вам потребуются программы couriermlm (Courier Mailing List Manager), dot-courier и cron.
Пользователь может создать список в любом каталоге, в который ему разрешена запись. Возможно, каталоги списков для пользователей стоит создать за пределами их домашних каталогов — например, в /var. Создание каталога для нового списка рассылки выполняется следующей комаидой: $ couriermlm create /var/1ists/php_list ADDRESS=php@test.net
Команда создает каталог, содержащий множество шаблонов и подкаталогов: $ Is -xa phpjist adminrequest.tmpl bounces confsubj.tmpl
archive commands digestsubj.tmpl
342
Глава 20. Почтовый сервер Postfix
fetch.tmpl headeradd i dxheader2html.tmpl i dxheadertxt.tmpl
fetchsubj.tmpl help, tmpl i dxheaderhtml.tmpl i dxsubject.tmpl
Прочитайте следующие файлы шаблонов и отредактируйте их по мере необходимости: О help.html — сообщение, отправляемое Courier в ответ на запрос помощи; О sub.tmpl — подписка проводится в два этапа и требует подтверждения. Шаблон sub.tmpl. содержит первый ответ на запрос о подписке; О headeradd — дополнительные почтовые заголовки, которые должны присутствовать в сообщениях списка; О headerdel — удаляемые почтовые заголовки. Если вы ведете общедоступный список рассылки и не хотите предоставлять личные адреса подписчиков спамерам, используйте headerdel в сочетании с headeradd: # header-del Reply-To: From: # headeradd Reply-To:php0test.net From:php@test.net
Настройте /etc/crontab: # m h dom mon dow @midnight Phourly
user command alice couriermlm daily /var/1ists/php_list alice couriermlm hourly /var/1ists/php_list
Напоследок создайте несколько файлов dot-courier для отправки административных сообщений нужному пользователю. Эти файлы должны находиться в домашнем каталоге администратора списка. В нашем примере список php@test.net администрируется пользователем valorie. Сначала valorie создает /home/valorie/ .courier-php, в котором хранится информация о местонахождении списка: /usr/bin/couriermlm msg /var/1 ists/phplist Далее следует файл /home/valorie/.courier-php-owner: valorie@test.net
И файл /home/valorie/.courier-php-default: /usr/bin/couriermlm ctlmsg /var/1ists/phplist
Комментарий Пользователи списка используют следующие команды в формате список-команда@домен: php-help@test.net php-subscri bePtest.net php-unsubscri be@test.net Файлы dot-courier обеспечивают пересылку запросов нужному пользователю.
См. также courier(8), dot-dourier(5).
Глава 21
Борьба со спамом и вредоносными программами 21.1. Введение Даже самые замечательные человеческие изобретения не защищены от идиотов, которые обращают его во вред окружающим. Общим термином вредоносные программы (malware) обозначаются вирусы, трояны, черви, вредные фрагменты исполняемого кода на веб-страницах и прочая гадость, способная заразить систему из почтового клиента или браузера. В настоящее время это означает в первую очередь Outlook, Outlook Express и Internet Explorer. Удаление этих программ из системы Windows заметно повышает ее безопасность. В настоящей главе рассматриваются средства борьбы со спамом и вирусами для вашего сервера Postfix: Clam Anti-Virus, SpamAssassin, черные списки DNS и белые списки. Проследите за тем, чтобы каждый продукт использовался в своей новейшей версии — особенно Postfix, который должен иметь версию 2.0 и выше. Существуют три способа ограничения входящей почты. 1. Ограничения SMTPD. 2. Проверка заголовков/тела сообщений. 3. Фильтры содержимого. Чем дальше вы заходите по этой цепочке, тем больше нагрузка на сервер. Существуют пределы того, что можно эффективно сделать на каждом уровне. Потратьте немного времени, настройте защитные механизмы своей системы и добейтесь того, чтобы они работали так, как требуется. Основная стратегия выглядит так: О защита пропускной способности канала; О защита почтового сервера от перегрузки; О защита прокси-серверов и почтовых серверов от использования для пересылки спама; О защита системы от превращения в источник заражения.
344
Глава 21. Борьба со спамом и вредоносными программами
Последняя составляющая — самая важная. Никого не волнует, что творится в вашей системе, лишь бы она не распространяла заразу в Интернете. Чтобы сократить уровень «мусора» в почтовых ящиках до разумных пределов, приходится прикладывать несообразно много усилий. Но если в сети работают хосты Windows, делать это все равно придется. Нужно ли делать все это, если в сети нет хостов Windows? Наверное, без Clam Anti-Virus можно обойтись, хотя если программа будет работать, это никому не повредит. Не стоит полагать, будто система Linux защищена от атак, хотя атаки вирусов, распространяемых с электронной почтой, крайне маловероятны. Атаки в Linux обычно производятся с «черного хода»: нападающий должен найти способ получения доступа к системе, а затем получить достаточно привилегий для причинения вреда. По умолчанию в Linux используется открытие сообщений в режиме документа, так что даже если почтовый клиент будет ассоциировать типы файлов с приложениями, активировать исполняемый код прямо из сообщения все равно не удастся. Но даже если рядовой пользователь постарается активировать вредное вложение, сохранив его в каталоге, выполнив команду chmod +x и запустив его, для нанесения сколько-нибудь значительного вреда ему все равно потребуются привилегии root. Более того, даже если почтовый вирус Linux сможет установиться в системе и распространиться для заражения других хостов, эпидемия быстро угаснет. Просто такой вирус не найдет радушного приема (в отличие от вирусов Windows). И все же осторожность не бывает лишней. Как обычно, очень важно соблюдать основные правила безопасности: О используйте минимальный уровень привилегий, необходимый для выполнения операции. Не используйте привилегии root всуе; О помните об эффективности сильных паролей; О держите sudo под контролем; О будьте осторожны с правами владения и разрешениями.
См. также Virus Library (http://www.virusLibrary.com); Security Focus (http://www.securityfocus. com); The SANS (SysAdmin, Audit, Network, Security) Institute (http://www.sans.org).
21.2. Первоочередные меры по защите от спама и вредоносных программ Проблема Вы администрируете смешанную локальную сеть с клиентами Windows, Linux, а возможно, и другими платформами. Вас в большей степени беспокоят компьютеры с системой Windows. Как бы вам ни хотелось запереть их в «карантин» и заблокировать доступ к сети, чтобы защитить остальные компьютеры, это невозможно. Как защитить локальную сеть от заражения?
21.3. Тестирование средств борьбы со спамом в Postfix
345
Решение Начните с компьютеров Windows. Удалите: О Outlook; О Outlook Express; О Internet Explorer. Замените их бесплатными почтовыми клиентами (Eudora, Pegasus, Mozilla Mail, Netscape Mail, Opera Mail) и браузерами (Opera, Mozilla, Netscape, Firefox). Основные цели атак вредоносных программ устранены, теперь можно действовать дальше.
Комментарий Заблокировать Outlook/Outlook Express/Internet Explorer теоретически возможно, но по моему мнению, это слишком рискованно. Если все, что вам нужно, — это почтовый клиент и веб-браузер, существует множество первоклассных альтернатив. IE уступает другим браузерам по функциональности, так что вы даже не получаете компенсации за возросший риск. Если вы хотите выбрать единый браузер или почтовый клиент, долго искать не придется. Mozilla обладает полноценной функциональностью, работает в Windows, OS X, Linux, OS/2, Solaris, HPUX, AIX и на многих других платформах.
См. также Глава 20; Securing Outlook, Part One: Initial Configuration (http://www.securityfocus.com/infocus/1648); Securing Outlook, Part Two: Many Choices to Make (http://www.securityfocus.com/infocus/1652). • i
21.3. Тестирование средств борьбы со спамом в Postfix Проблема Вам хотелось бы по возможности блокировать лишний трафик на уровне SMTP, чтобы снизить нагрузку на сервер. Для этого необходимо протестировать новые средства борьбы со спамом в Postfix, но вас беспокоит возможность потери нужных сообщений.
Решение В Postfix существует два режима отключения «рикошета» сообщений при тестировании: глобальный и конфигурационный. Чтобы запретить отказы глобально, включите следующую строку в /etc/postfix/main.cf: soft bounce = yes
346
Глава 21. Борьба со спамом и вредоносными программами
Чтобы уточнить настройку для отдельных конфигурационных параметров, используйте квалификатор wam_if_reject: ... smtpd_recnpient_restnctions • rejecti nvali dhostname, re jectnonf qdn_hostname, warni f_reject rejectjranfqdnsender, Следите за журналами — Postfix заносит предупреждение в журнал, но доставляет сообщение. После внесения изменений в main.cf всегда выполняйте команду postfix reload.
Комментарий Чтение журналов Postfix входит в обязанности администраторов почтовых систем, особенно на стадии тестирования. Подавление нежелательного трафика на уровне SMTP эффективно, но не защищено от ошибок, поскольку в мире существует немало некорректно работающих или неверно настроенных почтовых серверов. Нельзя исключать вероятность того, что будет отвергнута нужная почта, так что внимательно следите за происходящими событиями. Приведу простое, легко адаптируемое регулярное выражение для поиска конкретных сообщений: # egrep '(reject|warning|error|fatal|panic):' /var/log/maillog
См. также RFC 2821; файл Postfix SMTPD_ACCESS_README; access(5).
21.4. Настройка антиспамовых ограничений в Postfix Проблема Требуется блокировать как можно больше спама на уровне SMTP, чтобы снизить нагрузку на сервер.
Решение Включите следующие директивы (полностью или частично) в файл /etc/postfix/ main.cf: smtpdjielorequired » yes disable_vrfy_command = yes smtpd_recipient_restrictions = rejecti nvalid_hostname. rejectnonfqdnhostname, reject_non_fqdn_sender, reject_non_fqdnrecipi ent, reject_unknown_sender_domai n. rejectjjnknownreci pi entdomai n,
21.5. Создание белых списков
347
rejectunauthpipel ining, permitjnynetworks. permit_unauth_destination
После внесения изменений в main.cf всегда выполняйте команду postfix reload. Последние три строки безопасны, поэтому они используются всегда. Но остальные директивы не являются обязательными. Они отклоняют не только спам, но и почту с неправильно настроенных серверов, которые попадаются чаще, чем хотелось бы. Смысл всех директив объясняется в документе «Postfix Configuration — UCE Controls» (http://www.postfix.org/uce.html).
Комментарий Представленные директивы поддерживаются в Postfix версии 2.0 и выше; в версии 1.x используется другой синтаксис. Очень важно обновить Postfix до последней стабильной версии, чтобы в программу были включены все обновления безопасности и производительности.
См. также RFC 2821; раздел 21.3; «Postfix Configuration — UCE Controls» (http://www.postfix.org/ uce.html); файл Postfix SMTPD_ACCESS_README; access(5).
21.5. Создание белых списков Проблема Вы беспокоитесь, что из-за настройки всевозможных почтовых фильтров и антивирусных сканеров будет потеряна нужная почта. Как гарантировать прохождение желательных сообщений?
Решение В Postfix эта задача решается при помощи файлов тар и директивы smtpd_sender_ restriction в файле/etc/postfix/main.cf. Перечислите нужные адреса в простом текстовом файле, по одному адресу на строку: myfriendiamypal.com myotherfriend@thatplace.com
ОК ОК
mychum@techies.net
ОК
В данном примере текстовому файлу было присвоено имя /etc/postfix/whitelist. Теперь преобразуйте его в индексированную базу данных: # postmap /etc/postfix/whitelist Включите следующую строку в /etc/postfix/main.cf: smtpdsenderrestrictions = check_sender_address hash:/etc/postfix/whitelist
348
Глава 21. Борьба со спамом и вредоносными программами
Postfix поддерживает три формата базы данных. Чтобы узнать, какой тип используется в вашей системе, выполните команду $ postconf [ grep database_type default jjatabase_type = hash
Комментарий Файлы баз данных Postfix хранятся в одном из трех форматов: hash, btree или dbm. Файлы hash и btree имеют расширение .db. Базы данных dbm состоят из двух файлов, .рад и .dir. Обычно по умолчанию в Linux используется формат hash. Определение «белых списков» адресов должно стать первым шагом при настройке любой фильтрации почты. Тем самым вы гарантируете, что почта от нужных вам людей или доменов не будет ошибочно отвергнута. Формат белого списка основан на файле /etc/postfix/access. Директива check_ sender_access сравнивает содержимое белого списка с командой MAIL FROM во время транзакции SMTP (конечно, команда может быть сфальсифицирована, но проверка все равно полезная). В следующем примере продемонстрированы три формата выбора адресов: О вся почта от одного пользователя по одному адресу: myfriend@mypal.com; О вся почта от одного домена: wanteddomain.com; о
вся почта от домена, включая субдомены (обратите внимание на начальную точку): .wanteddomain.com;
О вся почта от одного пользователя из любого домена: mychum@. OK означает, что сообщение должно быть принято.
См. также RFC 2821; раздел 21.3; файл Postfix SMTPD_ACCESS_README; access(5).
21.6. Использование черных списков DNS Проблема Такое впечатление, что вся почта, получаемая от некоторого поставщика (и даже целой страны), не содержит ничего, кроме спама. В системе настроены белые списки, и вы хотите избавиться от «мусора», потратив как можно меньше системных ресурсов.
Решение В Postfix это делается просто. Включите черный список DNS (DNSRBL, DNS Black Hole List) в файл main.cf, в директиву smtpd_recipient_restrictions: smtpdrecipientrestrictions rejectrbl_cli ent relays.ordb.org, reject_rbl client list.dsbl.org, reject_rbl_client sbl.spamhaus.org.
21.6. Использование черных списков DNS
349
Эти записи должны быть последними в директиве smtpd_recipient_restrictions, если в ней имеются другие записи. Список smtpd_recipient_restrictions обрабатывается последовательно, поэтому белые списки и другие проверки должны выполняться в первую очередь, чтобы нужная почта заведомо дошла до получателей.
Комментарий Выбор DNSRBL — процесс, которому стоит уделить немного времени. Прочитайте описания политик и почитайте пользовательские форумы. Каждая сдужба руководствуется своими критериями включения и исключения нарушителей. Open Relay Database (http://www.ordb.org) надежна; Spamhaus и Spamcop консервативны; SPEWS (Spam Prevention Early Warning System) — самая жесткая и неумолимая. Существует много других ресурсов подобной направленности; начните поиски с этих трех, а в остальном вам поможет Google. He надейтесь заблокировать весь спам при помощи списков блокировки, это всего лишь один из инструментов в вашем арсенале. Преимуществом DNSRBL следует считать то, что отклонение трафика на уровне SMTP создает наименьшую нагрузку на сервер. Потоки спама нарушали работу многих серверов и даже использовались как DoS-атаки (Denial-of-Service). Раннее отклонение сохраняет пропускную способность канала и системные ресурсы. С другой стороны, эта мера радикальная — вы можете потерять нужную почту. В общих чертах списки DNSRBL работают по следующему принципу. В зависимости от критериев, установленных создателями DNSRBL, отдельные IP-адреса или целые сетевые блоки включаются в список блокировки. Идея заключается не только в блокировке спамерского трафика, потому что отфильтровать только спам на уровне IP невозможно (более того, это невозможно сделать на любом уровне). Спамеры покупают целые блоки IP-адресов, а затем переключаются между блоками. DNSRBL преследует две цели: заблокировать ненужный трафик и оказать давление на поставщиков, заставляя их избавиться от спамеров. Списки блокировки эффективно работают в обоих отношениях. Если бы не они, ситуация со спамом была бы еще хуже, чем сейчас. К сожалению, эффективность DNSRBL снижается широким распространением компьютеров с незащищенной системой Windows. В распоряжении спамеров появляется огромный, распределенный пул посредников рассылки, что усложняет блокировку спама на любом уровне. Если в вашей организации ожидается поступление сторонней почты (например, если на веб-сайте опубликованы контактные данные для потенциальных клиентов), не используйте списки блокировки. В таких ситуациях лучше прибегнуть к услугам Spam Assassin (см. разделы 21.9 и 21.10). Спамеры и поставщики сетевых услуг, пострадавшие от DNSRBL, поднимают шум, называют это нарушением свободы слова и несут прочую чушь. Тем не менее на своем сервере вы устанавливаете правила, и они не имеют права нарушать границы ваших владений.
См. также Файл Postfix SMTPD_ACCESS_README и access(5); The Spamhaus Project (http:// www.spamhaus.org); SPEWS (http://spews.org); Spamcop (http://www.spamcop.net); Open Relay Database (http://www.ordb.org).
350
Глава 21. Борьба со спамом и вредоносными программами
21.7. Блокировка сообщений с вложениями Проблема Требуется заблокировать сообщения с некоторыми видами вложений на уровне SMTP.
Решение Используйте следующее регулярное выражение: # Одна неразрывная строка /filename=\"?(.*)\.(bat|cmd|com|dotlexe|hta|scr|pif|vbe|vbs)\"?$/ REJECT keep your malware off my network # Одна неразрывная строка /A\s*Content-(Di spositi on|Type).*name\s*=\s*"?(.+\ .(asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|vxd|p1f|scr|hta|jse?|sh[mbs]|vb[esx][ws [fh]|))"?\s*$/ REJECT Attachments that contain or end in "$3" are prohibited on this server. "$2" is the name of the rejected f i l e
Поместите этот фрагмент в файл и назовите его /etc/postfix/mime_header_checks. Затем включите в main.cf следующую директиву: mimeheaderchecks = regexp:/etc/postfix/mime_header_checks
Не забудьте выполнить команду postfix reload после изменения mail.cf. Отредактируйте список типов файлов, исходя из своих потребностей. В приведенном примере не включены форматы файлов Microsoft Office .xls, .xlk, .doc, .wdb, .wri, .wrs, .ppt и т. д.; возможно, вы захотите добавить некоторые из них.
Комментарий Чтобы заблокировать все сообщения с вложениями, достаточно одного регулярного выражения: /filename=V7 REJECT all messages with attachments are rejected Помните, что при этом также будут заблокированы сообщения VCard, сообщения с вложенными подписями GPG, сообщения HTML с вложенной графикой, а также сообщения Outlook/Outlook Express в формате MS-TNEF (впрочем, этот формат бесполезен для тех, кто не работает с Outlook/Outlook Express, поскольку он является закрытым). Почему в списке перечислены только типы файлов Microsoft? Это ваше личное дело — укажите любые файлы, которые сочтете нужным. Хотя вряд ли ктонибудь станет спорить с тем, что по части теплого, радушного отношения к вредоносным программам, полученным по электронной почте, у Windows нет равных.
См. также Файл Postfix SMTPD_ACCESS_README и access(5); «Unsafe File List» в Microsoft Knowledge Base Article 291369.
21.8. Настройка Clam Anti-Virus на сервере Postfix
351
21.8. Настройка Clam Anti-Virus на сервере Postfix Проблема Требуется установить на почтовом сервере Postfix хорошую антивирусную программу, которая бы автоматически сканировала всю входящую почту и блокировала зараженные сообщения.
Решение Используйте Clam Anti-Virus и Amavisd-new на сервере Postfix. Amavisd-new — «обертка» Perl, выполняющая функции посредника для управления потоком сообщения между Clam AV и Postfix. Сама по себе программа Clam AV не может напрямую сканировать входящие сообщения. Обратите внимание: это решение принципиально отличается от предыдущих, в которых описывалась настройка антиспамовых ограничений и белых списков в Postfix. В данном случае работу будет выполнять Amavisd-new, а не Postfix. Пользователям систем на базе RPM понадобятся пакеты clamav и amavisd-new, а пользователям Debian — пакеты amavisd-new, clamav, clamav-base, clamav-daemon и clamav-freshclam. Прежде чем вносить какие-либо изменения, создайте резервную копию конфигурационных файлов. Затем переходите к настройке Amavisd-new. Создайте файл /var/log/amavis.log; назначьте его владельцем пользователя и группу amavis, которые должны быть созданы системой управления пакетами. Отредактируйте файл/etc/amavis/amavisd.conf. В секции 1 присвойте значения переменным $mydomain и $myhostname и раскомментируйте следующие строки: $forward_method = 'smtp:127.О.О.1:10025'; # Для пересылки проверенной почты $notify_method = $forward_method; # Для отправки оповещений
Отключите карантинную блокировку вирусов в секции 4, потому что сообщения, зараженные вирусами, будут отвергаться на уровне SMTP. Нет смысла сохранять их, ведь подавляющее большинство таких сообщений генерируется автоматически и имеет поддельные обратные адреса. SQUARANTINEDIR = undef: Svirusquarantineto » undef:
Также в секции 4 отключите автоматическое оповещение отправителя. Как правило, обратный адрес является фиктивным; бессмысленно посылать по нему сообщения «Эй, вы отправили мне вирус!» Следующая директива отвергает зараженные сообщения без каких-либо оповещений: $ f i n a l _ v i r u s _ d e s t i n y = DDISCARD; # (По умолчанию D BOUNCE)
Теперь найдите секцию 7 и раскомментируйте подсекцию Clam AV. Закомментируйте все вирусные сканеры, не используемые в вашей системе: Ш http://www.damav.net/ ['Clam Antivirus-clamd', \&ask_daemon. ["CONTSCAN { } \ n " . "/var/run/clamav/clamd.ctl 11 ].
352
Глава 21. Борьба со спамом и вредоносными программами
qr/\bOK$,qr/\bFOUND$/, qi-Г.*?: (?!Infected archived.*) FOUND?/ ],
Остановите Amavisd-new и проверьте конфигурацию встроенным отладчиком: # /etc/init.d/amavis stop # amavis debug
Команда выводит сводное описание конфигурации; вас интересуют только сообщения об ошибках. Теперь снова запустите Amavisd-new, подключитесь через telnet и убедитесь в том, что Amavisd-new работает: # /etc/init.d/amavis start $ telnet 127.0.0.1 10024 Trying 127.0.01... Connected to 127.0.0.1 Escape character is ' * ] ' 270 [127.0.0.1] ESMTP amavisd-new service ready
Amavisd-new работает, выходите из telnet: te!net> quit Connection closed.
Теперь настройте Postfix для использования программы Amavisd-new, которая теперь будет выполнять функции прокси-сервера SMTP. Включите следующий фрагмент в конец файла /etc/postfix/master.cf. smtp-amavis unix - n • 2 smtp -o smtp_data_done_timeout=1200 •o disable_dns_1ookups=yes 127.0.0.1:10025 inet n • n - - smtpd •o content_filter= - о recei veoverri deopti ons=no_unknown_reci pi ent_checks.no_header_body_checks -o local_recipient_maps= •o relay_recipient_maps= -o smtpdj-estriction_classes= -o smtpd_client_restrictions= -o smtpdjie1o_restrictions= -o smtpd_sender_restrictions= - о smtpd_reci pi entrestri ctions=permitmynetworks,reject -o mynetworks=127.0.0.0/8 -o smtpdauthorizedxforward hosts=127.0.0.0/8 •o strict_rfc821_envelopes=yes
Включите следующую строку в /etc/postfix/main.cf: content_filter = smtp-amavis:[127.0.0.1]:10024
Перезапустите Postfix: # /etc/init.d/postfix stop # /etc/init.d/postfix start
Назначьте пользователя amavis владельцем Clam AV, иначе программа работать не будет. Сначала откройте файлы /etc/damav/clamav.conf и/etc/arnavis/amavisd.conf и убедитесь в том, что amavisd.conf содержит ссылку на файл LocalSocket: # /etc/clamav/clamav.conf Local Socket /var/run/claraav/clamd.ctl /etc/amavi s/amavi sd.conf 5s http://www.clamav.net/
21.8.
Настройка Clam Anti-Virus на сервере Postfix
353
['Clam Antivirus-clamd'. \&ask_daemon,["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"], qr/\bOK$/, qr/\bFOUND$/, qi-Г.*?: (?!Infected Archive)(.*) F0UND$/ ] ,
Теперь пользователь amavis назначается владельцем всех каталогов, используемых Clam AV. В нашем примере это каталоги: О /var/log/clamav (файл clamav.bg); О /var/run/clamav (файл clamd.pid); О /var/lib/clamav (каталог базы данных). Пример: # chown -R amavis:amavis /var/log/clamav/ Будьте внимательны! Изменяйте только те каталоги, которые принадлежат исключительно Clam AV; все файлы в общих каталогах должны настраиваться по отдельности. Теперь откройте /etc/damav/freshclam.conf и проделайте то же самое с каталогами, перечисленными в этом файле. Наконец, найдите файлы, принадлежащие Clam AV, в каталоге/etc/log rotate, d/. Например: О /etc/logrotate.d/damav-daemon; о /etc/logrotate.d/damav-freshclam. Имена файлов могут быть другими. Найдите в каждом файле строку create 640 clamav adm и приведите ее к виду create 640 clamav amavis
Сохраните изменения и перезапустите как clamd, так и freshclam. В Debian это делается командами # /etc/init.d/clamav-daemon reload # /etc/init.d/freshclam reload
В Red Hat и Fedora соответствующие команды выглядят так: # /etc/init.d/clamd reload # /etc/init.d/freshclam reload
Комментарий Установка из пакетов (вместо сборки по исходным текстам) сэкономит вам массу времени. Если вы обязательно должны компилировать программу самостоятельно, прочитайте всю документацию. Всех пользователей, каталоги и сценарии init вам придется создавать вручную. Два основных компонента Clam AV — clamd, демон сканирования, и freshclam, модуль автоматической подгрузки обновлений баз данных вирусов. Их настройка задается в файлах /etc/clamav/damav.conf и /etc/damav/freshclam.conf соответственно.
См. также Файл Postfix FILTERREADME; локальная документация Amavisd-new (/usr/ share/doc/amavisd-new, amavisd-new(8) и /usr/share/doc/amavisd-new.README. postfix);
354
Глава 21. Борьба со спамом и вредоносными программами
локальная документация Clam AV (/usr/share/doc/clamav); Clam Anti-Virus (http:// www.clamav.net); Amavisd-new (http://www.ijs.si/software/amavisd).
21.9. Настройка SpamAssassin в Postfix Проблема Блокировка спама на уровне SMTP полезна и эффективна, но ее возможности ограничены. Требуется использовать программу, которая бы уничтожала спам, не требуя постоянного наблюдения и настройки. Программа должна интегрироваться в существующую конфигурацию Postfix/Amavisd-new/Clam AV.
Решение SpamAssassin — именно то, что вам нужно. Поскольку SpamAssassin будет устанавливаться в системе с программой Amavisd-new, выполняющей функции прокси-сервера SMTP, вы устанавливаете SpamAssassin, а затем настраиваете параметры в/etc/amavis/amavisd.conf. Файл /etc/SpamAssassin/locaLcf не понадобится. Установите SpamAssassin и переходите кредактированию/etc/amavis/amavisd.conf. В секции 1 закомментируйте строку (Pbypassspamchecksaci = qw( . );
В секции 4 указывается, как Amavis-d следует поступать с сообщениями, помеченными как спам. Следующий параметр доставляет их получателям: $fina1_spam_destiny = D_PASS: # (по умолчанию DREJECT)
Значение D_DISCARD уничтожает такие сообщения на сервере без оповещения отправителя: $final_spam_destiny - DDISCARD: # (По умолчанию DREJECT)
В разделе 7 задается конфигурация SpamAssassin: $sa_tagjevel_deflt = -999; $sa_tag2Jeve1_deflt = 5.0; $ s a _ k i l l j e v e l _ d e f l t = -999; # Строка, включаеная в начало заголовка Subject, если сообщение # превышает уровень tag2 $sa_spam_subject_tag • '***SPAM*** ';
Наконец, владельцем файлов SpamAssassin должен быть пользователь amavis: # chown -R amavis:amavis /usr/share/spamassassin
Комментарий Вы сами решаете, как поступить со спамом — уничтожить его на сервере или переслать пользователям. Если разрешить доставку, пользователи смогут легко настроить фильтры в своих почтовых клиентах по строке ***SPAM*** и направить спам туда, куда сочтут нужным. Третий вариант — отвергнуть спам и отправить уведомление 5хх о недоставленном сообщении: $fina1_spam_destiny - D_REJECT
21.9. Настройка SpamAssassin в Postfix
355
В принципе такое поведение считается правильным для почтового агента, но я не понимаю, зачем тратить пропускную способность канала на сообщения SMTP с фальшивыми адресами только для соблюдения протокола. Четвертый и однозначно худший вариант — возврат сообщения. Поскольку подавляющее большинство спамеров использует фальшивые обратные адреса, а ничтожное меньшинство с «честными» обратными адресами попросту проигнорирует ваши сообщения, не стоит тратить ресурсы канала и захламлять Интернет.
См. также The SpamAssassin Wiki (http://wiki.apache.org/spamassassin/FrontPage); локальная документация Amavisd-new (/usr/share/doc/amavisd-new, amavisd-new(8) и /usr/ share/doc/amavisd-new.README. postfix).
•
'
Глава 22
Веб-сервер Apache
22.1. Введение В этой главе рассматривается Apache версии 2.0. Самый распространенный сервер HTTP в мире — Apache 1.3 — надежен, безопасен и исключительно хорошо документирован... настолько хорошо, что я не стану пересказывать общеизвестные факты. Apache 2.0 существенно усовершенствован по сравнению с 1.3; новая версия содержит многочисленные изменения и улучшения, а также легче настраивается. Если вы планируете создать веб-сайт, прежде всего необходимо решить, в какой операционной системе он будет работать. Apache работает в Windows, Unix, OS/2 и даже в BeOS. Поскольку книга посвящена Linux, логично предположить, что вы будете использовать Apache для Linux. С остальными решениями дело обстоит сложнее. О Какую версию Apache использовать — 1.3 или 2.x? О Как устанавливать программу — в виде пакетов или строить по исходным текстам? О Организовывать хостинг самостоятельно или использовать услуги поставщика?
Apache 1.3 или Apache 2.x? Оба варианта хороши, так что принять решение будет нелегко. Apache 1.3 надежен, как скала, хорошо поддерживается и отлично документирован. Программа обладает бесконечными возможностями расширения и настройки за счет установки дополнительных модулей. Поговорка «Лучшее — враг хорошего» остается актуальной, особенно в компьютерных отраслях. С другой стороны, Apache 2 заметно отличается от Apache 1.3 по архитектуре. Apache 2 работает быстрее, эффективнее и гораздо лучше масштабируется. Правда, модули 1.3 не работают в 2.0 без перекомпиляции, а в некоторых случаях — без написания заново. К счастью, программа существует уже достаточно давно, и для нее существует множество полезных модулей, готовых к работе. В будущем ситуация
22.1. Введение
357
будет только улучшаться, поскольку усилия разработчиков будут в большей степени направляться на версию 2.0. На момент написания книги серьезные проблемы оставались только с модулем РНР. Разработчики РНР предупреждают, что РНР не следует использовать с Apache 2.0 в условиях коммерческой эксплуатации систем, но возможно, когда вы будете читать эту книгу, работа над РНР 5 уже будет закончена. Если вы собираетесь ограничиться только статическими страницами, РНР не понадобится, но если вы намерены генерировать динамический контент и строить веб-приложения — РНР станет хорошей альтернативой для Perl, поскольку этот сценарный язык был разработан специально для веб-программирования. За информацией обращайтесь на сайт http://us3.php.net.
Исходные тексты или пакеты? Установка из пакета выполняется быстрее, но в вашем распоряжении будут лишь те возможности, которые счел нужным вам предоставить автор пакета. Однако этот вариант нельзя назвать самым простым — в разных дистрибутивах используются разные имена файлов и пакетов. Чтобы разобраться в документации Apache, вам придется вычислить все различия. Установка по исходным текстам требует чуть больших усилий: вы должны вручную создать стартовый сценарий, создать владельца и группу Apache, а также задать все параметры компиляции, включая местонахождение файлов. За это вы сможете точно определить конфигурацию сервера. Кроме того, при использовании Apache 2.0 вам уже не придется перекомпилировать двоичный файл для того, чтобы добавить или удалить модуль. К числу новых возможностей версии 2 принадлежат объекты DSO (Dynamic Shared Objects), которые являются аналогами загружаемых модулей ядра. Просто добавьте или удалите нужные модули, не трогая двоичного файла httpd.
Самостоятельный хостинг или услуги? Существует несколько вариантов организации хостинга. Во-первых, можно создать веб-сервер на физическом компьютере (скажем, находящемся у вас дома или в офисе). Преимуществами этого варианта являются удобство и полный контроль — если что-то пойдет не так, вы сможете немедленно исправить ситуацию. С другой стороны, вам также придется решать все проблемы с сопровождением, безопасностью и обслуживанием. А если подключение к Интернету перестанет работать, вам придется лично обращаться к вышестоящему поставщику. Впрочем, главным недостатком все же является высокая стоимость скоростных каналов. Другой вариант — использование коммерческих услуг веб-хостинга. За ежемесячную плату в вашем распоряжении оказываются ресурсы (дисковое пространство, пропускная способность канала и функциональность) общего сервера. Такой вариант может оказаться вполне приличным, если найти качественного поставщика. Как правило, коммерческий хостинг включает массу функций: FTP, MySQL, РНР, CGI, Perl, POP/IMAP, SpamAssassin и т. д. Не ищите самый дешевый вариант — в общем случае вы получаете ровно то, за что заплатили. Не верьте утверждениям о «неограниченной пропускной способности» и прочей чуши.
358
Глава 22. Веб-сервер Apache
Третий вариант — аренда оборудования и подключения в коммерческом вычислительном центре с самостоятельной установкой и сопровождением программного обеспечения. Это позволит сэкономить на канале, поскольку вы будете использовать общую линию. Хороший центр обеспечивает бесперебойное электропитание, резервные интернет-каналы и хорошую физическую безопасность. Специалисты следят за использованием канала и серверов и не прощают «пожирания ресурсов» и других злоупотреблений. Помните: чем больше вы хотите, тем дороже это будет стоить — бесплатный сыр бывает только в мышеловке. К предложениям из разряда «слишком хорошо, чтобы быть правдой» стоит относиться с подозрением.
22.2. Установка Apache 2.0 по исходным текстам Проблема Требуется установить Apache 2.0 по исходным текстам, чтобы сервер был настроен именно так, как вам нужно. Для этого необходимо знать параметры configure и состав доступных модулей. Также вам хотелось бы использовать объекты DSO (Dynamic Shared Objects), чтобы модули можно было добавлять и удалять без перекомпиляции двоичного файла httpd.
Решение Установка Apache 2.0 выполняется в стандартной последовательности configuremake-make install. Из-за большого количества параметров компиляции вам придется потратить немного времени на выбор тех возможностей, которые вам нужны. Также необходимо знать, какие значения используются по умолчанию. В следующем примере представлена типичная установка. Для начала загрузите и распакуйте tar-архив Apache (на момент написания книги последней стабильной версией была версия 2.0.50). Постройте список всех файлов в системе: # find / | grep -v -e Vproc/ -e */tmp/ -e */dev/ > apache2-preinstall .list
Также можно сгенерировать аналогичный список после установки программы, чтобы сравнить два списка командой diff и определить состав установленных файлов. Перейдите в каталог, в который был распакован архив, и выведите описания всех параметров конфигурации: # ./configure --help | less
По умолчанию все файлы размещаются в/usr/local/apache2. В нашей конфигурации будет использовано несколько стандартных каталогов, а стандартный набор модулей будет слегка изменен: # ./configure --prefix=/etc/httpd \ --exec-prefix=/usr \ --bindir=/usr/bin \
22.2. Установка Apache 2.0 по исходным текстам
359
--sbindir=/usr/sbin \ --mandir=/usr/share/man \ --sysconfdir=/etc/httpd/conf \ --includedir=/usr/inc!ude/httpd \ --libexecdir=/usr/lib/httpd/modules \ --datadir=/var/www/ \ --with-mpm=prefork \ --enable-mods-shared="rewrite" \ --disable-cgi Запустите make и make install: # make # make install
Сгенерируйте новый список файлов после установки: # find / | grep -v -e Л/ргос/ -е Vtmp/ -e */dev/ > apache2-postiinstall .list Запустите Apache: # apachectl start
Откройте веб-страницу по умолчанию; для этого в браузере вводится адрес http://localhost. Примерный вид страницы показан на рис. 22.1. Location £3ii view Qa gaokmarks Idols Settings Vtfndaw Help
Gt- Q 0 • Z t
'
v
.
< [ 1
~
' * * ' • •
•
• a ' •
•
If you can see this, it means that the installation of the Apache web server software on this system was successful You may now add content to this directory and replace this page.
Seeing this instead of the website you expected? This page is here because the site administrator has changed the configuration of this web server. Please contact the person responsible for maintaining this server with questions. The Apeche Software Foundation, which wrote the web server software this site administrator is using, has nothing to do with maintaining this site and cannot help resotve configuration issues.
The Apache documentation has been included with this distribution. You are free to use the image below on an Apache-powered web server Thanks for using Apache!
"Г Рис. 2 2 . 1 . Веб-страница Apache по умолчанию
Комментарий Если вы не добавляете DSO на стадии конфигурации, но хотите включить поддержку DSO для добавления модулей в будущем, включите следующую строку в ./configure: --enable-so
Никаких отрицательных последствий от этого не будет, не считая дополнительных расходов дискового пространства для построения всех доступных модулей во время установки. В дальнейшем добавление и удаление модулей сводится
360
Глава 22. Веб-сервер Apache
к редактированию httpd.conf и перезапуску Apache (см. следующий раздел). Чтобы построить все модули на стадии компиляции, укажите следующий параметр: ••enable-mods-shared=all
Для Apache существует множество модулей в формате RPM и .deb, поэтому при желании модули можно установить из пакетов. При этом возникает серьезная проблема: авторы пакетов используют разные имена файлов и руководствуются собственными представлениями о том, где должны находиться файлы Apache. Если ваш дистрибутив Linux содержит хорошую документацию (как, скажем, Red Hat и SuSE), ничего страшного не произойдет. Но при отсутствии нормальной локализованной документации вам предстоит потратить немало времени, пытаясь отыскать нужные файлы.
См. также Глава 4; полное описание параметров конфигурации (http://httpd.apache.org/ docs-2.0/prograrns/configure.htmL).
22.3. Добавление новых модулей после установки Проблема В конфигурацию сервера Apache была включена поддержка DSO; теперь вы хотите добавить дополнительные модули (как модули Apache, так и сторонние).
Решение Допустим, вы изменили свое решение и захотели добавить поддержку mod_cgi для запуска сценариев. Так как поддержка DSO была включена во время установки (см. предыдущий раздел), это делается легко. Для встроенных модулей Apache команда должна выполняться с верхнего уровня дерева сборки Apache, с установкой модуля в каталог libexecdir, заданный при установке: # ./configure --prefix=/usr/1ib/httpd/modules/ --enable-cgi-shared # make i n s t a l l
Включите следующую директиву в httpd.conf: LoadModule rewrite module /usr71ib/httpd/modules/mod_cgi.so Перезапустите Apache, и все заработает. Добавление сторонних модулей может производиться двумя способами. Если вы сохранили дерево сборки Apache, используйте синтаксис # ./configure --add-module=module_type:/mod_foo.c --enable-foo=shared # make i n s t a l l
Или воспользуйтесь утилитой apxs для построения стороннего модуля за пределами дерева сборки: # apxs -с mod_foo.c # apxs -i -a -n foo mod_foo.la
22.4. Настройка разрешений и принадлежности файлов Apache
361
К сожалению, на практике не все так просто. Многие сторонние модули Apache обладают специализированными параметрами конфигурации и установки. Обязательно проверьте инструкции к модулю. Чтобы удалить модуль, достаточно закомментировать запись в httpd.conf и перезапустить Apache.
Комментарий Утилита ApacheToolbox упрощает операции с модулями. Ее можно загрузить по адресу http://www.apachetoolbox.com.
См. также Раздел 22.5; http://localhost/manual/dso.html; http://localhost/manual/mod/; документация Apache 2.0 (http://httpd.apache.Org/docs-2.0).
22.4. Настройка разрешений и принадлежности файлов Apache Проблема Требуется задать файловые разрешения для установки Apache.
Решение Сначала убедитесь в том, что двоичный файл httpd принадлежит только root, защищен от записи и не может читаться непривилегированными пользователями! # chown root:root /usr/sbin/httpd # chmod 511 /usr/sbin/httpd Затем создайте непривилегированного пользователя специально для httpd: # useradd -с "httpd owner" -d /dev/null -s /bin/false -u httpd Откройте файл /etc/httpd/conf/httpd.conf и настройте httpd на запуск с правами этого пользователя (секция 2): User httpd Затем создайте уникального пользователя и группу, которым будут принадлежать каталоги веб-страниц (в следующем примере web): # # # #
groupadd -g 60 web useradd -с "Web Server" -d /var/www/ -g web -s /bin/false -u web chown -R web:web /var/www/http chmod -R 755 /var/www/http
He забудьте включить в группу web пользователей, которым разрешено редактирование веб-страниц. Перезапустите Apache: # apachectl restart
362
Глава 22. Веб-сервер Apache
Комментарий Двоичный файл httpd принадлежит root, но работает с разрешениями root столько времени, сколько необходимо для запуска производных процессов, запускаемых с правами пользователя с минимальными привилегиями. Httpd вообще не работает с сетью; вся работа выполняется производными процессами. По умолчанию используется учетная запись nobody, но делать этого не стоит — она используется слишком часто и является излюбленным объектом для атак. Никогда не используйте существующие системные учетные записи; всегда создавайте для демонов и серверов уникальных пользователей. При помощи разрешений файловой системы Linux можно управлять тем, кому из пользователей будет разрешен доступ к подкаталогам и файлам веб-страниц. Apache — надежно защищенное приложение. Как правило, для атак чаще всего используются слабости операционной системы, а также дефекты, связанные с добавлением сценариев на стороне сервера, добавлением веб-форм и генерированием динамического контента в PHP, Perl, Python и т. д.
см. также http://httpd.apache/org/docs-2.0/misc/securi ty_tips.html.
22.5. Обращение к локальному руководству Apache Проблема Разработчики Apache хорошо потрудились над документацией; руководство находится по адресу http://httpd.apache.Org/docs-2.0/. Но, конечно, было бы неплохо иметь локальную копию.
Решение При построении Apache по исходным текстам руководство устанавливается в каталог —datadir. Если настройка производилась в соответствии с разделом 22.2, это будет каталог/var/www/http/manual. Вы можете читать страницы в этом каталоге, но гиперссылки работать не будут. Более удобный способ — запустить Apache и читать документацию в браузере; откройте браузер и введите адрес http://local.host/manual..
Комментарий Если сервер Apache устанавливался из пакетов, вам потребуется отдельный пакет документации. В Debian он называется apache2-doc. Пользователям RPM потребуются пакеты apache2-manual или httpd-manual.
См. также http://httpd. apache, org/docs-2.0/.
22,7. Перенаправление URL в новый каталог
363
22.6. Создание простого веб-сервера Проблема Требуется построить простой общедоступный веб-сервер для одного домена. Сервер ограничивается поставкой статических страниц HTML.
Решение После установки Apache 2.0 убедитесь в том, что местонахождение каталога вебсайта в httpd.conf задано верно и указанный каталог существует: DocuraentRoot
/var/www/bratgrrl
Скопируйте веб-страницы в каталог DocumentRoot (в данном примере/var/www/ bratgrrl) и запустите Apache: # apachectl start Настройте DNS и включите ссылку на свой веб-сервер.
Комментарий Для создания общедоступного веб-сервера потребуется зарегистрированное доменное имя и статический IP-адрес. Хосты локальной сети обращаются к веб-сайту по IP-адресу или имени хоста: http://windbag http://192.168.1.5 Это хороший способ проверки подключения и предварительного просмотра веб-страниц. Если сервер Apache устанавливался из пакетов, поищите стартовый сценарий в /etc/init.d. Скорее всего, это будет один из следующих файлов: # /etc/init.d/apache2 # /etc/init.d/httpd # /etc/init.d/httpd2
Убедитесь в том, что из сценария вызывается apachectl, а не двоичный файл httpd. Разработчики Apache рекомендуют запускать и останавливать Apache только сценарием apachectl.
См. также ^aBa24;http://httpd.apache.org/docs-2.0/mod/core.html#documentroot;http://localhost/ manual/mod/core.html.en#docurnentroot.
22.7. Перенаправление URL в новый каталог Проблема Вы капитально переработали структуру своего веб-сайта. Раньше он представлял собой хаотичное нагромождение файлов, поэтому вы создали его заново. Но ссылки
364
Глава 22. Веб-сервер Apache
изменились, а все закладки, созданные посетителями сайта, остались прежними. А заодно все ссылки на сайт в интернет-статьях и поисковых системах тоже стали бесполезными. Можно ли с этим что-нибудь сделать? *
Решение Включите директивы Rewrite в файл httpd.conf. Пример перенаправления URL: RewriteEngine on RewriteRule '/olddir/(.*)$ /newdir/$l Правило означает, что обращения к http://www.bratgrrl.com/olddir/ и всем файлам и каталогам, находящимся в olddir/, будут перенаправляться в http://www.bratgrrl.com/ newdir/.
Комментарий Приведенное базовое правило Rewrite решает одну из самых распространенных задач, связанных с перенаправлением. Как видите, перемещение целых каталогов реализуется достаточно просто. Если перемещается большое количество отдельных файлов, вам придется написать много правил.
См. также The URL Rewriting Guide (http://localhost/manual/misc/rewriteguide.html).
22.8. Предоставление пользователям индивидуальных веб-каталогов Проблема Требуется предоставить пользователям индивидуальные веб-каталоги, к которым посетители сайта могут обращаться в формате www.domain.com/~user. Это самый простой и быстрый способ создания пользовательских общедоступных веб-страниц, который обходится без хлопот с DNS и виртуальными хостами.
Решение Создайте каталог пользователей users в /var/www (или другом каталоге, где хранятся файлы вашего сайта). Создайте для каждого пользователя собственный подкаталог (например, /var/www/users/peters). Поместите копию любого файла index.html в /peters для тестирования. Внесите в httpd.conf следующую запись: USerDir /var/www/users Перезапустите Apache и попробуйте ввести следующий адрес в браузере: http://localhost/-peters/ В браузере должна появиться тестовая страница.
22.10. Многодоменный хостинг в Apache
365
Комментарий Не забудьте назначить разрешения для каждого пользовательского каталога, чтобы доступ к нему предоставлялся только законным пользователям. Назначьте владельцем пользователя и его группу; задайте разрешения 755, потому что вебстраницы должны быть общедоступными для чтения.
См. также http://Localhost/manual/howto/public_html.htmL.
22.9. Запуск Apache при загрузке системы Проблема Ввести команду apachectl start не так уж трудно, и все же вы предпочитаете, чтобы Apache запускался автоматически при загрузке системы. Apache устанавливался по исходным текстам — где находится сценарий init?
Решение Apachectl. — это и есть сценарий init. Скопируйте его в /etc/init.d или создайте мягкую ссылку, а затем включите его на тех уровнях выполнения, на которых он должен запускаться (о настройке уровней выполнения рассказано в главе 7).
Комментарий Пользователи Debian могут воспользоваться шаблоном /etc/init.d/skeleton для создания стартового сценария любой службы или демона.
См. также http://localhost/manual/invoking.html.
22.10. Многодоменный хостинг в Apache Проблема Один сервер Apache должен обслуживать несколько доменов с общим IP-адресом. Вы уже зарегистрировали все доменные имена, и для каждого домена настроена информация DNS.
Решение Воспользуйтесь директивой Apache VirtuaLHost, обеспечивающей поддержку виртуальных хостов. Следующий файл httpd.conf настроен на обслуживание двух доменов:
Збб
Глава 22. Веб-сервер Apache
NameVirtualHost *:80 <VirtualHost *.80> ServerName www.tuxcomputing.com ServerAlias tuxcomputing.com *.tuxcomputing.com DocumentRoot /var/www/tuxcomputing ServerAdmi n admi n@tuxcomputi ng.com </VirtualHost> <VirtualHost *.80> ServerName www.bratgrr1.com ServerAlias bratgrrl.com *.bratgrrl.com DocumentRoot /var/www/bratgrrl ServerAdmin adminPbratgrrl.com </VirtualHost>
Для каждого домена создается отдельный корневой каталог, в котором хранятся файлы сайта. Это позволит вам легко создавать субдомены (скажем, webmail.bratgrrl.com и wacko.games.tuxcomputing.com). Однако не стоит надеяться, что все заработает само собой — для всех доменов и субдоменов придется создать записи DNS типа А. ПРИМЕЧАНИЕ После того как вы начнете использовать виртуальные хосты, для каждого домена необходимо создать директиву VirtualHost. Директивы VirtualHost замещают глобальные директивы из httpd.conf. В них могут использоваться почти все директивы httpd.conf, что позволяет настроить каждый виртуальный хост так, как вы сочтете нужным.
Комментарий Определение виртуальных хостов является самым простым механизмом обслуживания нескольких доменов одним сервером Apache. Настройка записей А для большого количества субдоменов может быть делом утомительным, и все же это лучше, чем использовать доменные групповые обозначения (wildcards), при которых на ваши серверы будет поступать весь трафик, включающий доменное имя. Например: randomstuff.bratgrrl .com real 1 у.wei rd.randomstuff.bratgrrl.com Спамеры злоупотребляют доменными групповыми обозначениями, так что будьте осторожны и настраивайте в записях DNS только точные доменные имена. В директивах VirtualHost доменные групповые обозначения приемлемы, потому что трафик будет поступать только по именам, явно определенным в DNS.
См. также http://localhost/manual/vhosts/name-based.html.
22.12. Предотвращение доступа к веб-сайтам локальных сетей из Интернета
367
22.11. Ведение отдельных журналов для виртуальных хостов Проблема Виртуальные хосты сильно загружены, и разобраться в общем файле журнала становится трудно. Как назначить каждому виртуальному хосту собственный журнал?
Решение Измените записи httpd.conf всех виртуальных хостов и задайте для них отдельные файлы журналов: <VirtualHost *:80> ServerName www.tuxcomputing.com ServerAlias tuxcomputing.com *.tuxcomputing.com DocumentRoot /var/www/tuxcomputing ErrorLog /var/www/tuxcomputing/logs errorlog AccessLog /var/www/tuxcomputing/logs accesslog combined ServerAdmi n admi n@tuxcomputi ng.com </VirtualHost> Обратите внимание: для журнала обращений (AccessLog) указан специальный формат combined. Файл httpd.conf содержит четыре готовых директивы LogFormat: LogFormat LogFormat LogFormat LogFormat
"*h *1 *u * t \"*r\" *>s *b \"*{Referer}i\" \"«{UserAgent}i\"" combined "*h XI Xu * t \"Xr\"X>s *b" common "X{Referer}i •> XU" referer "X{User-agent}i" agent
Если эти форматы вам не подходят, вы легко можете определить собственный формат. Полное описание переменных приведено в документе http://local.host/ manual/mod/mod_log_config.html.
См. также http://localhost/manual/mod/mod_log_config.htmL
22.12. Предотвращение доступа к веб-сайтам локальных сетей из Интернета Проблема В вашей локальной сети создан персональный веб-сайт для хранения календарей, документов и т. д. А может быть, ваша компания решила построить для каждого отдела веб-сайт, который должен быть изолирован от внешнего мира. Хотя
368
Глава 22. Веб-сервер Apache
локальная сеть хорошо защищена, нужна полная уверенность в том, что никакой доступ к веб-сайтам из-за пределов локальной сети в принципе невозможен.
Решение Желаемой цели можно добиться двумя способами в зависимости от типа веб-сайта. Решение для виртуальных хостов или автономных веб-сайтов Apache приводится в этом разделе. Для сайтов типа UserDir (см. раздел 22.8) обращайтесь к разделу 22.13. Чтобы доступ к сайту ограничивался рамками локальной сети, подсети или некоторыми доменными именами, следует задать простые правила фильтрации по IP-адресам: <VirtualHost *.80> ServerName www.bratgrr1.com ServerAiias bratgrrl.com *.bratgrrl.com DocumentRoot /var/www/bratgrrl ServerAdmin adminPbratgrrl.com order deny, allow allow from 192.168.1. deny a l l </VirtualHost>
или по доменным именам: allow from oreilly.net
Комментарий Во многих организациях используются «внутренние» веб-сайты, не предназначенные для посторонних. Даже если в сети установлены тщательно настроенные брандмауэры, стоит потратить пару минут на определение правил доступа; тем самым вы обеспечите дополнительную страховку. Страницы UserDir с URL вида oreilly.net/~carla защищаются на уровне каталогов, а не доменных имен (см. следующий раздел).
См. также Раздел 22.13.
22.13. Парольная защита отдельных каталогов Проблема Требуется ограничить доступ не ко всему домену, а лишь к некоторым страницам конкретного каталога. Допустим, имеется веб-страница UserDir (см. раздел 22.12), которую необходимо защитить, потому что хранящиеся в ней рабочие документы не должны быть доступны для любопытных коллег. Страница должна быть доступна только для вас или для других доверенных пользователей — как это сделать?
22.13. Парольная защита отдельных каталогов
369
Решение В Apache предусмотрены простые методы аутентификации пользователей для работы с каталогами: Basic и Digest. Это весьма упрощенная форма безопасности; не применяйте ее для страниц, содержащих особо важную информацию, или на любых веб-сайтах, имеющих отношение к коммерции или информации о клиентах. Аутентификация Basic и Digest хорошо подходит для локальной сети, когда вы всего лишь хотите оградить любопытных коллег от того, что их не касается. В режиме Basic пароли пересылаются в виде простого текста и тривиально перехватываются, поэтому в этом рецепте используется режим Digest с. применением хеширования MD5. Настройка аутентификации пользователей для каталогов состоит из двух этапов: создания секции <Directory> в файле httpd.conf и создания файла паролей утилитой htpassword. Допустим, вы хотите хранить свои списки контактов, расписания и т. д. по адресу http://oreiLly.net/~michael. При этом информация будет храниться в реальном каталоге /var/www/users/michael. Сначала создайте запись <Directory> в httpd.conf: <Directory /var7www/users/michae1>
AuthType Digest
AuthName "Michael's Protected Files" AuthUserFile /etc/httpd/htpasswd/passwords Require user michael </Directory>
Затем создается файл паролей: $ htpasswd -с /etc/httpd/htpasswd/passwords michael New password: Re-type new password: Adding password for user michael
Ключ -с является признаком создания нового файла. Теперь только пользователь Michael (а также каждый, кто знает пароль Michael) сможет открыть каталог http://oreilly.net/~michaeL
Комментарий Обратите особое внимание на директиву AuthName. Все каталоги с одинаковым значением AuthName не требуют повторной аутентификации после первого входа. Это экономит время, но также создает уязвимость в системе безопасности, поэтому будьте внимательны с выбором этого атрибута. Что делать, если у вас нет доступа к httpd.conf, но вы не хотите постоянно приставать к администратору Apache с напоминаниями об обновлениях и изменениях? Пусть администратор настроит для вас возможность использования файлов. htaccess, и вы сможете управлять доступом самостоятельно. Файл .htaccess предназначен для настройки доступа к каталогам (а не к доменам). Администратор должен внести следующую запись в httpd.conf (в этом примере всем пользователям /var/www/users разрешается использование файлов .htaccess): <Directory /var/www/users> AllowOverride AuthConfig </Directory>
370
Глава 22. Веб-сервер Apache
Не забудьте перезапустить Apache после изменения httpd.conf. В дальнейшем пользователь Michael может создать файл .htaccess с директивами, приведенными в подразделе «Решение». Файл должен находиться в каталоге верхнего уровня (в нашем примере/var/www/users/michael). Аутентификация Digest обладает дополнительным преимуществом: она дает лишний повод избавиться от браузера Internet Explorer, в котором она не поддерживается для URL с использованием строк запросов вида http://catsearch.atomz.com/search/catsearch/?sp-a=spl000a5a9&sp-f=IS0-8859-l&spt=cat_search&sp-q=apache&search=Go Статические URL (вида http://linux.oreilly.com) обычно нормально работают в IE, так что с простыми, статическими страницами эта проблема не возникает. Впрочем, IE в любом случае представляет большую угрозу для безопасности системы и не поддерживает многие веб-стандарты, но если вам нужна еще одна причина избавиться от этой программы, то она у вас есть. Если вы хотите выбрать единый браузер для смешанной сети, то Mozilla отлично поддерживает аутентификацию Digest, работает па множестве разных платформ, соответствует стандартам W3C и обладает массой полезных возможностей, отсутствующих в IE: вкладки, осмысленные cookie, подавление всплывающих окон, управление паролями и т. д.
См. также Authehtication, Authorization and Access Control (http://localhost/manual/howto/ auth.html); Apache SSL/TLS Encryption (http://local.host/manual/ssl.); домашняя страница W3C (http://www.w3.org).
22.14. Файл robots.txt Проблема Поисковые системы находят сайты, индексируют их и помогают найти их своим посетителям. Но некоторые из них начинают раздражать вас слишком частыми посещениями ботов, поэтому вы хотите избавиться от них. Кроме того, па сайте имеются каталоги и страницы, которые не должны индексироваться.
Решение Создайте файл с ограничениями robots.txt и поместите его в корневой каталог вебсайта. Файл robots.txt выглядит примерно так: # Страницы, индексирование которых # не разрешается ботам User-agent: * Disallow: /error/ Disallow: /users/ Disallow: /cgi-bin/ Disallow: /*.doc$ Disallow: /tmp/ # Перечисление ботов, которым # запрещается доступ к сайту
22.15. Блокировка нарушителей
371
User-agent: BadBot/ Disallow: / User-agent: VeryBadBot/ Disallow: /
Комментарий В файле robots.txt используются директивы User-agent и Disallow. Данные пользовательских агентов можно найти в журналах. Например: "GET /robots.txt HTTP/1.1" "http://www.whois.se/" "SurveyBot/2.3 (Whois Source)" "GET /foo.htm HTTP/1.0" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)" "GET /foo HTTP/1.0" "•" "msnbot/0.11 (+http://search.msn.com/msnbot.htm)" Если вы захотите включить этих ботов в список, записи будут выглядеть так: User-agent: SurveyBot/ Disallow: /cgi-bin/ User-agent: msnbot/ Disallow: / Следите за журналами. Если кто-то создает вам слишком много проблем, в следующем разделе будет рассказано, как полностью оградить нарушителя от вашего сайта при помощи встроенных правил доступа Apache.
См. также http://www.robotstxt.org; http://www.robotstxt.org/wc/active/html/index.htmL
22.15. Блокировка нарушителей Проблема Вам надоедают боты поисковых систем, анализаторы сайтов или другие нарушители, которые попусту забивают ваш канал. Как заблокировать им доступ к сайту?
решение Воспользуйтесь средствами управления доступом Apache в httpd.conf. Следующий метод позволяет заблокировать доступ для конкретных IP-адресов или хостов: Order allow.deny
Allow from all Deny from 12.34.56.78 # Этот нарушитель создает ссылки на нашу графику Deny from *.booger.baddomain.net # Надоедливый бот поисковой системы foo.com Deny from search.foo.com
комментарии Просмотр журналов часто приносит неприятные сюрпризы. Просто удивительно, сколько трафика поглощают боты поисковых систем или пользователи,
372
Глава 22. Веб-сервер Apache
загружающие весь сайт программой wget или ее аналогом. Многие боты игнорируют файл robots.txt и обрабатывают сайты так, как им вздумается. Автоматизированные программы сбора данных — дело хорошее, но слишком многие пользователи выпускают их в Интернет, совершенно не задумываясь о последствиях. В разделе 22.21 рассказано об использовании Webalizer — утилиты, упрощающей анализ журналов и выявление нарушителей.
См. также http://localhost/manual/howto/auth.html.
22.16. Создание пользовательских страниц ошибок Проблема При переходе по несуществующей ссылке пользователь получает холодную, бездушную страницу ошибки 404 Apache: «Not found The requested URL/foo was not found on t h i s server. Apache/2.0.50(Unix) Server at http.bratgrrl.com Port 80»
Но вы бы предпочли, чтобы страница ошибки соответствовала стилю оформления вашего веб-сайта, была дружелюбной и информативной.
Решение Создайте собственную страницу (в нашем примере 404-custom.html) и включите в файл httpd.conf директиву ErrorDocument со ссылкой на эту страницу: ErrorDocument 404 /error/404-custom.html По умолчанию страницы ошибок хранятся в каталоге /error.
Комментарий Не изменяйте стандартную страницу ошибки, входящую в поставку Apache (чтобы найти стандартные страницы ошибок, загляните в каталог DocumentRoot; в примерах настоящей главы они хранятся в каталоге /var/www/error). Вообще говоря, вы можете немного подправить стандартную страницу (см. следующий раздел), но лучше создать ее заново, поскольку стандартные страницы интернационализированы. И даже если вы не собираетесь использовать их прямо сейчас, возможно, их стоит сохранить просто на всякий случай. Apache может использовать интернационализированные страницы для автоматической доставки сообщений об ошибках на языке посетителей сайта при помощи Content Negotiation (см. раздел 22.19). Вместо выдачи страницы ошибки в файле httpd.conf можно задать простое сообщение: ErrorDocument 403 "Nobody here, you go away now"
22.18. Вывод содержимого каталогов без усечения имен файлов
373
См. также http://localh.ost. manual/mod/core, html. еп#еггогсЬситеп1страниц.
22.17. Настройка стандартных страниц ошибок Apache Проблема Вы хотите использовать стандартные страницы ошибок Apache в сочетании с Content Negotiation (см. раздел 22.19), чтобы сообщения об ошибках выдавались на языке посетителей сайта. Но эти страницы слишком лаконичны и неприглядны — нельзя ли как-то украсить их, не нарушая кода страницы?
г ешение Разработчики Apache позаботились обо всем. В примерах настоящей главы стандартные страницы ошибок хранятся в каталоге /var/www/error. Открыв этот каталог, вы обнаружите в нем подкаталог/include с тремя файлами: bottom.html, spacer.html и top.html. В файлы bottom.html и spacer.html можно включить любой текст, графику, ссылки и вообще все, что вы пожелаете.
Комментарий В настройке страниц ошибок проявляется забота о посетителях сайта; на видоизмененных страницах можно вывести полезную информацию. Но если вы намерены полностью переработать страницы ошибок, лучше создать свои собственные страницы заново (см. предыдущий раздел).
См. также http://localhost/manual/content-negotiation.html.
22.18. Вывод содержимого каталогов без усечения имен файлов Проблема Некоторые страницы сайта выводят списки файлов, которые пользователь может загрузить в браузере. Apache выводит содержимое каталогов с усечением имен файлов: Parent Directory 27-Jul-2004 09:39 libpam-smbpass_3.0.5..> 27-Jul-2004 09:17 298k libsmbclient-dev_3.0..> 27-Jul-2004 09:17 581k libsmbc1ient_3.0.5-l..> 27-Jul-2004 09:17 467k
Как организовать отображение полных имен файлов?
374
Глава 22. Веб-сервер Apache
Решение Найдите в файле httpd.conf следующий фрагмент: # IndexOptions: Управление внешним видом страниц с листингани # каталогов, сгенерированными сервером IndexOptions Fancylndexing VersionSort и добавьте директиву NameWidth: IndexOptions Fancylndexing VersionSort NameWidth=* Звездочка означает расширение по максимальной длине файла. Также можно задать лимит в 40 символов или около того, чтобы листинг нормально читался, даже если в нем попадется файл с очень длинным именем. IndexOptions Fancylndexing VersionSort NameWidth=40
Комментарий Параметр также может задаваться для отдельных виртуальных хостов. Директивы VirtualHost переопределяют глобальные директивы.
См. также http://locaLhost/manual/mod/mod_autoindex.html.
22.19. Использование Content Negotiation для предоставления страниц на разных языках Проблема Посетители вашего веб-сайта говорят на разных языках. Требуется, чтобы Apache автоматически распознавал язык каждого посетителя и выдавал страницы на соответствующем языке.
Решение В Apache имеется все необходимое для выполнения этой работы на стороне сервера. Предоставьте страницы, переведенные на поддерживаемые языки, а затем настройте файл карты типов со ссылками на разные страницы. Этот файл должен иметь расширение .var. На стороне клиента посетитель должен настроить браузер на определенный язык. Стандартная индексная страница Apache дает хорошее представление о работе этого механизма (см. рис. 22.1 в разделе 22.2). Найдите каталог htdocs — он содержит все разновидности стандартного файла index.html: /var/www/index.html .ca
/var/www/index.html.cz.iso8859-2 /var/www/index.html.de /var/www/index.html.dk /var/www/index.html.ее
22.19. Использование Content Negotiation для предоставления на разных языках
375
/var/www/index.html.el /var/www/index.html.en /var/www/index.html.es /var/www/index.html .et /var/www/i ndex.html.fr
Теперь откройте файл /var/www/index.html.var: URI: index.html.ca Content-language: ca Content-type: text/html URI: index.html.cz.iso8859-2 Content-language: cs Content -type: text/html;charset=ISO-8859•2 URI: index.html.de Content-language: de Content-type: text/html Как видите, задается только путь к файлу, директива Content-Language с указанием языка и директива Content-type:text/html для каждого файла. Последняя запись файла используется по умолчанию, если механизм Content Negotiation не сработал. Она должна указывать на страницу, которая содержит ссылки на индексные страницы на разных языках: URI:fall back.html Content-type: text/html Остается убедиться в том, что следующая строка httpd.conf раскомментирована (как это должно быть по умолчанию): AddHandler type-map .var
Комментарий Хотя Content Negotiation официально является частью стандарта HTTP/1.1, этот механизм еще не получил всеобщего признания. Не все браузеры поддерживают его, и не все пользователи настраивают свои браузеры должным образом. Кроме того, Content Negotiation замедляет обработку запросов. На рис. 22.2 показана страница настройки языковых предпочтений в Mozilla. Когда такой пользователь посещает многоязыковой веб-сайт, ему будут автоматически предоставлены страницы на французском языке. Apache видит в заголовках HTTP следующую информацию: Accept-Language: fr: q=1.0, en: q=0.5
Если французских страниц нет, Apache выдает второй вариант — английские страницы. Если все попытки согласования контента оказываются неудачными, посетитель получает ошибку 406: Not Acceptable An appropriate representation of the requested resource /foo/index.html could not be found on this server. Available variants: index-en.html index-fi.html Конечно, вы можете создать собственную страницу ошибки 406 (см. раздел 22.16).
376
Глава 22. Веб-сервер Apache
Languages
ppearance ^Navigator History
Lui guages for 'A'eb сэд*ъ .ver> pages .=>r>» sometimes available .n more tfian one anguage rhoosi • .
Helper Applications I--Smart Browsing '•Internet search • Tabbed Browsing ' Downloads > Composer l> Privacy S< Security 6> Advanced
. • • • • . . ! .
. . .
. •
,
:
Г ;
I
Languages in oroet of preference H C T K r-;': r o i r . i - !!r i i j
English/United States [en-us]
j - иуд; p c » i j
:
ГЖ
j [_< enctl
%&№%j
Рис. 22.2. Настройка языковых предпочтений в Mozilla
См. также RFC 2616; http://localhost/manual/content-negotiation.htmL
22.20. Использование эмблем Проблема На многих веб-сайтах используются эмблемы (favicons) — например, на сайте http:// www.freebsd.org это маленький чертик, который отображается в адресной строке браузера посетителя и в списке закладок. Вы хотите создать эмблему и для своего сайта.
Решение Для этого необходимо создать изображение favicon.ico в точно выдержанном формате (это должен быть настоящий файл .ко, а не переименованный файл .jpg) и включить некоторые записи в httpd.conf и заголовки веб-страниц. Эмблема должна иметь размеры 16x16 пикселов, содержать 16 цветов (4-битовая цветовая глубина) и называться favicon.ico. Вам потребуется графический редактор, умеющий создавать файлы .ico, — например, Gimp, Babygimp или Kiconedit Редактор Kiconedit особенно прост и удобен в использовании, хотя для его использования потребуется базовая установка KDE. Создав файл favicon.ico, сохраните его в корневом каталоге Datadir, который в примерах настоящей главы соответствует /var/www/. Включите в httpd.conf следующую запись: AddType image/x-icon .ico
22.21. Просмотр журналов обращений Apache с использованием Webalizer
377
Затем добавьте следующие строки в заголовки веб-страниц: <1ink rel =icon href="/favicon.ico" type="image/x-icon"> <link rel ^"shortcut icon" href="/favicon.ico" type="image/x-icon"> Первая строка обеспечивает отображение эмблемы рядом с URL вашего сайта в браузере посетителя, а вторая — отображение эмблемы в списках закладок.
Комментарий Если вы не увлекаетесь созданием собственных эмблем, проведите поиск в Google по словам «favicon clip art» или «favicon gallery». Вы найдете множество готовых эмблем и сможете выбрать из них нужную. Если сервер обслуживает несколько виртуальных хостов, каждый из них может иметь собственную эмблему. Для этого следует включить строку AddType image/ x-icon в каждую директиву VirtualHost
См. также Kiconedit (http://wl.1358.teLia.com/~ul35800018/prog.htmlttKICONEDIT); The Gimp (http://www.gimp.org); Babygimp (http://babygimp.sourceforge.net).
22.21. Просмотр журналов обращений Apache с использованием Webalizer Проблема Просмотр access_log — занятие не из приятных. Журнал огромен, состоит из простого текста, и от его просмотра голова идет кругом. Нет ли какой-нибудь удобной графической программы просмотра и анализа журналов, с цветами и графиками?
Решение Программа Webalizer автоматически генерирует страницы HTML с гиперссылочными цветными графиками, построенными по данным access_log. Загрузите и установите Webalizer обычным способом; программа распространяется в виде пакетов и исходных текстов. После завершения установки проверьте ее следующей командой: # webalizer /etc/httpd/logs/access_log Webalizer V2.01-10 (Linux 2.4.21) locale: С Using logfile /etc/httpd/logs/access_log (elf) Creating output in /var/www/webalizer Hostname for reports is 'windbag' Reading history file... /var/www/webalizer/ webalizer.hist Reading previous run data... webalizer.current Saving current run data... [08/08/2004 15:31:06] Generating report for August 2004 Generating summary report Saving history information... 107 records (97 ignored) in 0.15 seconds
Введите адрес /var/www/webalizer/index.html в браузере. Примерный вид страницы показан на рис. 22.3.
На рисунке показаны данные всего за несколько дней для веб-сайта, созданного специально для демонстрации материала данной главы. По мере накопления статистики вы сможете просматривать графики практически любых показателей, сохраняемых в журнале, по месяцам, дням и часам. Убедитесь в том, что в файле /etc/webalizer.com правильно заданы пути к файлам: LogFi1е /etc/httpd/1ogs/accessl og OutputDir /var/www/webalizer Hi storyNarae /var/www/webali zer/webali zer.hi st Чтобы сгенерировать обновленную страницу Webalizer, введите команду # webalizer
Комментарий Данные, передаваемые Webalizer, определяются директивой LogFormat в httpd.conf. LogFormat "*h *1 *u * t \"*r\" *>s *b \"*{Referer}i\" \"*{UserAgent}i\"" combined CustomLog logs/access_log combined
Если в журнале отсутствует нужная информация, проверьте директивы LogFormat. Webalizer также содержит простые фильтры для настройки отображаемой статистики; поищите в файле /etc/webalizer.conf.
См. также http://localhost/manuaL/mod/mod_log_config.html; webalizer(l).
Глава 23
Samba
23.1. Введение Samba обеспечивает общий доступ к файлам и принтерам, аутентификацию в локальных сетях Windows и подключения компьютеров Windows к сетям Linux/ Unix. Samba функционирует примерно так же, как контроллер домена Windows NT, если вы предпочитаете доменную модель локальной сети, или как обычная одноранговая сеть Windows, в которой хосты напрямую используют файлы и принтеры друг друга. Кроме того, Samba хорошо справляется с функциями автономного файлового сервера или сервера печати в составе домена или рабочей группы. Хосты Linux могут быть задействованы во всех перечисленных сценариях: одноранговая сеть, домен или централизованный файловый сервер. С совместным доступом к принтерам дело обстоит чуть сложнее, но комбинация CUPS+Samba существенно упрощает эту задачу. Сервер Samba работает во всех разновидностях Unix и в Mac OS X. Любая платформа с поддержкой протокола CIFS/SMB (Common Internet System/Server Message Block) — такая, как VMS, Amiga OS и NetWare — может стать клиентом Samba. На момент написания книги новейшей версией Samba была версия 3.x. Если вы все еще используете версию 2.x, вам определенно стоит обновить ее. Внешне версия 3.x ничем не отличается от 2.x; она поддерживает те же параметры конфигурации и точно так же устанавливается, но ее внутренняя реализация была заметно усовершенствована. У Samba есть еще одно полезное применение, о котором обычно почти не упоминают: общий доступ к файлам между хостами Linux. Для организации общего доступа к файлам в Unix традиционно использовался механизм NFS (Network File System). В принципе его можно использовать и сейчас, но Samba отличается большей защищенностью, простотой в установке и эксплуатации, а также гибкостью — пользователи могут обновлять общие каталоги, входить и выходить из системы, и это не помешает работе Samba. Samba обладает бесчисленными параметрами конфигурации. Впрочем, залогом успешной работы Samba является простота. Начните с минимальной конфигурации и добавляйте только те параметры, которые вам действительно необходимы.
380
Глава 23. Samba
Да, в мире полно знатоков Samba, которые обожают хвастаться своими «навороченными» конфигурациями. Вы может делать то же самое, если вам это покажется интересным. Но если вы просто хотите организовать работу надежного, стабильного сервера, излишне сложные конфигурации не понадобятся. Samba 3 обладает рядом преимуществ перед Samba 2. Вот лишь некоторые из преимуществ Samba 3: О улучшенное быстродействие, особенно с ядром Linux 2.6; О интеграция с Active Directory; О поддержка Юникода. Samba 3 не сможет заменить Active Directory; эта система не обладает всеми возможностями управления пользователями, сетью и ресурсами, существующими в AD. Тем не менее Samba хорошо справляется с функциями файлового сервера в домене Active Directory и управляется точно так же, как все остальные участники Active Directory. В AD используется аутентификация на базе Kerberos, поэтому вам потребуется хорошее понимание Kerberos. Поддержка Юникода также важна, потому что пользователи могут сохранять документы на языках, выходящих за рамки кодировки ASCII, и присваивать файлам имена на своем языке (русском, иврите, арабском и т. д.).
Системные требования Для работы Samba не нужен самый современный и мощный процессор. С другой стороны, желательно иметь побольше оперативной памяти и быстрый жесткий диск. Затраты на покупку оборудования зависят от того, сколько пользователей будут пользоваться услугами сервера, какой объем дискового пространства необходим для хранения файлов и насколько критична непрерывная работа системы. Для небольшой локальной сети (скажем, 50 пользователей или менее) компьютер со старым Pentium 300, 256 Мбайт ОЗУ и трехдисковым массивом IDE RAID 5 сможет нормально выполнять функции централизованного сервера файлов/печати. При использовании RAID 5 полосовая запись обеспечивает скорость, а контроль четности — целостность данных. Конечно, если вы не ограничены в средствах, всегда можно купить высокопроизводительный массив SCSI. Linux хорошо поддерживает SCSI, вы получите более высокую производительность и срок службы. Производительность сервера Samba проще всего проверяется командой ping. Если время отклика превышает 100 миллисекунд, значит, ваш сервер перегружен.
Краткая история протоколов Все началось в старую эпоху IBM и Sytem с системы NetBIOS (Network Basic Input Output System), обеспечивающей интерфейс между приложениями и сетевым оборудованием. Затем компания Microsoft адаптировала NetBIOS для организации общего доступа к файлам по локальной сети; так был создан прямой предок C1FS/SMB. Сначала использовался термин CIFS, затем SMB. Позже компания IBM внесла дополнительные усовершенствования и разработала протокол NetBEUI (NetBIOS Enhanced User Interface), обеспечивающий передачу пакетов в сетях Ethernet и Token Ring. Вспомните, что в то время еще никто не знал, что Ethernet будет править бал, поэтому разрабатывались и тести-
23.2. Построение простого автономного файлового сервера Samba для Windows
381
решались различные сетевые протоколы. Связка из NetBIOS и TCP/IP оказалась особенно эффективной: NetBIOS обеспечивает транспорт пакетов, а TCP/IP — их маршрутизацию (то есть возможность их пересылки в глобальных сетях). Попутно компания Microsoft добавила поддержку аутентификации пользователей и оповещений, чтобы подключенные хосты могли сообщать о своем присутствии друг другу. Возможно, оповещения по принципу «Привет, я здесь!» — не самое элегантное решение, но зато практичное. Компьютерный фольклор утверждает, что в начале 1990-х годов Эндрю Триджеллу (Andrew Tridgell), основному автору Samba, потребовалось связать в сеть его собственные компьютеры с системами DOS и Unix. He удовлетворившись существующими средствами, он изобрел Samba. Остальное было делом времени.
23.2. Построение простого автономного файлового сервера Samba для Windows Проблема Требуется организовать надежный общий доступ к файлам в сети Windows без приобретения серверной лицензии Windows и приобретения нового оборудования. Механизм разрешения имен, TCP/IP и клиенты сетей Microsoft установлены и работают, любой хост может опросить (ping) любой другой хост по имени или IP-адресу. Вы не хотите возиться с паролями, разрешениями и прочими ужасами. Нужен простой, общедоступный, анонимный файловый сервер для хранения и выборки файлов пользователями.
Решение Установите Samba на компьютере с системой Linux, которому будет отведена функция файлового сервера. Затем создайте на сервере Samba общие каталоги. Клиенты Windows должны входить в одну рабочую группу (в данной главе она будет называться «workgroup»). На клиентах Windows должна быть установлена поддержка TCP/IP и протокол клиента сетей Microsoft. Если вы предпочитаете устанавливать Samba по исходным текстам, то общий архив samba-tatest.tar.gz можно будет загрузить по адресу http://www.samba.org. Пользователям RPM для построения сервера потребуются пакеты samba, sambaclient и samba-doc, а пользователям Debian — пакеты samba, samba-common, smbclient и samba-doc. После установки создайте на компьютере Samba каталог для хранения общих файлов и заполните его файлами для тестирования: # mkdir -m 777 /sharedstuff Затем настройте Samba для анонимного доступа. Создайте резервную копию исходного файла/etc/samba/smb.conf и замените его содержимое следующим фрагментом: [global] workgroup • workgroup
382
Глава 23. Samba
netbios name = windbag server string = anonymous Ian file server security = share browseable = yes hosts allow = 192.168.1. [sharel] path • /sharedstuff comment = testfiles readonly = No guest ok = Yes Подставьте название своей рабочей группы и адрес подсети. Имя netbios выбирается произвольно и имеет длину до 15 символов; именно эта строка отображается в окне Сетевое окружение. Имя share должно содержать не более 12 символов. Сохраните и закройте smb.conf. Проверьте файл на наличие синтаксических ошибок командой $ testparm Перезапустите Samba командой # /etc/init.d/samba restart В Red Hat или Fedora используйте команду # /etc/init.d/smb restart
Теперь нужно проверить, работает ли созданная конфигурация. Выполните на сервере Samba следующую команду для вывода общих каталогов. В ответ на запрос пароля нажмите клавишу Enter, потому что пароль не задан: $ smbclient -L windbag Password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.5-Debian] Sharename
Type
Comment
sharel Disk testfiles IPC$ IPC IPC Service (anonymous Ian file server) ADMIN$ IPC IPC Service (anonymous Ian file server) Domain=[Workgroup] 0S=[Unix] Server=[Samba 3.0.5-Debian] Server
Comment
WINDBAG
anonymous Ian file server
Workgroup
Master
WORKGROUP WINDBAG Доступные общие каталоги перечислены под заголовком Sharename. IPC$ и ADMIN$ — административные протоколы общего доступа, а не каталоги. Если сервер Samba подключен к локальной сети, другие хосты также будут перечислены в категории Server. Откройте окно Сетевое окружение на компьютере с системой Windows; пользователи Windows увидят ресурсы workgroup, windbag и sharel на компьютере windbag. Теперь они могут легко загрузить или сохранить файлы в общем каталоге.
23.3. Построение одноранговой сети Windows/Linux
383
Комментарий Samba потребуется несколько минут, чтобы разослать информацию о себе по сети. Если при первой попытке окно Сетевое окружение окажется пустым, подождите пару минут. Представленная конфигурация небезопасна. Директива hosts allow ограничивает доступ локальной подсетью, что отчасти защищает от вредоносных внешних влияний. Но файлы общего каталога открыты для всех желающих; кто угодно сможет прочитать, изменить и удалить их. Впрочем, многие пользователи считают эту конфигурацию удобной. Общий каталог можно сделать доступным только для чтения, чтобы пользователи могли открывать документы, но не сохранять их. Для этого в smb.conf включается директива read only = yes или writeable = по (на ваше усмотрение). Директивы настройки общих каталогов заменяют глобальные директивы, и обе категории директив заменяют конфигурацию по умолчанию, описанную в smb.conf(5). Имена общих каталогов, заключенные в квадратные скобки, содержат не более 12 символов, включая пробелы. Более длинные имена вызовут ошибки в Windows 95/98/Ме и Linux. Имена [global], [homes] и [printers] зарезервированы и имеют специальное значение. В остальном имена каталогов выбираются произвольно.
См. также smb.conf(5).
23.3. Построение одноранговой сети Windows/Linux •
Проблема Анонимный файловый сервер удобен, но еще удобнее одноранговая сеть, в которой пользователи могут обмениваться файлами друг с другом напрямую. Вы хотите, чтобы пользователи Windows и Linux могли делать это без паролей и прочих затруднений.
Решение На хостах Linux достаточно установить серверные и клиентские компоненты Samba, а затем настроить общие каталоги, как описано в разделе 23.2. На хостах Windows необходимо включить общий доступ к файлам, а затем настроить общие каталоги. Пользователи Windows NT/2000 должны активизировать «гостевые» учетные записи, чтобы предоставить внешним пользователям доступ к своим каталогам. Пользователи Windows XP включают общий доступ, запуская мастера настройки сети. Все компьютеры должны принадлежать к одной рабочей группе (workgroup в примерах данной главы). Далее на компьютере с системой Windows открывается окно Сетевое окружение, в котором производится поиск всех общих ресурсов в локальной сети.
384
Глава 23. Samba
Подключение в одноранговых сетях Samba с компьютеров Linux описано в разделах 23.17 и 23.18.
Комментарий Не устанавливайте NetBEUI или поддержку сетей Novell (IPX/SPX), если вы не уверены в том, что это абсолютно необходимо. Установка этих протоколов снизит производительность системы. При загрузке компьютеру необходимо несколько минут, чтобы разослать информацию о своих ресурсах. Будьте терпеливы.
См. также Разделы 23.2, 23.4, 23.17 и 23.18.
23.4. Включение общего доступа к файлам в Windows Проблема Требуется настроить общий доступ к файлам на компьютерах с системой Windows, чтобы другие пользователи локальной сети могли получить доступ к вашим общим файлам.
Решение В системе Windows XP общий доступ к файлам по умолчанию отключен. Чтобы включить его, запустите приложение панели управления Сетевые подключения и выберите Мастер новых подключений. На экране появляется диалоговое окно мастера новых подключений. Следуя инструкциям мастера, установите переключатель Установить домашнюю сеть или сеть для малого офиса, введите имя рабочей группы и включите общий доступ к файлам. Чтобы организовать общий доступ к файлам, проще всего скопировать их в каталог Documents and Settings\ALL Users\O6inne документы.
Комментарий Пользователи, выросшие в веселые времени Windows 95, часто находят систему ограничений NT/2000/XP слишком жесткой и неудобной. Им не хватает простой возможности открыть общий доступ ко всему диску. На самом деле в NT/2000/ ХР такая возможность сохранилась; просто нужно немного потрудиться. Откройте Проводник Windows, щелкните правой кнопкой мыши на диске, к которому предоставляется общий доступ. Выберите команду Общий доступ и безопасность. Установите флажок Открыть общий доступ к этой папке и введите комментарий в поле Общий ресурс. Этот комментарий будет отображаться в окне Сетевое окружение и в обозревателях сети Linux, поэтому постарайтесь сделать его содержательным.
23.5. Включение аутентификации на сервере Samba
385
Конечно, открывать общий доступ ко всему диску крайне небезопасно, но если кому-то захочется это сделать — пожалуйста.
См. также Разделы 23.17 и 23.28; Microsoft Knowledge Base Article 307874.
23.5. Включение аутентификации на сервере Samba Проблема Вам не нравятся либеральные, незащищенные методы организации общего доступа к файлам, описанные в предыдущих разделах. Вы предпочитаете создать централизованный файловый сервер с общими каталогами и управлять доступом пользователей к этим каталогам.
Решение Прежде всего следует отредактировать smb.conf, включить безопасность уровня пользователей и потребовать шифрования паролей (обе возможности включены в 3.0 по умолчанию, но всегда лучше четко выразить свои намерения). После этого пользователи Samba создаются утилитой smbpasswd. Пользователи Samba также должны иметь системные учетные записи Linux на сервере (их следует создать заранее). Учетные записи Samba необходимы как пользователям Windows, так и пользователям Linux. В следующем примере приводится измененный вариант конфигурации из раздела 23.2: [global]
workgroup m workgroup netbios name • windbag server string = Ian file server security = user encrypt passwords = yes browseable hosts allow = 192.168.1.
[sharel] path = /sharedstuff comment - testfiles read only = No
Перезапустите Samba после редактирования smb.conf. Теперь создаются пользователи Samba, и им назначаются пароли: # smbpasswd -a andrew New SMB password: Retype new SMB password: Added user andrew.
386
Глава 23. Samba
ВНИМАНИЕ Пользователи, создаваемые командой smbpasswd, должны иметь системные учетные записи на сервере Samba. Если данные отсутствуют в /etc/passwd, вы получите следующее сообщение об ошибке: Failed to initialize SAM_ACCOUNT for user <foo>. Failed to modify password entry for user <foo>
Комментарий Неудобная схема с двумя базами данных паролей объясняется различиями между паролями Unix и Windows и спецификой управления файловыми разрешениями на этих платформах. Команда sm paswwd прокладывает мост между этими сильно различающимися платформами. В следующем разделе будет показано, как преобразовать/etc/passwd в/etc/samba/smbpasswd командой mksmbpasswd.
См. также Smb.conf(5), smbpasswd(5), smbpasswd(8).
23.6. Массовое преобразование системных пользователей Проблема Вам совершенно не хочется вручную создавать учетные записи Samba для всех пользователей, как описано в предыдущем разделе. Можно ли автоматизировать процесс преобразования?
Решение Да, до определенной степени. В поставку Samba включен сценарий mksmbpasswd, который преобразует все записи /etc/passwd в формат smbpasswd и копирует их в /etc/samba/smbpasswd. Сценарий не копирует пароли (он не может это сделать, потому что они зашифрованы и хранятся в /etc/shadow), поэтому пароли придется задавать по отдельности. Новые учетные записи остаются заблокированными до тех пор, пока не будут созданы пароли. Сначала создайте копию /etc/passwd: # ср /etc/passwd /etc/passwd-old Отредактируйте /etc/passwd-old и удалите все учетные записи, которые не должны использовать сервер Samba. He нужно создавать для них учетные записи Samba, это лишь создаст потенциальную угрозу для безопасности. Преобразуйте учетные записи в /etc/samba/smbpasswd: # cat /etc/passwd-old | /usr/sbin/mksmbpasswd > /etc/samba/smbpasswd Новые учетные записи Samba активируются командой smbpasswd: # smbpasswd henna New SMB password: Retype new SMB password:
23.8.
Шифрование паролей в Windows
387
Комментарий Обычно mksmbpasswd рекомендуется запускать только один раз, для проведения первого преобразования. Если внимательно отредактировать рабочую копию /etc/ passwd-old, избегая повторений, можно использовать mksmbpasswd для присоединения дополнительных пользователей: # cat /etc/passwd-old | /usr/sbin/mksmpasswd » /etc/samba/smbpasswd
См. также mksmbpasswd(8), smbpasswd(5), smbpasswd(8).
23.7. Подключение к Samba из Windows 95/98/ME Проблема Windows 95/98/ME не позволяет передать Samba имя пользователя — только пароль, поэтому вы не сможете зарегистрироваться под другим именем. Как передать Samba имя и пароль?
Решение Windows 95/98/ME передает Samba имя пользователя Windows. Вам не удастся передать Samba имя, отличное от того, которое использовалось для входа в Windows. Простейшее обходное решение заключается в создании новой учетной записи Windows с таким же именем, как у пользователя Samba, и входом в Windows под этой учетной записью. Эту операцию можно проделывать даже при подключении с разных компьютеров, но тем самым вы создадите большую брешь в системе безопасности: Windows «любезно» кэширует пароль Samba, чтобы вам не приходилось вводить его заново... а также всем, кто работает на этом компьютере.
См. также Раздел 23.9.
23.8. Шифрование паролей в Windows Проблема Вы знаете, что по умолчанию Samba использует шифрованные пароли. Однако некоторые версии Windows поддерживают только текстовые, незашифрованные пароли. В Samba должны использоваться либо шифрованные, либо текстовые пароли; их одновременное использование невозможно. Какие пароли поддерживаются разными версиями Windows и какой вариант лучше выбрать?
388
Глава 23. Samba
Решение Следующие версии Windows поддерживают только текстовые, нешифрованные пароли: Windows 95 (до OSR2); Windows NT 3.x; Windows NT4 (до SP3). К счастью, для Windows 95 существует специальная «заплатка». Обращайтесь к статье Microsoft Knowledge Base с номером 165403; вам нужен файл Vrdupd.exe. В современных системах NT4 используется обновление SP6, так что проблемы остаются только у пользователей Windows NT 3.x. Если эта проблема действительно так важна, настройте Samba на поддержку текстовых паролей. Для этого необходимо разрешить использование текстовых паролей на всех клиентах Windows, кроме NT3, посредством установки специальных исправлений реестра. Правка реестра Windows всегда опасна, к тому же она может нарушить работу других приложений, зависящих от шифрования паролей. Мой вам совет: не делайте этого. Но если подобная операция неизбежна (скажем, в вашем распоряжении только локальная сеть с рабочими станциями NT3), отредактируйте файл smb.conf и включите в него директиву encrypt passwords = no. Далее загляните в каталог /usr/share/doc/samba-doc/registry; вы найдете в нем полный набор готовых заплаток реестра.
См. также Microsoft Knowledge Base Article 256986.
23.9. Списки управления доступом (ACL) Проблема Требуется ограничить доступ пользователей к конкретному сетевому каталогу Samba (по имени пользователя или группы).
Решение Включите директиву valid users в smb.conf: [sharel]
path = /sharedstuff comment = testfiles read only » No valid users = andrew foober dana Группы Unix обозначаются префиксом «+»: valid users = +sambausers
Группы должны существовать на сервере, в /etc/group. Это обычные группы Linux, а не какие-то специальные группы Samba.
23.10. Создание общедоступных сетевых каталогов
389
Вы также можете исключать отдельных пользователей или группы директивой invalid users: invalid users = root +wheel +bannedusers He забудьте перезапустить Samba после изменения smb.conf.
Комментарий При отсутствии групп NIS (Network Information Services) используйте знак «+», чтобы в поиске использовались только группы Unix. Префикс @ (например, @bannedusers) означает, что сервер Samba должен сначала провести поиск в базе данных NIS, а затем в данных Unix. Чтобы использовать только группы NIS, используйте префикс & (&bannedusers).
См. также smb.conf(5).
23.10. Создание общедоступных сетевых каталогов Проблема Имеется несколько рабочих групп или отделов, для которых требуется организовать общий доступ к файлам. Вы хотите создать для них общие каталоги Samba.
Решение Создайте общие каталоги и воспользуйтесь средствами управления доступом Samba: [qa-group]
comment = qa group's shared files path = /var/share/qagroup valid users = helix patti devdas @qausers browseable = yes writable = yes
Комментарий Пользователи, имеющие доступ к общему каталогу, могут свободно сохранять и загружать документы. Если запретить обзор общих каталогов директивой browseable = по, чтобы они были видны только для своих пользователей. Особо конфиденциальные документы не следует хранить в общих каталогах Samba; лучше воспользуйтесь OpenSSH и rsync на базе ssh (см. главы 16 и 17).
См. также smb.conf(5).
390
Глава 23. Samba
23.11. Работа с домашними каталогами пользователей в Samba Проблема Вы хотите, чтобы пользователи могли просматривать свои домашние каталоги на серверах Samba. Так они смогут всегда обратиться к своим персональным файлам независимо от того, с какого компьютера выполнен вход.
Решение Включите следующий фрагмент в файл smb.conf: [homes] comment = User's Home Directories valid users = XS browseable = No read only = No
Пользователи Linux могут подключаться к своим домашним каталогам командой smbdient: $ smbclient //windbag/homes -U <пользователь> <паропь>
Итак, пользователь Andrew с паролем bigsecret подключается к своему домашнему каталогу следующей командой: $ smbclient //windbag/homes -U andrew bigsecret Далее команда smbmount монтирует общий каталог, и файлы становятся доступными (см. раздел 23.18). Smb4k и LinNeighborhood (см. раздел 23.17) — отличные графические программы Linux для работы с домашними каталогами. Пользователи Windows должны найти сервер в окне Сетевое окружение, а затем подключиться к нему обычным способом.
Комментарий Поскольку общие каталоги homes исключены из обзора (browseable = No), они не будут отображаться в программах просмотра сети вплоть до подключения к серверу. После подключения отображается только ваш домашний каталог, а каталоги других пользователей остаются скрытыми. Директива valid users = %S означает, что все пользователи Samba могут получить доступ к своим домашним каталогам. Если вы предпочитаете установить ограничения, воспользуйтесь стандартными средствами управления доступом: valid users = andres dana helen helix v a l i d users = +sambagroup i n v a l i d users = daryl l a r r y +badusers
См. также smb.conf(5).
23.12. Построение главного контроллера домена
391
23.12. Построение главного контроллера домена _ проблема Требуется настроить в Samba главный контроллер домена для локальной сети.
Решение Контроллер домена ведет центральную базу данных паролей, чтобы после входа пользователь имел доступ ко всем ресурсам домена без необходимости повторной аутентификации при обращении к общим файлам или принтерам домена. Централизованная настройка общих файлов и принтеров на сервере Samba упрощает управление доступом. В отличие от одноранговых сетей, системный администратор может в полной мере контролировать доступ к сетевым каталогам. ВНИМАНИЕ Windows XP Home Edition не поддерживает подключения к доменам — ни к доменам Windows, ни к доменам Samba. Windows NT 3.x не поддерживает шифрование паролей, поэтому клиенты NT 3.x не могут подключаться к обычным доменам Samba. На роль доменных клиентов лучше всего подходят Windows 2000 и XP Pro.
Процесс настройки состоит из пяти этапов. 1. Установка Samba. 2. Настройка smb.conf. 3. Создание учетных зг записей пользователей и компьютеров. Создание каталогов. 5. Запуск и подключение клиентов с целью тестирования. С установкой Samba проблем быть не должно. Установка может осуществляться из пакетов или по исходным текстам (в зависимости от ваших личных предпочтений). Далее приводится минимальный файл smb.conf для нового контроллера домена, с настройкой аутентификации и доступа к домашним каталогам пользователей. Совместный доступ к файлам и принтерам в нем не настраивается. Имя рабочей группы становится новым именем домена: [global] workgroup = hoi stein netbios name » windbag server string = Samba PDC domain master = yes os level = 64 preferred master = yes local master = yes domain logons = yes logon script = netlogon.bat security = user encrypt passwords = yes log f i l e = /var/log/samba/log log level = 2
392
Глава 23. Samba
max log size = 50 hosts allow = 192.168.1.
[netlogon] comment = Network Logon Service path = /var/samba/netlogon guest ok = Yes browseable = No [homes] comment = User's Home Directories v a l i d users - *S browseable = No writeable = Yes
Сохраните и закройте smb.conf, затем проверьте синтаксические ошибки testparm: # testparm Перезапустите Samba. Затем создайте административные группы, используя системные номера групп: # groupadd -g 112 sadmins # groupadd -g 113 machines Создайте каталог netlogon: # mkdir -m 0775 /var/samba/netlogon # chown root.sadmins /var/samba/netlogon Для каждого компьютера в новом домене Samba необходимо создать учетную запись. Начните с создания учетных записей Linux для каждого PC на сервере Samba. Суффикс $ доллара является признаком «доверенной» учетной записи компьютера: # useradd -g machines -d /dev/null -с "stinkpad" -s /bin/false stinkpad$ # passwd -1 stinkpadS Затем добавьте все учетные записи в базу данных паролей Samba. Знак $ перед именем компьютера при этом не указывается: # smbpasswd -a -m stinkpad Added user stinkpad$. Для начала создайте учетную запись root на сервере Samba командой smbpasswd. Она потребуется вам каждый раз, когда к домену будет присоединяться новый компьютер с системой Windows NT/2000/XP, потому что первый вход в домен должен производиться пользователем Samba root. He забывайте об этом, или ваши компьютеры с Windows NT/2000/XP не смогут присоединиться к домену. Не откладывайте вход в домен, чтобы произвести синхронизацию с сервером и предотвратить возможное похищение учетной записи. Компьютер stinkpad и Samba обмениваются маркерами аутентификации, благодаря чему Samba всегда сможет распознать stinkpad. Это и называется «доверием». Процедура подключения клиентов Windows к домену Samba зависит от конкретной версии Windows. В следующих трех разделах будет показано, как это делается.
Комментарий Работоспособность контроллера домена Samba может быть проверена парой простых приемов. Для начала всегда запускается testparm:
23.13. Подключение Windows 95/98/ME к домену Samba
393
$ testparm Load smb config f i l e s from /etc/samba/smb.conf Processing section "[netlogon]" Processing section [homes] Loaded services f i l e OK. Server role: ROLE_DOMAIN_PDC
Для нас важна последняя строка (Server role: ROLE_DOMAIN_PDC). Затем выполните smbtree на сервере: $ smbtree -N
added interface ip-192.168.1.5 bcast=192.168.1.255 nmask=255.255.255.0 Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) HOLSTEIN Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) //WINDBAG Samba PDC Чтобы проверить подключение, запустите smbtree с другого хоста Linux в локальной сети. Представленная конфигурация является сугубо минимальной. В нее можно легко добавить общие каталоги и принтеры, как и на любом другом сервере Samba. Общий ресурс netlogon содержит сценарий, автоматически загружаемый на клиенты Windows. Этот сценарий монтирует общие каталоги homes как локальные диски Z. Весь сценарий выглядит так: REM NETLOGON.BAT net use z: \\linux\samba /yes
Присвойте ему имя netlogon.bat и сохраните в каталоге /var/samba/netlogon. Следующие директивы сообщают, что Samba выполняет функции главного контроллера домена (PDC): domain master » yes os level • 64 preferred master = yes local master = yes domain logons - yes Помните: в одном домене не может быть двух главных контроллеров, иначе ничего не будет нормально работать. Файловых серверов Samba может быть несколько, но главный контроллер домена только один.
См. также smb.conf(5).
23.13. Подключение Windows 95/98/ME к домену Samba Проблема Новый главный контроллер домена Samba (PDC) готов к работе. Как подключить к нему клиентов с системой Windows 95/98/ME? •
394
Глава 23. Samba
Решение Это самый простой из всех трех случаев. Сначала войдите в Windows под именем пользователя, которое будет использовано для входа в Samba. Затем убедитесь в правильности настройки сети (см. раздел 23.14). Запустите приложение панели управления Сеть, выберите строку Клиент для сетей Microsoft и щелкните на кнопке Свойства. Установите флажок Входить в домен Windows NT. Введите имя домена (hoLstein в нашем примере) и установите переключатель Входе восстановлением сетевых подключений. Щелкните на кнопке О К и вставьте компакт-диск Windows. Перезагрузите систему, чтобы активировать изменения. После перезагрузки вы сможете войти в домен.
Комментарий Помните, что имя рабочей группы в smb.conf определяет новое имя домена.
См. также Раздел 23.4.
23.14. Подключение клиентов Windows NT/2000 к домену Samba Проблема Новый главный контроллер домена Samba (PDC) готов к работе. Как подключить к нему клиентов с системой Windows NT/2000?
Решение Помните пользователя root, для которого в разделе 23.12 была создана учетная запись Samba? Пора использовать эту учетную запись. В Windows NT запустите приложение панели управления Сеть и выполните команду Идентификация > Изменить. Щелкните на кнопке Домен и введите имя домена, соответствующее имени рабочей группы в smb.conf. Установите переключатель Создать учетную запись компьютера в домене. Наконец, войдите в домен в качестве пользователя Samba root. Это необходимо для инициализации «доверительных отношений» между сервером и клиентскими компьютерами. В Windows 2000 щелкните правой кнопкой мыши на значке Мой компьютер, выберите Свойства, перейдите на вкладку Идентификация и щелкните на кнопке Идентификатор сети. На экране появляется окно мастера идентификации сети, который поможет выполнить все необходимые действия. Как и в предыдущем случае, первое подключение к домену должно осуществляться в качестве пользователя Samba root.
Комментарий Помните, что имя рабочей группы в smb.conf определяет новое имя домена.
23.15. Подключение клиентов Windows XP к домену Samba
395
После успешного подключения к домену последующие входы осуществляются нажатием клавиш Ctrl+Alt+Del. Вам будет предоставлен выбор между входом в домен или входом в систему на локальном компьютере без подключения к домену.
См
тякжр
Раздел 23.4.
23.15. Подключение клиентов Windows XP к домену Samba Проблема Новый главный контроллер домена Samba (PDC) готов к работе. Как подключить к нему клиентов с системой Windows XP?
Решение Прежде всего на компьютере должна быть установлена версия Windows XP Professional Edition, потому что версия XP Home не позволяет подключаться к доменам (ни к доменам Windows, ни к доменам Samba). В XP Professional необходимо выполнить ряд дополнительных действий по настройке конфигурации и установить заплатку реестра. Процедура выглядит так: 1. Запустите редактор локальной политики безопасности (Панель управления • Администрирование • Локальная политика безопасности). 2. Найдите параметр Член домена: Всегда требуется цифровая подпись или шифрование потока данных безопасного канала и отключите его. 3. Найдите параметр Член домена: Отключить изменение пароля учетных записей компьютера и отключите его. 4. Найдите параметр Член домена: Требует стойкого ключа сеанса (Windows 2000 или выше) и отключите его. 5. Найдите в каталоге usr/share/doc/samba-doc/registry файл WinXP_SignOrSeal.reg. Скопируйте его в Windows и активируйте двойным щелчком. Вместо этого также можно отредактировать реестр вручную: найдите следую ш раздел и убедитесь в том, что параметр DWORD равен 0: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameterr
6.
"requiresignorseal"=dword:00000000;
7. Щелкните правой кнопкой мыши на значке Мой компьютер, выберите команду Свойства, затем щелкните на кнопке Идентификация. На экране появляется диалоговое окно мастера сетевой идентификации. Первое подключение к домену должно осуществляться в качестве пользователя Samba root (см. раздел 23.12).
396
Глава 23. Samba
Комментарий Помните, что имя рабочей группы в smb.conf определяет новое имя домена. После успешного подключения к домену последующие входы осуществляются нажатием клавиш Ctrl+Alt+Del. Вам будет предоставлен выбор между входом в домен или входом в систему на локальном компьютере без подключения к домену.
также Раздел 23.4.
23.16. Включение перемещаемых профилей Проблема Вы часто переходите с одного компьютера на другой. Вам хотелось бы, чтобы при этом использовалась одна и та же рабочая среда: меню, ярлыки, фоновые картинки и т. д., словно вы работаете за одним компьютером.
Решение Настройте перемещаемый профиль в файле smb.conf. Включите следующие строки в секцию global: logon home = \\*L\*U\.profiles logon path = \UL\profilesUU
Создайте общий каталог profiles: [profiles] path = /var/profiles writeable = yes browseable = no create mask = 0600 directory mask = 0700
Создайте каталог/var/profiles (или другой каталог, который вы хотите использовать) и назначьте ему следующие разрешения: # mkdir -m 1757 /var/profiles
Сохраните изменения и перезапустите Samba. Теперь независимо от того, с какого компьютера будет осуществляться вход, вы окажетесь в своей знакомой рабочей среде.
Комментарий Директива Logon home предназначена для Windows 95/98/ME, а директива logon path — для Windows NT/2000/XP. Имена домена и пользователя подставляются автоматически в виде макропеременных; так получается удобная обобщенная конфигурация, которая может использоваться где угодно. Разрешения create mask и directory mask гарантируют, что чтение и запись профилей будут разрешены только владельцам файлов.
23.17. Подключение клиентов Linux к одноранговой сети или серверу Samba
397
В Windows NT/2000/XP профили включаются по умолчанию. Чтобы включить их в Windows 95/98/ME, откройте приложение панели управления Пароли и перейдите на вкладку Профили пользователей. Установите переключатель Каждый пользователь устанавливает личные настройки.... Включение перемещаемых профилей может создать проблемы. При входе в разные версии Windows возможно изменение меню Пуск и ярлыков рабочего стола. Кроме того, если на рабочем столе пользователя накапливается большое количество файлов, они будут занимать много места на сервере Samba.
См. также smb.conf(5).
23.17. Подключение клиентов Linux к одноранговой сети или файловому серверу Samba Проблема Пользователям Linux в локальной сети требуется подключиться к файловому серверу Samba или получить доступ к доменам или рабочим группам. А еще им нужны простые, удобные графические обозреватели локальной сети для поиска ресурсов.
Решение На хостах Linux необходимо установить Samba (см. раздел 23.2). Существует несколько хороших графических обозревателей локальной сети: О smb4k — на мой взгляд, лучший обозреватель локальной сети для Linux. Программа имеет четкий, продуманный интерфейс, она проста в использовании. Единственный недостаток — то, что для нее необходима установка KDE. Если вы не используете KDE, вам понадобятся kdebase и Konqueror; О Lin Neighborhood — простой, удобный графический интерфейс для Samba и smbmount. LinNeighborhood не зависит от конкретного оконного менеджера или рабочей среды и будет работать в любой среде X; О Konqueror, файловый менеджер KDE — введите smb:// в адресной строке, чтобы отобразить список всех доступных рабочих групп. Работа Konqueror зависит от LISA — информационной сетевой службы, устанавливаемой по умолчанию в большинстве дистрибутивов. Если вам все же потребуется отдельно установить LISA, она существует в обоих форматах, .deb HRPM;
О Nautilus, файловый менеджер Gnome — введите smb:// в адресной строке, чтобы отобразить список всех доступных рабочих групп.
Глава 23. Samba
398
Комментарий Чтобы организовать совместный доступ к файлам для пользователей Linux, настройте общие каталоги, как описано в разделе 23.2. Клиентская часть Samba может устанавливаться отдельно для пользователей, которые хотят только использовать общий доступ, но не собираются открывать общий доступ к файлам сами. Если smb4k не находит рабочую группу автоматически, выполните команду Settings • Configure • smb4k • Network • Network Search и щелкните на smbclient. По умолчанию используется nmblookup, но smbclient обычно работает лучше. Окно smb4k показано на рис. 23.1.
Network . 2"Ц WORKGROUP ^•^S POWERPC
; Type : iP Address
192.168 1.1 Disk Disk Disk JPictureiDisk Printer :-drive Disk Disk Disk 132.168.1.100 if: «STINKPAD '•-j^appforms Disk 192.168.1.5 :- * WINDBAG Disk Disk Disk
Default share Default share Default share test ALPS MD-50OD d-windows Printer Drivers in black cox application forms Ian file server Home Directories testtiles snared nienthinngs
/.'POWERPC/My_ //STINKPAD/appforms //WINOBAG/andrew2 /M'tNDBAG/shar Pictures
*
-
Share Snare' Mount Point; LJse.r Graup: Usage
T o t a l •'••'• ' Free. . . Used ' ' Contents ..Done.
:
,'WINOBAG/sharei /hQmc/car!a/srnt]4k' i *i cBrla (1Q0O) carla ( 1 0 0 0 ) • •464
4 B6 GO 2 C4 GS 2.24 GB 11 items • (9 Directories. 2 Filssi
iNo
—
Рис. 2 3 . 1 . Обозреватель сети smb4k
В LinNeighborhood обычно требуется дополнительная настройка. Выполните команду Edit • Preferences; на вкладке Scan введите имя главного обозревателя сети (в примерах данной главы — windbag). На вкладке Miscellaneous введите имя пользователя по умолчанию и выберите каталог для монтирования (это должен быть ваш домашний каталог вида /home/carla/mnt). На вкладке Post Mount настройте файловый менеджер по умолчанию (не забывайте щелкать на кнопке Save на каждой вкладке). После закрытия меню Preferences выполните команду Edit • Save Preferences. На рис. 23.2 показано окно LinNeighborhood с отображением всех компьютеров рабочей группы. Сделайте двойной щелчок (или щелкните правой кнопкой мыши) на каталоге, который нужно использовать. На экране появляется диалоговое окно Mount, позволяющее использовать каталог монтирования по умолчанию или выбрать новый каталог. Konqueror и Nautilus удобны тем, что в них не нужно специально монтировать общие каталоги; операции с файлами выполняются так, как если бы они хранились локально. Впрочем, иногда это создает проблемы. Например, при обраще-
23.18. Подключение клиентов Linux к группам Samba из командной строки
399
нии Konqueror к каталогу, доступному только для чтения, создается впечатление, что вы можете редактировать или добавлять файлы в общий каталог. Тем не менее на самом деле файлы не изменяются и не добавляются. Изменения можно сохранить на своем жестком диске, но не в общем каталоге.
File
Edit
Options
Help
Mount I Unmount i
Stop
Add i Comment
Щ Prefs
| About Mountpoint
Eh- 0 windbag [L-l^WORKGROUP
i)-SP0WERPC
i t - JJSTINKPAD i h . l § WINDBAG
L
Resource //WINDBAG/shareZ
0 Objects)
celeron stinkpadxp anonymous Ian file server testifies
shared filenthinngs
/horne/carla/rnnt/WINDBAG/share2/
iMountpoint /home/carl a/mnt/WINDBAG/shareZ/
1 Logging Off Рис. 23.2. Обозреватель сети LinNeighborhood
См. также Smb4k (http://smb4k.berlios.de); LinNeighborhood (http://www.bnro.de/~schmidjo); Konqueror (http://www.konqueror.org); Nautilus (http://www.gnome.org/projects/nautiLus).
23.18. Подключение клиентов Linux к рабочим группам Samba из командной строки Проблема Графические обозреватели локальной сети, о которых говорилось в разделе 23.17, удобны, однако вам также нужны средства командной строки для просмотра общих каталогов Samba и пересылки файлов (ведь сеансы X доступны не всегда, или вы просто предпочитаете консоль).
Решение Используйте команду smbclient для получения списка общих каталогов и пересылки файлов. При использовании smbclient вам не придется монтировать общие
400
Глава 23. Samba
каталоги для приема или отправки файлов; все происходит точно так же, как при использовании протокола FTP (File Transfer Protocol). Также можно использовать команды smbtree и smbmount/smbumount. Обозреватель локальной сети smbtree работает в текстовом режиме, поэтому для работы с ним не нужно запускать X. Вызовите список хостов и общих каталогов рабочей группы при помощи smbtree, а затем используйте smbmount/smbumount для монтирования/демонтирования общих каталогов.
Комментарий Чтобы получить список общих каталогов, передайте smbdient имя сервера Samba: $ smbcllent -N -К windbag *• *
Sharename
Type
Comment
sharel share2 share3
Disk Disk Disk
testfiles more testfiles testfiles galore
Затем подключитесь к нужному каталогу: $ smbclient -N //windbag/sharel Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.5-Debian] smb: \> Список файлов выводится командой Is: smb: \> Is
D 0 Sat Aug 14 16:47:24 2003 D 0 Sat Aug 14 16:46:14 2003 chatscripts D 0 Sat Aug 14 16:47:24 2003 calendar D 0 Sat Aug 14 16:47:05 2003 47838 blocks of size 65536. 17571 blocks available Для пересылки файлов используются знакомые команды FTP: smb: \> cd chatscripts smb: \chatscripts\> Is D 0 Sat Aug 14 16:47:24 2004 D 0 Sat Aug 14 16:46:14 2004 provider A 656 Tue Aug 19 15:14:46 2003 47838 blocks of size 65536. 17571 blocks available smb: \charscripts\> get provider provider-copy Команда загружает файл provider в локальный рабочий каталог; при этом файл переименовывается в provider-copy. Чтобы переслать файл provider-copy на сервер после завершения редактирования (без переименования), воспользуйтесь командой smb: \chatscripts\> put provider-copy Перечень команд выводится командой ?: smb: \> ? •
Завершение сеанса: smb: \> quit
23.19. Подключение клиентов Linux к Samba из графического обозревателя
401
•
Выходные данные smbtree выглядят примерно так: $ smbtree -N WORKGROUP WWINDBAG anonymous I a n f i l e s e r v e r \\WINDBAG\ADMIN$ IPC Service (anonymous Ian f i l e server) \\WINDBAG\IPC$ IPC Service (anonymous Ian f i l e server) \\WINDBAG\share2 shared filenthinngs \\WINDBAG\sharel testfiles WSTINKPAD l i l black box \\STINKPAD\ADMIN$ IPC Service ( l i l black box) \\WINDBAG\IPC$ IPC Service ( l i l black box) WPOWERPC celeron \\POWERPC\IPC$ Remote Inter Process Communication \\POWERPC\PRINTER$
Обнаружив нужный общий каталог, смонтируйте его в своей системе командой smbmount: $ mkdir samba
$ smbmount //powerpc/c-win98 samba -o guest Демонтирование общего каталога после окончания работы выполняется командой $ smbumount samba
Параметр -о guest предотвращает запрос пароля. Он используется при подключении к анонимным общим каталогам, не требующим аутентификации. Если ис-' пользуется вход с аутентификацией, введите имя пользователя: $ smbmount //windbag/andrew samba -о andrew added interface ip=192.168.1.5 bcast=192.168.1.255 nmask=255.255.255.0 Password:
См. также smbmount(8), smbumount(8), smbtree(l).
23.19. Подключение клиентов Linux к домену Samba из графического обозревателя Проблема
!
Требуется подключиться к домену Samba при помощи одной из графических программ, описанных в разделе 23.17, новы не знаете, как передать Samba имя пользователя и пароль.
Решение В Konqueror и Nautilus для этого достаточно просмотреть сеть и щелкнуть на значке домена. На экране появляется диалоговое окно подключения. В smb4k щелкните правой кнопкой мыши на домене и выберите команду Authenication.
402
Глава 23. Samba
В LinNeighborhood щелкните правой кнопкой мыши на домене и выберите команду Scan group as user.
См. также Smb4k (http://smb4k.berLios.de); LinNeighborhood (http://www.bnro.de/~schmidjo); Konqueror (http://www.konqueror.org); Nautilus (http://www.gnome.org/projects/nautilus).
23.20. Подключение клиентов Linux к домену Samba из командной строки Проблема Требуется подключиться к домену Samba при помощи smbtree, smbclient и smbumount — но как передать Samba имя пользователя и пароль?
Решение Каждой из перечисленных команд можно передать имя и пароль любого пользователя Samba. Таким образом, вы можете просмотреть общий каталог homes, хотя он исключен из обзора, и подключиться к нему из smbclient: $ smbtree -U andrew added interface ip=192.168.1.5 bcast=192.168.1.255 nmask = 255.255.255.0 Password: Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) HOLSTEIN Got a positive name query response from 192.168.1.5 ( 192.168.1.5 ) WWINDBAG Samba PDC \\WINDBAG\andrew User's Home Directories \\WINDBAG\ADMIN$ IPC Service (Samba PDC) \\WINDBAG\IPC$ IPC Service (Samba PDC) $ smbclient //windbag/andrew -U andrew Password: Domain=[HOLSTEIN] OS=[Unix] Server=[Samba 3.0.5-Debian] smb: \> Также можно смонтировать общий каталог командой smbmount: $ smbmount //windbag/andrew samba -o andrew added interface ip-192.168.1.5 bcast=192.168.1.255 nmask=255.255.255.0 Password: После завершения работы каталог демонтируется командой $ smbumount samba
Комментарии Пароль также можно ввести в командной строке за именем пользователя, но в этом случае его смогут увидеть посторонние: $ smbmount //windbag/andrew samba -о andrew bigsecret
23.22. Общий доступ к принтерам Linux из системы Windows
403
См. также smbmount(8), smbumount(8), smbtree(l).
23.21. Синхронизация паролей Samba и Linux Проблема Пользователи Samba могут изменять свои пароли smbpasswd, но при этом их пароли Linux на сервере Samba не изменяются. Требуется обеспечить синхронизацию паролей.
Решение Включите следующие строки в секцию global файла smb.conf: unix passwd sync - yes passwd program = /usr/bin/passwd Xu passwd chat = "*Enter OLD passwd*" *o\\n "*Enter NEW password" *n\\n "*Reenter NEW password*" *n\\n "*Password changed*" Этот фрагмент обеспечивает вызов passwd для изменения паролей пользователей в файле /etc/passwd при изменении паролей Samba. Директива passwd chat управляет процессом изменения пароля и выводом информации.
Комментаоий Синхронизация работает в одну сторону; смена паролей Linux не приводит к смене паролей Samba. В директиве passwd chat использованы следующие макроподстановки: О %и — имя пользователя; О %о — старый пароль; О %п — новый пароль; О \\п — перевод строки; обеспечивает разбиение вывода passwd chat на несколько строк. Полный список макроподстановок Samba приведен в smb.conf(5).
См. также smb.conf(5).
23.22. Общий доступ к принтерам Linux из системы Windows Проблема Требуется предоставить пользователям Windows доступ к принтерам, подключенным к компьютерам с системой Linux, в рабочих группах или доменах Samba.
404
Глава 23. Samba
Решение Вам потребуются как CUPS, так и Samba. Вот что необходимо сделать: 1. Установите принтеры на компьютерах Linux с использованием CUPS (см. главу 14). 2. Установите CUPS на сервере Samba. 3. Настройте CUPS для Samba. 4. Создайте общий ресурс printers в файле smb.conf на сервере Samba. Чтобы настроить CUPS для Samba, выполните следующую команду: # In -s 'which smbpool' /usr/lib/cups/backend/smb Следующая секция printers предоставляет общий доступ ко всем принтерам сети: [printers] comment = All printers printing = cups printcap name = cups Перезапустите Samba после редактирования smb.conf. Затем пользователи Windows запускают мастера установки принтеров. Драйверы Windows должны устанавливаться локально, поэтому им понадобятся компакт-диски Windows или диски с драйверами.
Комментарий Проследите за тем, чтобы ресурс назывался printers, а не printer. Printers — зарезервированное имя ресурса Samba (как и homes и global). При установке CUPS необходимо установить полный набор драйверов в пакетах Foomatic и Gimp-Print. Вообще говоря, для клиентов Windows и Linux можно использовать автономный сервер печати CUPS без участия Samba (см. главу 14), но чтобы предоставить доступ к принтерам Windows из системы Linux, потребуется Samba (см. раздел 23.23). В CUPS общий доступ к принтерам организуется гораздо проще, чем в старых системах печати System V или Berkeley. Вам не придется возиться с низкоуровневыми очередями или сложными ресурсами Samba. Просто установите принтеры через CUPS, создайте в Samba ресурс printers, и они появятся в окне Сетевое окружение на компьютере Windows.
См. также Глава 14; раздел 23.23.
23.23. Общий доступ к принтерам Windows из системы Linux Проблема Имеется смешанная локальная сеть Windows/Linux. Требуется, чтобы пользователи Linux могли пользоваться принтерами, подключенными к компьютерам Windows.
23.24. Запуск приложений Windows в Linux
405
Решение Вам потребуются как CUPS, так и Samba. Вот что необходимо сделать: 1. Установите принтеры на компьютерах Windows. Откройте общий доступ к ним так, как это обычно делается. 2. На компьютерах Windows NT/2000/XP убедитесь в том, что «гостевая» учетная запись включена, а доступ к общим принтерам разрешен всем. 3. Установите CUPS на сервер Samba (см. главу 14). 4. Настройте CUPS для Samba. 5. Создайте общий ресурс printers в файле smb.conf на сервере Samba. Чтобы настроить CUPS для Samba, выполните следующую команду: # In -s "which smbspool' /usr/lib/cups/backend/smb
Следующая секция printers предоставляет общий доступ ко всем принтерам сети: [printers] comment = All printers printing = cups printcap name = cups
Перезапустите Samba после редактирования smb.conf. Затем установите принтеры Windows на сервере Samba при помощи веб-интерфейса CUPS (http://localhost:631/admin). •
Комментарий Чтобы организовать доступ из Linux к принтерам, подключенным к Windows 95/ 98/МЕ, не нужны ни имя пользователя, ни гостевая учетная запись. Все, что потребуется, — открыть общий доступ к принтеру. В разделе 23.4 более подробно описано включение общего доступа в различных версиях Windows. Для клиентов Windows и Linux можно использовать автономный сервер печати CUPS без участия Samba (см. главу 14), но чтобы предоставить доступ к принтерам Windows из системы Linux, потребуется Samba.
См. также Раздел 23.4; глава 14.
23.24. Запуск приложений Windows в Linux Проблема Сервер Samba настроен; общий доступ к файлам и сетевым принтерам успешно работает. Тем не менее при совместном доступе все же возникает одна существенная трудность: несовместимые файловые форматы. Конечно, OpenOffice неплохо справляется с преобразованием даже относительно сложных документов MS Office, но такое преобразование не распространяется на сценарии Visual Basic и прикладные интерфейсы, написанные на Visual Basic. В Linux не удастся использовать файлы Adobe Photoshop, Quicktime или Проигрывателя Windows Media.
Глава 23. Samba
406
Может быть, вы планируете когда-нибудь отказаться от MS Office и перейти на 100 % сеть Linux. А может, вы хотите, чтобы в условиях смешанной сети пользователи могли свободно обмениваться файлами независимо от того, на какой платформе они были созданы. Как решить проблемы с несовместимостью форматов?
Решение Установите CrossOver Office, чтобы пользователи Linux могли запускать приложения Windows прямо из Linux. В нашем примере будет использоваться бесплатная демонстрационная версия CrossOver Office Standard Edition. '•» Crossover Office Standard Setup • Global Options
DEMO
i Install path; /opt/cxoffice i install Options-
'
::::•':':•
i Ш Crossover Office Standard for Linux
Office
;
Free space:
3262 MB
Standard
Estimated size:
Ready to install! Салсе!
i
View Readme \
Begin Install
Рис. 23.3. Окно установки Crossover Office
If you configure Crossover as root, the applications that you install will only be root user.
-•-••••••
Please select one of the options below, or click 'Help' for more information
WVJWW . I
v
lltvwv. . . . ;
•
.
.
. .
33 MB
. •
..
.
- • .
.
.
• . • • . :
Configure Crossover for the root user only (Select this option to upgrade this Demo install to the full version)
-• Exit now and allow individual users to Install their own Windows applications
Рис. 23.4. Выбор режима использования CrossOver Office
23.24. Запуск приложений Windows в Linux
407
Загрузите демонстрационную или коммерческую версию продукта. Чтобы все пользователи системы могли использовать CrossOver Office, запустите установочный сценарий в качестве привилегированного пользователя root: # sh instai1-crossover-standard-demo-3.0.1.sh Verifying archive integrity.. .OK Uncompressing Crossover Office Standard
install
На экране появляется диалоговое окно, показанное на рис. 23.3. Щелкните на кнопке Begin Install. Когда установка будет почти завершена, появится окно, показанное на рис. 23.4. Установите переключатель Exit now..., чтобы все пользователи системы могли использовать CrossOver Office. Затем в качестве обычного пользователя запустите программу настройки, чтобы установить нужные приложения Windows. В KDE и Gnome выполните команду Crossover • Office Setup. После нескольких вводных окон появляется окно, показанное на рис. 23.5. Найдите установочные диски всех приложений Windows, щелкните на кнопке Install и переходите к установке.
Add/Remove | Menus | Associations | Piugms | Fonts Installed software
-New software—
•
To add new software, click 'Install'. Help Install...
Cancel Copyright 2004, CocleWeavers, Inc.
OK .version 3.0.1
Рис. 23.5. Установка программ Crossover Office
408
Глава 23. Samba
Когда программы Windows потребуют перезагрузить систему, CrossOver Office эмулирует перезагрузку командой Crossover • Simulate Windows Reboot. В KDE и Gnome программа установки создает стартовые меню автоматически. В подразделе «Комментарий» рассказано, как создать стартовое меню вручную в других графических средах.
Комментарий CrossOver Office по умолчанию устанавливается в каталог /opt/cxoffice, а в каталогах пользователей создаются файлы —/.cxoffice для настройки сред CrossOver Office. При создании команд меню в графических средах, кроме KDE и Gnome, используются следующие пути: О Help — /opt/cxoffice/doc/index.html; О CrossOver Office Setup — /opt/cxoffice/bin/cxsetup; О Reset CrossOver Office — /opt/cxoffice/bin/cxreset; О Simulate Windows Reboot — /opt/cxoffice/bin/cxreboot; О Unistall CrossOver Office — /opt/cxoffice/bin/cxuninstalL. CrossOver Office — превосходный инструмент для смешанных локальных сетей. Вы получаете возможность запускать приложения Windows в системе Linux. Это позволяет пользоваться преимуществами более стабильной, безопасной операционной системы, не ограничиваясь собственными приложениями Linux. В настоящее время свыше 1000 приложений устанавливается и работает через CrossOver Office. Перечень можно найти на странице http://www.codeweavers.com/ site/compatibility/. Учтите, что не все приложения работают нормально или поддерживают полный объем функций. Даже в официально поддерживаемых приложениях могут возникнуть проблемы.
См. также CrossOver Office (http://www.codeweavers.com/site/products/).
Глава 24
Разрешение имен
24.1. Введение Механизм разрешения имен состоит из двух компонентов: DNS (Domain Name System) и файла hosts. Протокол DHCP (Dynamic Host Configuration Protocol) имеет непосредственное отношение к разрешению имен: DHCP берет на себя «черную работу» по назначению IP-адресов отдельным хостам. Серверы должны иметь статические IP-адреса, а рабочим станциям вполне хватает динамических адресов — просто подключите их к сети, a DHCP сделает все остальное. Служба DNS, лежащая в основе функционирования Интернета, обеспечивает разрешение имен, то есть преобразование символьных имен хостов в числовые адреса. Несмотря на простоту концепции, для ее реализации пришлось создать огромную инфраструктуру. Теоретически без DNS можно было бы обойтись — в конце концов, мы же используем сложные почтовые адреса и номера телефонов из повседневной жизни. Тем не менее механизм разрешения имен обладает многими преимуществами. С одним IP-адресом может быть связано несколько имен; символьные имена лучше запоминаются. Наконец, серверам можно присвоить имена толкиновских героев, мифологических персонажей или красивые астрономические термины (допустим, последнее обстоятельство не так важно, но зато интересно).
Реализация DNS Одна из трудностей, с которой сталкиваются администраторы при настройке собственных серверов DNS, заключается в том, что подавляющее большинство документации ориентировано на BIND (Berkeley Internet Name Domain) — самый старый и распространенный сервер DNS. Может показаться, что BIND — это и есть протокол DNS, а не одна из его реализаций. В этой главе рассматривается сервер DNS djbdns. На мой взгляд, он лучше BIND; djbdns компактен, имеет модульную структуру, работает очень быстро и очень хорошо защищен. Кроме того, он прост в настройке и устойчив, поскольку управляющие демоны автоматически перезапускают его в случае неожиданных
410
Глава 24. Разрешение имен
сбоев. Репликация сервера djbdns также эффективно и безопасно осуществляется стандартными средствами Linux (такими, как rsync через ssh), а это означает, что вы можете легко защитить пересылку файлов данных с использованием ключей SSH. Сервер BIND существует очень давно и получил широкое распространение. С другой стороны, он представляет собой одну монолитную программу, что усложняет его адаптацию. В сущности, все, что вы можете сделать, — это определить разные конфигурации для разных применений, но такой подход малоэффективен для отключения ненужных компонентов. Из-за этого в BIND давно возникали проблемы с безопасностью. Более того, вместо удобных, надежных, стандартных средств Unix в BIND используются странные закрытые методы репликации зонных файлов на вторичные серверы. Даже до появления rsync не было недостатка в контролируемых механизмах пересылки файлов, так что причина появления этих протоколов, специфических для BIND, остается загадочной.
Терминология DNS Термином DNS обозначаются три понятия: протокол DNS, механизм разрешения имен и вся система его реализации, состоящая из регистраторов доменных имен, корневых серверов, ответственных' серверов, IANA и региональных координаторов, ICANN и кэширующих серверов DNS, обеспечивающих распределение нагрузки. Вот некоторые термины и названия, с которыми вам стоит ознакомиться. О I AN A (Internet Assigned Numbers Authority) — Агентство по выделению имен и уникальных параметров протоколов Интернета; группа, координирующая назначение IP-адресов в мировом масштабе (как IPv4, так и IPv6). О ICANN (Internet Corporation for Assigned Names and Numbers) — Корпорация по назначению адресов и имен Интернета. В частности, ICANN осуществляет надзор над назначением и регистрацией доменных имен. О Корневые серверы — всего существует 13 корневых серверов DNS. Чтобы получить их список, введите команду dig без параметров. Все корневые серверы, кроме трех, расположены в США. Впрочем, серверы С, F, I, J и К представляют собой географически распределенные кластеры, поэтому фактическое количество корневых серверов гораздо больше, и они распределены по всей планете. О Авторитетные серверы — серверы DNS, находящиеся под управлением хостмастера домена и содержащие полную информацию о соответствии имен IPадресам. Корневые серверы имен не содержат реальных записей DNS; они всего лишь содержат ссылки на авторитетные серверы имен или другие серверы, которым известен маршрут к авторитетным серверам имен. О Кэширующий сервер (кэширующий резольвер DNS) — кэширующие серверы помогают справиться с гигантским трафиком и сложностью структуры. Если бы каждый запрос DNS для домена обрабатывался авторитетным серAuthoritativc. - Примеч. ред.
24.2. Локальное разрешение имен с использованием файла hosts
411
вером, вся схема вскоре остановилась бы. Этого не происходит, потому что Интернет наполнен кэширующими серверами DNS. Кэширующие серверы выполняют огромный объем работы — они обращаются к внешним серверам для удовлетворения запросов DNS и сохраняют результаты поиска в памяти для прямого обслуживания последующих запросов.
24.2. Локальное разрешение имен с использованием файла hosts Проблема Требуется настроить разрешение имен для локальной сети. Поскольку сеть не обслуживает внешних клиентов, хлопоты с регистрацией доменных имен отпадают; вы можете выбрать любые доменные имена по своему усмотрению (эти имена не будут действительными за пределами локальной сети, но это неважно). Сеть стабильна, изменения редки, поэтому настраивать сервер DNS не обязательно. Все, что нужно — это присвоить хостам удобные, легко запоминающиеся имена. А может быть, у вас имеется зарегистрированное доменное имя, и в сети уже работает сервер DNS, но вы хотите сохранить данные важных компьютеров в файлах hosts на случай, если сервер DNS выйдет из строя.
Решение Используйте файлы hosts. И в Linux, и в Windows эти файлы имеют одинаковую структуру. В большинстве версий Linux приходится редактировать два файла: /etc/hostname и /etc/hosts. В файле /etc/hostname вводится только имя хоста: windbag
В Red Hat и Fedora вместо /etc/hostname редактируется файл /etc/sysconfig/ network: HOSTNAME=vrindbag
Файл /etc/hosts определяет доменное имя. Файл всегда должен содержать запись Localhost, после которой в отдельной строке указывается IP-адрес и полное доменное имя: 127.0.0.1 localhost.localdomain localhost 192.168.1.5 windbag.test.net windbag
Проверка конфигурации: $ hostname windbag $ hostname --fqdn
windbag.test.net $ dnsdomainname
test net
Изменения вступают в силу после перезагрузки компьютера.
412
Глава 24. Разрешение имен
Чтобы задать имя хоста в системе Windows, щелкните правой кнопкой мыши на значке Мой компьютер, выберите команду Свойства и введите имя на вкладке Имя компьютера. Местонахождение файла hosts зависит от версии Windows; проще всего найти файл командой Пуск • Поиск. Все компьютеры локальной сети должны содержать идентичные копии файла hosts. Когда это будет сделано, компьютеры смогут обращаться друг к другу по именам, и вы сможете использовать приложения, зависящие от имен хостов (такие, как Samba).
Комментарий Файл hosts был первым способом установления соответствия между именами и IP-адресами хостов. Механизм DNS был изобретен из-за того, что с увеличением количества хостов работать с файлами hosts становится неудобно. Файлы hosts по-прежнему обладают рядом преимуществ: О отсутствие зависимости от единого сервера; О возможность использования произвольных доменных имен. Имя используется только в пределах локальной сети, и это обстоятельство избавляет вас от хлопот с регистрацией имен; О возможность произвольного изменения доменных имен может быть удобной для тестирования виртуальных доменов Postfix и Apache; О если использовать файл /etc/hosts только для серверов, которым нужны статические IP-адреса, разрешение имен для остальных хостов сети можно возложить на сервер DHCP и не создавать для них записи hosts (см. раздел 24.3). Пример файла hosts (эти файлы имеют одинаковую структуру в Linux и Windows): 127.0.0.1 localhost.localdomain localhost 192.168.1.5 windbag.test.net windbag 192.168.1.6 powerpc.test.net powerpc 192.168.1.10 windbag.test.net stinkpad
См. также hosts(5).
24.3. Настройка сервера DHCP Проблема Вы не хотите возиться с настройкой разрешения имен для рабочих станций. Им не нужны статические IP-адреса, поэтому вы предпочитаете, чтобы адреса автоматически назначались сервером DHCP.
Решение Установите и настройте dhcp. Исходный tar-архив находится по адресу http:// www.isc.org. Также существуют пакеты для RPM и Debian (поищите пакеты с именами dhcp). Включите ссылку на сервер dhcp в конфигурацию клиентских компьютеров.
24.4. Настройка клиентов dhcp
413
Комментарий Сервер dhcp может поставлять клиентам всю информацию о конфигурации сети. Конфигурация самого сервера определяется содержимым файла /etc/dhcpd.conf. Примерное содержимое этого файла: # /etc/dhcpd.conf default-lease-time 259200: max-lease-time 518400; subnet 192.168.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.1; option domainOname "test.net": range 192.168.1.59 192.168.1.100: option domain-name-servers 152.163.199.56. 198.83.210.28;
} Смысл параметров вполне тривиален. Время аренды задается в секундах, поэтому минимальное и максимальное значения в этом примере составляют три и шесть дней. Параметр option routers указывает на шлюз Интернета или шлюз подсети. В записи domain-name-servers указываются либо кэширующие серверы вашей сети, либо серверы имен поставщика услуг Интернета. В представленном примере используются приватные, немаршрутизируемые адреса IPv4. Далее приводятся классы приватных адресов в двух вариантах записи, квартетной и CIDR (Classless Inter-Domain Routing): 10.0.0.0 172.16.0.0 192.168.0.0
- 10.255.255.255 (10/8) - 172.31.255.255 (172.16/12) • 192.168.255.255 (192.168/16)
Вероятно, вы уже слышали об IPv6, следующем поколении IP. В книге этот протокол не рассматривается; вероятно, IPv4 еще будет использоваться достаточно долго. За дополнительной информацией о IPv6 обращайтесь по адресу http:// www.iana.org/ipaddress/ip-addresses.htm. Настройка клиентов dhcp для Linux и Windows описана в следующем разделе.
\-.м. также dhcp-options(5), dhcpd.conf(5), dhcpd(8); RFC 1918.
24.4. Настройка клиентов dhcp Проблема Требуется обеспечить подключение клиентских компьютеров Linux и Windows к серверу dhcp, чтобы назначение им IP-адресов происходило автоматически.
Решение В Windows запустите приложение панели управления Сеть и откройте диалоговое окно свойств TCP/IP. Установите переключатель Получить IP-адрес автоматически.
414
Глава 24. Разрешение имен
В Linux это делается так же легко; единственная проблема заключается в том, что местонахождение файла конфигурации зависит от дистрибутива. В Red Hat и Fedora внесите изменения в /etc/sysconfig/network-scripts/ifcfg-ethO: TYPE=Ethernet DEVICE=ethO BOOTPROTO=dhcp 0NB00T=yes DHCP_HOSTNAME=stinkpad
В Debian редактируется файл/etc/network/interfaces: auto lo iface lo inet loopback auto ethO iface ethO inet dhcp
Комментарий Также можно воспользоваться графической программой. В Red Hat и Fedora используйте system-config-network. В KDE и Gnome существуют собственные графические утилиты (как и практически во всех дистрибутивах Linux), так что выбор достаточно богат. Еще один вариант — системно-независимая утилита сетевой конфигурации netGo, позволяющая создавать профили для удобного подключения к разным сетям.
См. также Документация по дистрибутиву Linux или графической среде.
24.5. Включение статических хостов в dhcp Проблема Имеются серверы или другие компьютеры, которым должны быть назначены статические IP-адреса. Можно воспользоваться файлом /etc/hosts, но было бы слишком утомительно редактировать /etc/hosts на каждом из множества компьютеров, за которые вы отвечаете. Нельзя ли настроить статические адреса в dhcpd.conf?
Решение Конечно, можно. Для этого необходимо знать адреса MAC сетевых адаптеров, которые можно узнать при помощи утилиты ifconfig: $ /sbin/ifconfig ethO Link encap:Ethernet HWaddr 00:03:6D:00:83:CF inet addr:192.168.1.5 Beast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 M e t r i c : l ...
Вас интересует значение HWaddr. В Windows 95/98/ME откройте сеанс DOS и введите команду winipefg. В NT/ 2000/ХР следует выполнить команду ipconfig.
24.6. Создание общедоступного сервера DNS
415
Создайте в dhcpd.conf запись следующего вида: host maill {
hardware ethernet 00:03:6D:00:83:CF; fixed-address 192.168.1.100:
Обратите внимание: многострочные директивы должны быть заключены в фигурные скобки. Серверы имен задаются отдельной директивой в dhcpd.conf, поэтому адреса MAC им не нужны: option domain-name-servers 192.168.1.10, 192.168.1.11 Повторите описанные действия для всех компьютеров, которым должны быть назначены статические IP-адреса.
Комментарий Для самых важных серверов также можно создать записи в /etc/hosts на случай отказа для локальных пользователей. В этом случае сбой одного сервера не приведет к нарушению работы всей сети. Каждому сетевому адаптеру назначается уникальный 48-разрядный адрес MAC (Media Access Control). Первые 24 бита назначает IEEE (Institiute of Electrical and Electronical Engineers, Inc.), а последние 24 бита — производитель.
См. также dhcp-options(5), dhcpd.conf(5), dhcpd(8).
24.6. Создание общедоступного сервера DNS Проблема Вы администрируете почтовый сервер, веб-сервер или другой общедоступный сервер и хотите создать собственный сервер DNS. Но зачем платить сторонним поставщикам за то, что можно сделать своими руками? Собственный сервер DNS позволит вам задать конфигурацию сети так, как вы сочтете нужным (например, можно создать один общедоступный маршрутизируемый IP-адрес и поместить все серверы за брандмауэром NAT или разместить рабочие станции и внутренние серверы за брандмауэром NAT, а общедоступные серверы — перед ним).
Решение Вам потребуется следующее: О статический, общедоступный, маршрутизируемый IP-адрес; О зарегистрированный сервер имен; О постоянное подключение к Интернету;
Глава 24. Разрешение имен
416
О учетная запись у поставщика, поддерживающего возможность использования собственных серверов; О сам сервер. Когда у вас появится все перечисленное, обращайтесь к описанию настройки djbdns в других разделах настоящей главы.
Комментарий Статический маршрутизируемый IP-адрес предоставляется поставщиком услуг Интернета. Сервер имен должен быть зарегистрирован полномочной организацией. Если вы еще не регистрировали доменные имена, обратитесь по адресу http://icann.org/ registrars/accredited-list.html — на этой странице приводится список регистраторов доменных имен, уполномоченных ICANN (качественного обслуживания это не гарантирует, но по крайней мере это официальные представители). На рис. 24.1 показано, как выглядит форма регистрации. Customer Support
Account Management Home > Name Server Registration Account Owner
Name Server Registration
Contact Information: Caria Schroder Tx Computing
You may register or update a name server for domain names that you have registered with us. The name server will need both a host name and an IP address associated with it. Once you register the name carvar you will be able to use your name server for domain names registered with any registrar.
Update Account Contact Domain Tools
"
Advanced Domain Search Renew Domains
Please DO NOT enter 'www' with your hast narofi. This is not Й redirectsor service • it wili not direct your domain to an IP address. 1Ч)шпе arfl usod for web nesting purposes. If you arft unsure about what <t name s&rwr is or need heip registering your name server, pfease consul! cup fre<qu*>nUy k.fisri q u f i s t i o n s m~ use» this provided 'help' llnfc. Host Name:
Register Domains
.TUXC0MPUTING.COM
IP Address:
Transfer Domains
Update
Update Ndine Servers Update Domain Contacts .NAME management
Рис. 2 4 . 1 . Форма регистрации доменного имени
Сервер DNS не предъявляет особых требований к мощности оборудования или скорости канала. В конце концов, для удовлетворения запроса достаточно одного пакета UDP. В идеальном случае объем оперативной памяти должен быть достаточным для хранения зонных и кэшированных данных в памяти. Если сервер DNS работает на компьютере Linux без X и использования других служб, то старого Pentium III с 128 Мбайт памяти будет достаточно для обслуживания пары сотен зон BIND и многих сотен хостов djbdns. Таким образом, для реализации DNS в условиях маленькой сети windbag.net можно легко воспользоваться компьютером, выполняющим другие функции.
24.7. Установка djbdns
417
См. тэюкб Документация djbdns (http://cr.yp.to/djbdns.html).
24.7. Установка djbdns Проблема Требуется использовать djbns для создания сервера DNS. Но что и как для этого нужно установить?
Решение Потребуются три tar-архива с исходными текстами: daemontools, uscpi-tcp и djbdns. Их можно загрузить с домашней страницы djbdns по адресу http:// cr.yp.to/djbdns. htm L После установки можно переходить к настройке конфигурации. Эта процедура будет описана в следующих разделах. Установка daemontooLs осуществляется следующим образом: # mkdi г -т 1755 /package # cd /package Загрузите и распакуйте обновленный tar-архив daemontools в /package: # tar xzvpf daemontools-0.76.tar.gz # cd admin/daemontools-0.76 Компиляция и настройка программ daemontools осуществляется командой # package/install
Теперь загрузите обновленный tar-архив uscpi и установите программу: # cd /usr/sources # tar xzvf uscpi-tcp-O.88.tar # cd uscpi-tcp-O.88 # make # make setup check Программа устанавливается в /usr/local/bin. Наконец, загрузите и установите djbdns: # tar xzvf djbdns-l.05.tar.gz # cd djbdns-1.05 #make # make setup check
Программа устанавливается в /usr/local/bin. Использование djbdns описывается в следующих разделах.
Комментарий
oqfl
Пакет daemontools содержит набор утилит для работы со службами (services). В следующих разделах будут использоваться утилиты supervise, multilog и svstat. Утилита supervise автоматически перезапускает службы в случае их аварийного завершения.
418
Глава 24. Разрешение имен
Утилита multilog автоматически сдвигает содержимое журналов, чтобы они не занимали места на диске и всегда содержали свежие данные. Утилита svstat выдает информацию о состоянии службы. Пакет uscpi-tcp выполняет функции inetd и xinetd для запуска djbdns и других программ Дэна Бернстайна (Dan Bernstein). Единственное, что от вас потребуется, — установить ее. Все остальное будет сделано автоматически. Пакет djbdns представляет собой семейство программ DNS. Мы будем использовать dnscache, кэширующий сервер DNS, и tinydns, авторитетный сервер DNS.
См. также Life with Djbdns (http://www.Lifewithdjbdns.com); daemontools (http://cr.yp.to/daemontools.html); uscpi-tcp (http://cr.yp.to/uscpi-tcp.html).
24.8. Перемещение журналов tinydns и dnscache Проблема По умолчанию tinydns-conf и dnscache-conf помещают файлы журналов в каталоги /etc/tinydns/log/main и /etc/dnscache/log/main. Требуется переместить эти файлы в каталог/var/log, где обычно хранятся журналы.
Решение Чтобы переместить журналы tinydns в /var/log/tinydns, внесите следующие изменения в/etc/tinydns/log/run: #!/bin/sh
exec setuigid dnslog multilog t /var/log/tinydns Сделайте то же самое с dnscache, отредактировав файл /etc/dnscache/Log/run: #!/bin/sh
exec setuigid dnslog multilog t /var/log/dnscache
См. также Описание установки DNS (http://cr.yp.to/djbdns/install.html).
24.9. Создание локального дотирующего сервера имен на базе djbdns Проблема Требуется создать локальный кэширующий сервер имен djbdns, предназначенный исключительно для обслуживания вашей локальной сети. Наличие такого сервера повысит скорость обработки запросов DNS, а это ускорит просмотр веб-страниц, работу электронной почты и других служб Интернета.
24.9. Создание локального кэширующего сервера имен на базе djbdns
419
Решение Программа кэширующего сервера в пакете djbdns называется dnscache. Проведите предварительную подготовку системы, установив пакты daemontools, uscpi-tcp и djbdns (см. раздел 24.7). После установки всех необходимых программ убедитесь в правильности установки djbdns: $ dnsip www.oreillynet.com 208.201.239.37 208.201.239.36
Создайте двух системных пользователей, которые будут являться владельцами dnscache и dnslog. Присвойте им любые имена (в нашем примере они будут называться dnscache и dnslog): # useradd -d /dev/null -s /bin/false dnscache # useradd -d /dev/null -s /bin/false dnslog Задайте IP-адрес и каталог для dnscache: # dnscache-conf dnscache dnslog /etc/dnscache 192.168.1.5 Создайте список «разрешенных» пользователей; в следующем примере использование dnscache разрешается компьютерам локальной подсети: # touch /etc/dnscache/root/ip/192.168.1 Запустите сервер: # In -У /etc/dnscache /service ....
Убедитесь в том, что сервер успешно запущен, командой svstat: # svstat /service/dnscache /service/dnscache: up (pid 6776) 30 seconds Чтобы проверить, что сервер выполняет свои функции, выведите содержимое локального кэша: # env DNSCACHEIP=192.168.1.5 dnsqr a www.yahoo.com 1 www.yahoo.com: 193 bytes, 1+9+0+0 records, response, поеггог query: 1 www.yahoo.com answer: www.yahoo.com 286 CNAME www.yahoo.akadns.net answer: www.yahoo.akadns.net 60 A 66.94.230.52 answer: www.yahoo.akadns.net 60 A 66.94.230.52
Создайте на клиентских компьютерах ссылку на сервер dnscache (см. раздел 24.10). Настройка завершена.
Комментарий Кэширующий сервер выполняет две функции: он отвечает на запросы DNS, получая информацию с других серверов, и сохраняет результаты, чтобы в будущем он мог напрямую обслуживать запросы той же информации. Кэш существует только в памяти, поэтому при перезапуске процесса или перезагрузке системы все его содержимое теряется. Пакет djbdns включает ряд сетевых информационных и диагностических утилит: dnsqr, dnstrace, dnsip, tinydns-get, dnsipq, dnsmx и dnsname. За дополнительной информацией обращайтесь по ссылкам из подраздела «См. также».
420
Глава 24. Разрешение имен
См. также Утилиты командной строки для получения информации DNS (http://cr.yp.to/ djbdns/tools.html); утилиты командной строки для отладки конфигурации DNS (http://cr.yp.to/djbdns/debugging.html); разные способы настройки dnscache (http:// cr.yp.to/djbdns.htmL); Life with Djbdns, Simple Setup (http://www.lifewithdjbdns.com/ #Simple%20Setup).
24.10. Настройка клиентов Linux и Windows для использования дотирующего сервера DNS Проблема Кэширующий сервер готов к работе — но как объяснить клиентам Linux и Windows, где его искать?
Решение Если клиенты обслуживаются сервером DHCP, отредактируйте файл конфигурации DHCP и включите в него ссылку на новый сервер имен (см. раздел 24.3). Internet Protocol (TCP/IP) Properties •
"
I
"
\
'
•
•
•
•
•
•
,
.
•
.
.
:
:
I
You can gel IF' .eintig; ^.-;gn~J automatically ii you< networi tuppottj this capability Othaviice. you need to asl yom netwoik adrnmistiatoi lot ; ;/: : ' h i l P 'r'c:r : 'ч ': ••?•"?& '• Obtain an IP sddiers automatically ;
Г
Use the tallowing IP addreci-
(~ Obtain DNS velvet oddiess automatical' | V
U t e the followre DNS ;avef addies;e3
PietatedONS wavei
| 192
1 6 8 1 2 0 0
AUeiiiate DNS -loivf-i
Advanced..
Hi
Рис. 24.2. Настройка конфигурации TCP/IP
24.11. Создание общедоступного сервера DNS с использованием tinydns
421
На хостах Linux со статическими IP-адресами, не обслуживаемых сервером DHCP, серверы имен настраиваются в файле /etc/resolv.conf. В нашем примере серверу имен присвоен адрес 192.168.1.200, поэтому в файл /etc/resolv.conf включается следующая строка: nameserver 192.168.1.200
Серверы опрашиваются в последовательности перечисления, поэтому при наличии других серверов эта запись должна стоять на первом месте. Обычно поставщик услуг Интернета указывает первичный и вторичный серверы имен; их можно указать в следующих строках: nameserver 192.168.1.200 nameserver 12.188.166.2 nameserver 12.188.166.3
На хостах Windows со статическими IP-адресами откройте диалоговое окно свойств протокола TCP/IP. Внешний вид этого окна показан на рис. 24.2.
Комментарий Кэширующий сервер DNS работает сам по себе и не требует постоянного администрирования. На клиентском компьютере можно задать до трех серверов имен. Следите за тем, чтобы не предоставить открытый доступ к кэширующему серверу из Интернета! Во-первых, это создает угрозу для безопасности; во-вторых, у вас нет причин обеспечивать кэширование для всех желающих. В разделе 24.9 рассказано, как это делается. В Windows 2000/XP реализован свой встроенный кэш DNS. Его содержимое можно просмотреть командой С:\> ipconfig /displaydns
Сброс кэша выполняется командой С:\> ipconfig /flushdns
Сброс кэша позволяет быстро избавиться от устаревших данных (например, при изменении IP-адреса сервера).
См. также resoLv.conf(5).
24.11. Создание общедоступного сервера DNS с использованием tinydns Проблема Под вашим управлением находятся серверы, которые должны быть доступны для внешнего мира (почта, веб, FTP). Им нужны доменные имена вида www.piter.com, чтобы пользователи были избавлены от необходимости использовать IP-адреса. Для разрешения этих имен вы хотите настроить собственный сервер DNS. Сервер BIND слишком сложен, к тому же вокруг ходят слухи о проблемах
422
Глава 24. Разрешение имен
безопасности в BIND. Как бы то ни было, вы выбрали djbdns. Как же настроить работу сервера?
Решение Выполните подготовительные действия, описанные в разделе 24.6. Затем выполните описанные далее действия для установки и настройки tinydns, авторитетного сервера DNS из пакета djbdns. Если вы также используете сервер dnscache, его IP-адрес должен быть отличен от IP-адреса tinydns; это очень важная мера безпасности. Впрочем, при совпадении IP-адресов dnscache и tinydns попросту откажутся работать. Установите djbdns так, как описано в разделе 24.7. Создайте двух системных пользователей с произвольными именами, которые будут являться владельцами tunydns и dnslog: # useradd -d /dev/null -s /bin/false tinydns # useradd -d /dev/null -s /bin/false dnslog Выполните команду tinydns-conf, чтобы создать каталоги и задать IP-адрес сервера tinydns. Укажите системных пользователей в следующем порядке: # tinydns-conf tinydns dnslog /etc/tinydns 208.201.239.36 Создайте стартовую запись в service: # In -s /etc/tinydns /service
Подождите несколько секунд, затем выполните команду svstat и убедитесь в том, что сервер стартовал: # svstat /service/tinydns /service/tinydns: up (pid 6811) 14 seconds Если tinydns не будет нормально стартовать, проверьте содержимое журнала в /etc/tinydns/log/main/current. Там вы узнаете, в чем проблема. Теперь можно переходить к созданию хостовых записей. В следующем примере для этой цели используются сценарии, входящие в поставку tinydns, а имя домена pixels.net было зарегистрировано уполномоченной организацией. Допустим, мы хотим зарегистрировать три хоста, перечисленных в табл. 24.1. Таблица 24.1. Хосты pixels.net Адрес
Имя
Роль
208.201.239.36
parsley
DNS, почта
208.201.239.37
sage
FTP
ftp
208.201.239.38
rosemary
Веб-сервер
www
Записи создаются следующими командами: # # # # # # #
cd /service/tinydns/root ./add-ns pixels.net 208.201.239.36 ./add-ns .239.201.208.in-addr.arpa 208.201.239.36 ./add-host parsley.pixels.net 208.201.239.36 ./add-host sage.pixels.net 208.201.239.37 ./add-host rosemary.pixels.net 208.201.239.38 ./add-alias ftp.pixels.net 208.201.239.37
Псевдоним
24.12. Построение частного сервера DNS
423
# ./add-alias www.pixels.net 208.201.239.38 # make
Комментарий Как правило, настройка djbdns осуществляется при помощи конфигурационных сценариев, а не прямым редактированием файла /etc/tindns/root/data. В пакет включены следующие сценарии: О add-host — создание записей А и PTR; О add-mx — добавление почтового сервера; О add-ns — добавление сервера имен; О add-alias — создание записи А без парной записи PTR.
См. также Создание сервера DNS (http://cr.yp.to/djbdns/ru-server.htmL).
24.12. Построение частного сервера DNS Проблема Ваша сеть слишком велика для файла hosts, поэтому вы решили создать сервер DNS исключительно для обслуживания вашей сети. Внешние клиенты обслуживаться не будут. Как это сделать при помощи tinydns?
Решение Создайте в своей локальной сети сервер dnscache, как описано в разделе 24.9. Настройте сервер tinydns (см. раздел 24.11) и введите данные внутренних хостов в файле /etc/tinydns/root/data. На следующем шаге необходимо приказать локальному серверу dnscache, чтобы за доменной информацией он обращался к локальному, частному серверу tinydns. Для наглядности воспользуемся примером с сетью pixels.net из раздела 24.11. Создайте следующие файлы, указывая в них IP-адрес частного сервера tinydns: # echo 192.168.1.100 > /service/dnscache/root/servers/pixels.net # echo 192.168.1.100 > /service/dnscache/root/servers/0.168.192.in-addr.arpa Пользователь dnscache должен быть владельцем следующих файлов: # chown dnscache: /service/dnscache/root/servers/pixels.net # chown dnscache: /service/dnscache/root/servers/0.168.192.in-addr.arpa Затем перезапустите dnscache: # svc -t /service/dnscache В дальнейшем сервер dnscache будет обращаться за локальными адресами к локальному серверу tinydns, а за внешними — к файлу/etc/service/dnscache/root/ servers/®.
424
Глава 24. Разрешение имен
Комментарий Чтобы этот механизм работал, вам потребуются официально зарегистрированные доменные имена, даже если вы не предоставляете никакого общедоступного сервиса. Если вы хотите использовать в локальной сети любые имена по своему усмотрению, обратитесь к разделу 24.2.
См. также Создание сервера DNS (http://cr.yp.to/djbdns/ru-server.html).
24.13. Простое распределение нагрузки в tinydns Проблема В сети имеются дополнительные почтовые, FTP или веб-серверы. Вы хотите настроить их для автоматического распределения нагрузки. Допустим, веб-сайт с интенсивным трафиком обслуживается тремя серверами Apache. Можно ли сделать так, чтобы обращения автоматически передавались наименее занятому серверу?
Решение Распределение нагрузки DNS реализуется просто. Достаточно включить данные всех серверов в /etc/tinydns/root/data: +www.pixels.net:208.201.239.37:86400 +ww.pixels.net :208.201.239.38:86400 +www.pixels.net:208.201.239.39:86400 @mail.pixels.net:208.201.239.37:a::86400 @mai1.pixels.net:208.201.239.37:b::86400
Комментарий Tinydns возвращает до восьми случайных адресов для каждого запроса. Если один сервер станет недоступным, то клиент, пытающийся подключиться к серверу, перейдет к следующему серверу в очереди.
См. также Распределение нагрузки между веб-серверами (http://cr.yp.to/djbdns/balance.html).
24.14 Синхронизация с другим сервером tinydns
425
24.14. Синхронизация с другим сервером tinydns Проблема Имеется второй сервер tinydns, используемый в качестве резервного. Как обеспечить его синхронизацию с главным сервером tinydns?
Решение Традиционный механизм «rsync через ssh» решает проблему. Следующий сценарий копирует файл DNS data на резервный сервер, а затем выполняет для него команду make: rsync -e ssh -az /etc/tinydns/root/data $backup-host:/etc/tinydns/root/data ssh $backup-host "cd /etc/tinydns/root; make" Замените $backup-host именем или IP-адресом удаленного сервера. Чтобы автоматизировать этот процесс, включите следующие строки в файл /etc/tinydns/root/Makefile; в этом случае выполнение команды make на основном сервере после обновления /etc/tinydns/root/data приведет к автоматическому обновлению резервного сервера: data.cdb: data /usr/local/bin/tinydns-data rsync -e ssh -az /etc/tinydns/root/data Sbackup-host:/etc/tinydns/root/data ssh $backup-host "cd /etc/tinydns/root; make"
Комментарий Перемещение обычных текстовых файлов — дело нехитрое; для него вполне подойдет программа rsync. Вы можете запланировать регулярные обновления с использованием сгоп или организовать защиту данных и аутентификацию при помощи шифрованных ключей ssh. Резервный сервер также может выполнять функции вторичного сервера DNS. Вы можете настроить клиентские компьютеры для его использования или зарегистрировать его наряду с главным сервером DNS в регистрирующей организации (см. раздел 24.6).
См. также Глава 16; глава 17.
Приложение А
Поиск документации Linux
Документация Linux в WWW Воистину, Linux — дитя Интернета. Чтобы уследить за всеми изменениями и найти всю необходимую документацию, вам придется как следует познакомиться с поисковыми системами и веб-сайтами соответствующей тематики. Первой остановкой на этом пути должен стать веб-сайт вашего дистрибутива Linux. Ищите электронную документацию, файлы HOWTO и FAQ, почтовые рассылки и архивы. Большинство дистрибутивов Linux в той или иной степени адаптируются, поэтому вы должны знать специфические особенности своего дистрибутива. Затем посетите веб-сайты отдельных программ, которыми вы пользуетесь. Поищите электронную документацию, рассылки и сообщества пользователей. Также в Интернете существует огромное количество общих веб-сайтов, посвященных Linux. Далее перечислены некоторые полезные ресурсы. Как обычно, помните о правилах сетевого этикета. Прежде чем отправлять вопрос в рассылку, проведите поиск в его архиве. Если недавно на этот вопрос уже был дан ответ (или если вопрос возникает слишком часто), возможно, вы получите нелестный ответ. Помните о хороших манерах, не обращайте внимания на «троллей» и грубиянов. Жизнь слишком коротка, чтобы тратить ее на бессмысленные перепалки.
Веб-сайты Linux The Linux Documentation Project — http://www.tldp.org/. IBM Developer Works — http://www-106.ibm.com/developerworks/Linux/. Librenix — http://librenix.com/. O'Reilly Network — http://oreillynet.com/. TuxMobile — http://www.tuxmobiL.org/howtos.html. Wireless LAN Resources for Linux — http://www.hlp.hp.com/personal/Jean_TourriLhes/ Linux/. The Linux Kernel Archives — http://www.kemeL.org. Linux Gazette — http://linuxgazette.net.
Поиск документации Linux
427
Насколько я знаю, существует только одна группа, посвященная поддержке женщин-пользователей Linux, но зато это совершенно замечательная группа. Она содержит ряд замечательных рассылок, включая Newchix для новичков; обучающие курсы по разным темам (таким, как программирование, файловые системы и сети) и т. д. LinuxChix — http://linuxchix.org.
Usenet В Usenet существуют десятки групп, посвященных Linux. Начните со следующих групп: comp.os.linux.announce com p.os.linux. hardware сотр.os.Linux.networking comp.os.linux.security
Google Как бы мы жили без Google? Домашняя страница Google — http://google.com. Google Groups, интерфейс поиска в Usenet — http://groups.google.com/.
< •
*эг
Приложение Б
Информация об устройствах
Веб-сайты Linux F A Q - http://et.tLdp.org/FAQ/Linux-FAQ/index.html. Linux Network Drivers at Scyld Computing Corporation — http://www.scyld.com/ network. Wireless LAN Resource for Linux — http://www.hLp.hp.com/personaL/Jean_TourriLhes/ Linux. Linux on Mobile Computers — http://tuxmobile.org/. Linux Devices — http://www.linuxdevices.com/. Linux USB Project — http://www.Linuxdevices.com/. Linux FireWire — http://www.Linuxl394.org/. LinuxPrinting.org — http://www.Linuxprinting.org/. SANE (Scanner Access Now Easy) — http://www.sane-project.org/. Advanced Linux Sound Architecture — http://www.aLsa-project.org/. Open Sound System for Linux — http://www.4front-tech.com/Linux.htmL0SS/. XFree86 — http://www.xfree86.org/. Xouvert — http://www.xouvert.org/. KernelTrap — http://kerneLtrap.org/. Linux-Dell-laptops — http://www.whacked.net/LdL/faq/. Debian-laptop, рассылка — http://Lists.debian.org/debian-Laptop/. Linmodems — http://www.linmodems.org/. Hardware Guys — http://www.hardwareguys.com.
Usenet сотр.os.Linux.hardware comp.os.linux.portable comp.os.linux.powerpc comp.os.linux.x comp.os.linux.aLpha
Алфавитный указатель А addgroup, команда, 111, 122 adduser, команда, 111, 114 AGP (Accelerated Graphics Port), 242 amavisd-new, 351 amavisd.conf, файл, 351 Apache, 356 Apache Toolbox, 361 Basic и Digest, 369 VirtualHost, директивы, 365 добавление модулей, 360 документация, 356 журналы обращений, 377 страницы ошибок, 372 установка, 358 хостинг, варианты, 357 apachectl, 359 apt-cdrom, команда, 51 apt-get, команда, 49 AuthName, директива, 369 Automachron, 312 awk, сортировка, 111 В Bash, приглашение, 284 BitKeeper, 288 bunzip2, 67 С cat, команда, 188 CD-DA, формат, 191 CD-R, CD-RW и CD-ROM, стандарты, 177 CD/DVD, запись, 176 cdrecord, команда, 179 Checklnstall, утилита, 54, 70 checkout, команда, 297 chfn, команда, 115 chgrp, команда, 139 chkconfig, утилита, 104 chmod, команда, 139 chown, команда, 139 CIFS/SMB, протоколы, 379 Clam Anti-Virus, программа, 351 col, команда, 28 Content Negotiation, 372
Core Development Tools, 67 Courier-IMAP, 323 cron и crontab, файлы, 109 CrossOver Office, 406 CUPS, 27, 230 диагностика, 240 драйверы принтеров, 230 сетевые принтеры, 231 фильтры, 230 CVS, 288 checkout, команда, 297 update, команда, 298 песочница, 297 репозитарии, 289 Cygwin, 286 Cyrus-SASL, установка, 329
D daemontools, 417 Debian, 49 загрузочные диски, 174 инициализация, 98 обновление пакетов, 55 пакеты, 49 поиск установленных программ, 58 разрешение конфликтов, 61 уровни выполнения, 98 DHCP, протокол, 409 dig, команда, 314 djbdns, 409 dmesg, 74 DNS, 409 авторитетные серверы, 410 корневые серверы, 410 терминология, 410 DNSRBL, списки, 348 dpkg, команда, 49 DRI243 DSO.358 e2fsprogs, 141 edquota, команда, 134 egrep, команда, 23 El Tori to, 177
430
Emacs, 79 Ext2, файловая система, 140 Ext3, файловая система, 141
F famd,321 fdisk, 78 FHS, 137 Foomatic, 233 FreshRPMs, 45 fsck, команда, 141 fstab, файл, 151 gcc, программа, 67 gdm, 101 GECOS, данные, 114 getty, 244 Gimp-Print, 233 grep, команда, 68 groff, команда, 24 groupadd, команда, 120 groupdel, команда, 121 growisofs, утилита, 189 grpck, команда, 123 GRUB, 193 заставка, 212 защита системных файлов, 210 меню загрузки, 204 установка, 196 gunzip, 67
Н halt, команда, 107 httpd.conf LogFormat, директивы, 367 VirtualHost, директивы, 365 IANA,410 ICANN, 410 ШАР, протокол, 320 ipconfig, 414 JFS, файловая система, 142 JOE, 79 Joliet, стандарт, 178
К КЗЬ, 176 kdm, 101 kerneld, 171 keychain, 282 Knoppix, 210 загрузка, 219 установка на жесткий диск, 228 установка программ, 227 Konqueror, 20
Алфавитный указатель
LILO, 193 альтернативная загрузка, 214 загрузка, 213 переход на GRUB, 193 Linux X Window System, 101 перезагрузка, 107 процесс загрузки, 97 In, команда, 105 locate, команда, 23 lpr, команда, 27 lsmod, команда, 248 lspci, программа, 73
М MAC, адреса, 415 make, 67 man, команда, 19 manpath, команда, 25 MBR.97, 193 menuconfig, утилита, 163 mkboot, утилита, 174 mkdir, команда, 157 mkisofs, утилита, 181 Mondo Rescue, 253, 266 Monotone, 288 mount, команда, 150 Mozilla, 345 mv, команда, 159 N NetBEUI, 380 NetBIOS, 380 netGo, 414 netsync, протокол, 289 nobody, пользователь, 112 NTFS, файловая система, 153 ntp, 309 ogg-vorbis, формат, 192 Open Relay Database, 349 OpenSSH, 264 passwd, команда, 118 Pinfo, 20 ping, 64 РОРЗ, почтовые серверы, 321 Postfix, 320 Cyrus-SASL, установка, 329 SpamAssassin, 354 аутентификация, 329 журналы, 346 poweroff, команда, 108 PuTTY, 286 pwck, команда, 123
431
Алфавитный указатель
quotacheck, команда, 134
R rcsdiff, команда, 293 Red Hat загрузочные диски, 174 инициализация, 98 уровни выполнения, 98 ReiserFS, файловая система 142 remove, команда, 299 repquota, команда, 134 RJOE, 80 Rock Ridge, стандарт, 178 root, привилегии su, 131 sudo, 132 RPM, 32 зависимости, 31 обновление пакетов, 33 удаление пакетов, 34 установка пакетов, 32 rsync, 253 с
Samba, 379 аутентификация, 385 версии 2.x и 3.x, 379 главный контроллер домена, 391 клиенты Linux, 397 клиенты Windows, 393 SASL, 322 SCSI, устройства, 75 setgid, 145 Shadow Suite, 110 Slack ware инициализация, 98 уровни выполнения, 98 SMTP, протокол, 320 sox, команда, 191 SpamAssassin, 354 Spamcop, 349 Spamhaus, 349 SPEWS, 349 split, утилита, 188 ssh, 253 sudo, команда, 132 SuSE ... • . загружаемые модули ядра, 171 tinydns, 422 touch, команда, 157 traceroute, 64
U umask, 148 umount, команда, 150
USB, устройства, 75 uscpi-tcp, 417 useradd, команда, 110 userdel, команда, 117
a
V vi,79 Vim, 79, 87 visudo, утилита, 132
W Webalizer, 377 Windows OpenSSH,286 Samba, домены, 393 безопасность, 343 X Window System, 241 xconfig, утилита, 163 xdm, 101 XF86Config, файл, 245 XFdrake, утилита, 245 XFree86, проект, 241 xinetd, службы, 104 Xnest, 251
p
ж ,
i Yelp, 20 Yum, 44 обновление пакетов, 46 получение информации, 47 сопровождение, 48 удаление пакетов, 47 установка, 44 zcat, программа, 24 zless, команда, 24 авторитетные серверы, 410 архивация и восстановление, 253 асинхронные файловые системы, 152 атрибуты файлов, 140 аутентификация Samba, 385 smtp-auth, 332 с ключом хоста, 275 с открытым ключом, 275 безопасность, 110, 343 amavisd-new, 352 Clam Anti-Virus, 351 LILO.216 SSL, 369
432
Алфавитный указатель
В виртуальные консоли, 244 виртуальные хосты, 365 внешняя фрагментация, 140 внутренняя фрагментация, 140 вредоносные программы, 343
П
группы, ПО
р
д двоичные драйверы, 73 дисковые квоты, 134 документация, 19
Ж жесткие ограничения, 134 жесткие ссылки, 140 журнальные файловые системы, 141
3 зависимости, 31 загрузчики системные, 193 закрытые ключи, 274 заплатки ядра, установка, 171 К
каталоги, 157 компиляция программ, 54 конфигурационные файлы .config, 164 .cvsrc, 302 .joerc, 82 .vimrc, 88 amavisd.conf, 351 bashrc, 284 ntp.conf, 313 rsyncd.conf, 257 XF86Config, 246 кэширующие серверы, 410
Л логические блоки, 140 логические тома, 140
М метаданные, 141 мягкие ограничения, 134 мягкие ссылки, 140 общий доступ к файлам в Windows, 381 протоколы, 380 открытые ключи, 274
пароли, управление, 118 пользователи, управление, 110 привязка команд, 89 принтеры диагностика, 240 установка, 232 процесс загрузки, 97 г
разделы, 193 fdisk, создание, 159 разрешение имен, 409 разрешения, 140 редактор. См. AppBrowser
С серверы времени, 309 системы управления версиями, 288 службы запуск и остановка, 105 приоритет, 103 стримеры, 253
Т текстовые редакторы, 79 уровни выполнения, 98 учетные записи, блокировка, 117 файловые системы, 137 Ext3, 141 JFS, 142 асинхронные, 141 внешняя фрагментация, 140 внутренняя фрагментация, 140 логические блоки, 140 метаданные, 141 цепная загрузка, 193
Э экстенты, 140 эмблемы, 376 ядро, 162 xconfig, 163 модификация, 162 настройка, 163