You are on page 1of 425

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



Содержание

Предисловие 16
Для кого написана эта книга 16
О чем рассказано в книге 17
Платформы 17
Благодарности 18
От издательства 18
Глава 1. Документация 19
1.1. Введение 19
1.2. Общие сведения о man-страницах 20
1.3. Поиск нужной man-страницы 22
1.4. Поиск потерянных man-страниц 23
1.5. Чтение man-страниц без программы просмотра 24
1.6. Настройка путей поиска man-страниц 24
1.7. Использование info-страниц 25
1.8. Печать man-страниц 26
1.9. Печать info-страниц 27
1.10. Печать отдельных man- или info-страниц 28
1.11. Поиск всей документации к программе 28
Глава 2. Установка и модификация программ в системах
на базе RPM 31
2.1. Введение 31
2.2. Установка пакетов 32
2.3. Обновление пакетов 33
2.4. Удаление пакетов 34
2.5. Получение информации об установленных пакетах 35
2.6. Получение информации о пакетах, не установленных в системе 37
2.7. Поиск недавно установленных пакетов 37
2.8. Перестройка базы данных RPM 38
2.9. Отслеживание библиотек, построенных по исходным текстам,
в системах на базе RPM 39
2.10. Решение проблем установки RPM 41
2.11. Сборка пакетов по исходным текстам 42
8 Содержание

2.12. Настройка параметров сборки SRPM 43


2.13. Установка Yum 44
2.14. Настройка Yum 45
2.15. Установка и обновление пакетов в Yum 46
2.16. Удаление пакетов в Yum 47
2.17. Получение информации об установленных пакетах в Yum 47
2.18. Сопровождение Yum 48
Глава 3. Установка и сопровождение программного
обеспечения в системах на базе Debian 49
3.1. Введение 49
3.2. Поиск программ для Debian 50
3.3. Установка пакетов Debian с диска CD-ROM 51
3.4. Установка пакетов в системе на базе Debian 52
3.5. Удаление пакетов из системы Debian 53
3.6. Установка программ в Debian по исходным текстам 54
3.7. Обновление пакетов в Debian 55
3.8. Обновление системы Debian 55
3.9. Установка обновленной версии Debian 56
3.10. Создание смешанной системы Debian 57
3.11. Поиск программ, установленных в системе Debian 58
3.12. Операции с кэшем пакетов Debian 60
3.13. Разрешение конфликтов зависимостей в Debian 61
3.14. Создание локального архива Debian 62
3.15. Выбор пакетных зеркал для apt-proxy.conf 63
3.16. Включение существующего кэша пакетов в apt-proxy.conf 64
Глава 4. Установка программ по исходным текстам 66
4.1. Введение 66
4.2. Подготовка системы к компиляции программ по исходным текстам 66
4.3. Построение списка добавленных файлов для упрощения удаления
программ 67
4.4. Установка программ по исходным текстам 68
4.5. Создание пакетов по исходным текстам с применением Checklnstall 70
Глава 5. И д е н т и ф и к а ц и я оборудования 72
5.1. Введение 72
5.2. Идентификация оборудования при помощи Ispci 73
5.3. Сбор информации об оборудовании программой dmesg 74
5.4. Получение текущей сводки оборудования с использованием /ргос 76
5.5. Просмотр разделов в программе fdisk 78
Глава 6. Редактирование текстовых файлов в JOE и Vim 79
6.1. Введение 79
6.2. Поиск команд JOE 81
6.3. Настройка JOE 82
6.4. Сохранение личной конфигурации JOE в отдельном файле 83
6.5. Копирование текста между файлами в JOE 83
6.6. Поиск и замена в JOE 84
6.7. Вертикальное выделение текста в JOE 85
6.8. Поиск и открытие файлов в JOE 86
6.9. Быстрое изучение Vim 87
Содержание

6.10. Создание автотекста в Vim 88


6.11. Привязка команд к клавишам 89
6.12. Настройка Vim 90
6.13. Быстрое перемещение в Vim 91
6.14. Сеансы Vim 92
6.15. Назначение редактора по умолчанию 94
6.16. Определение параметров компиляции Vim 95
Глава 7. Запуск и завершение работы Linux 97
7.1. Введение 97
7.2. Смена уровня выполнения после загрузки 99
7.3. Смена уровня выполнения по умолчанию 100
7.4. Запуск и остановка X 101
7.5. Управление уровнями выполнения в Debian 102
7.6. Создание уровней выполнения с текстовым и графическим
входом в Debian 102
7.7. Управление уровнями выполнения в Red Hat 104
7.8. Ручная настройка служб, запускаемых при загрузке 105
7.9. Ручная остановка и запуск служб 106
7.10. Выключение компьютера или перезагрузка Linux 107
7.11. Запрет или ограничение доступа к Ctrl+Alt+ Delete 108
7.12. Автоматическое выключение компьютера 109
Глава 8. Управление пользователями и группами 110
8.1. Введение 110
8.2. Отделение обычных пользователей от системных 111
8.3. Определение кодов UID и GID 112
8.4. Создание учетной записи пользователя командой useradd 113
8.5. Создание учетной записи пользователя командой adduser 114
8.6. Изменение учетной записи пользователя 115
8.7. Удаление пользователя 117
8.8. Простое завершение процессов 118
8.9. Блокировка учетных записей 118
8.10. Управление паролями 119
8.11. Создание групп командой groupadd 120
8.12. Удаление групп командой groupdel 121
8.13. Создание системного пользователя 121
8.14. Создание системных групп командой addgroup 122
8.15. Изменение принадлежности к группам 123
8.16. Проверка целостности файлов паролей 123
8.17. Серийное добавление новых пользователей 124
8.18. Серийная замена паролей 129
8.19. Серийное включение пользователей в группы 130
8.20. Временное использование привилегий root 131
8.21. Временное предоставление привилегий root командой sudo 132
8.22. Дисковые квоты 134
Глава 9. Операции с файлами и разделами 137
9.1. Введение 137
9.2. Настройка разрешений в числовом формате chmod 142
9.3. Выполнение массовых операций командой chmod 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 . З а п л а т к и , настройка и обновление ядра 162
10.1. Введение 162
10.2. Добавление новых возможностей в ядро 2.4 164
10.3. Усечение типового ядра 2.4 166
10.4. Обновление до последней стабильной версии ядра 2.4 168
10.5. Построение ядра 2.6 169
10.6. Добавление новых возможностей в ядро 2.6 170
10.7. Добавление нового загружаемого модуля ядра 170
10.8. Установка заплаток ядра 171
10.9. Удаление заплатки ядра 172
10.10. Создание образа initrd 173
10.11. Создание загрузочного диска в Debian 174
10.12. Создание загрузочного диска в Red Hat 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 . Системный загрузчик и альтернативная з а г р у з к а 193
12.1. Введение 193
12.2. Переход с LILO на GRUB 194
12.3. Установка GRUB без дискеты 196
12.4. Установка GRUB сценарием grub-install 197
12.5. Подготовка системы для альтернативной загрузки Linux 198
12.6. Установка дополнительных экземпляров Linux
в системе с альтернативной загрузкой 199
Содержание 11

12.7. Определение параметров загрузки в командной консоли GRUB 201


12.8. Настройка загрузочного раздела 203
12.9. Создание меню загрузки в GRUB 204
12.10. Настройка menu.1st 205
12.11. Добавление Windows 95/98/ME в систему Linux 206
12.12. Добавление Windows NT/2000/XP в систему с альтернативной загрузкой... 208
12.13. Восстановление GRUB в MBR с использованием диска Knoppix 209
12.14. Защита системных файлов паролем GRUB 210
12.15. Защита отдельных пунктов меню GRUB 211
12.16. Создание заставки GRUB 212
12.17. Загрузка Linux с использованием LILO 213
12.18. Альтернативная загрузка Linux с использованием LILO 214
12.19. Альтернативная загрузка Windows и Linux с использованием LILO 215
12.20. Создание загрузочной дискеты LILO 216
12.21. Защита LILO паролем 216
12.22. Создание резервной копии MBR 217
Глава 13. Восстановление работоспособности системы
на примере Knoppix 219
13.1. Введение 219
13.2. Загрузка Knoppix 219
13.3. Создание загрузочной дискеты Knoppix 221
13.4. Сохранение конфигурации Knoppix на флэш-диске 221
13.5. Создание зашифрованного домашнего каталога Knoppix 222
13.6. Копирование файлов на другой PC с системой Linux 223
13.7. Копирование файлов в общий каталог Samba 224
13.8. Копирование файлов на диск CD-R/RW 225
13.9. Редактирование конфигурационных файлов в Knoppix 226
13.10. Установка программ из Knoppix 227
13.11. Восстановление потерянного пароля root 227
13.12. Установка Knoppix на жесткий диск 228
13.13. Запуск антивирусных программ на Windows PC 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 241
15.1. Введение 241
15.2. Одновременное использование X и консолей 243
15.3. Установка нового видеоадаптера 245
15.4. Редактирование файла XF86Config 246
15.5. Включение аппаратного ускорения BXFree86/DRI 247
12 Содержание

15.6. Диагностика проблем с ускорением трехмерной графики 248


15.7. Настройка startx 249
15.8. Смена экранного менеджера 250
15.9. Одновременный запуск разных оконных менеджеров 251
Глава 16. Архивация и восстановление 253
16.1. Введение 253
16.2. Применение rsync для локальной пересылки и синхронизации файлов . 254
16.3. Безопасная пересылка данных с применением ssh 256
16.4. Настройка сервера архивации rsync 257
16.5. Защита модулей rsync 258
16.6. Настройка анонимного общедоступного сервера rsync 260
16.7. Запуск демона rsync при загрузке системы 261
16.8. Настройка выбора файлов 262
16.9. Автоматизация архивации rsync на базе ssh 262
16.10. Ограничение загрузки канала при использовании rsync 263
16.11. Настройка путей к файлам в rsync 264
16.12. Установка rsync на клиентах Windows 264
16.13. Создание «сообщения дня» в rsync 265
16.14. Создание загрузочного компакт-диска в Mondo Rescue 266
16.15. Проверка архивов Mondo 269
16.16. Создание загрузочного диска DVD 269
16.17. Использование Mondo Rescue для клонирования систем Linux 270
16.18. Использование mindi-kernel 271
16.19. Восстановление системы с диска Mondo 272
16.20. Восстановление отдельных файлов с диска Mondo 272
Глава 1 7 . У д а л е н н ы й доступ 274
17.1. Введение 274
17.2. Настройка OpenSSH 275
17.3. Построение новых ключей хостов 277
17.4. Аутентификация с использованием открытых ключей 278
17.5. Использование нескольких пар ключей 280
17.6. Вход без пароля с использованием ssh-agent 280
17.7. Вход без пароля с использованием keychain 282
17.8. Беспарольный вход для заданий сгоп 283
17.9. Автоматическое завершение ssh-agent при выходе 283
17.10. Настройка приглашения Bash для ssh 284
17.11. Туннелирование X через SSH 284
17.12. Подключение с компьютера с системой Windows 285
17.13. Назначение разрешений для файлов ssh 287
Глава 1 8 . У п р а в л е н и е версиями 288
18.1. Введение 288
18.2. Построение локального репозитария RCS 289
18.3. Выборка старых версий файлов в RCS 291
18.4. Сравнение версий файла в RCS 293
18.5. Управление системными конфигурационными файлами в RCS 294
Содержание 13

18.6. Использование CVS для создания однопользовательских


локальных репозитариев 296
18.7. Включение новых файлов в репозитарий CVS 298
18.8. Удаление файлов из репозитария CVS 299
18.9. Создание общего репозитария CVS 300
18.10. Совместное использование репозитария группами
пользователей 301
18.11. Обращение к удаленному репозитарию CVS 302
18.12. Обновление рабочих файлов в CVS 303
18.13. Выборка конкретных старых версий из CVS 304
18.14. Построение анонимного репозитария CVS 305
18.15. Настройка среды CVS 307
18.16. Вычисление объема репозитария CVS 308
Глава 1 9 . NTP 309
19.1. Введение 309
19.2. Настройка локального сервера времени 310
19.3. Подключение к локальному серверу времени 311
19.4. Управление доступом 312
19.5. Выбор пула NTP 314
19.6. Подключение к серверу времени при непостоянном подключении 315
19.7. Настройка нескольких локальных серверов времени 316
19.8. Аутентификация с использованием ключей NTP 317
Глава 2 0 . Почтовый сервер Postfix 320
20.1. Введение 320
20.2. Построение почтового сервера РОРЗ 321
20.3. Построение почтового сервера РОРЗ в Debian 324
20.4. Тестирование почтового сервера SMTP/POP3 326
20.5. Отправка интернет-почты 328
20.6. Прием интернет-почты 329
20.7. Установка Cyrus-SASL 329
20.8. Установка Cyrus-SASL в Debian 331
20.9. Настройка smtp-auth для аутентификации пользователей 332
20.10. Применение smtp-auth для аутентификации Postfix
на другом сервере 334
20.11. Настройка полного доменного имени 335
20.12. Построение почтового сервера ШАР 336
20.13. Подключение пользователей 337
20.14. Общий доступ к папкам ШАР 338
20.15. Использование виртуальных доменов Postfix 340
20.16. Создание списка рассылки с применением couriermlm 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 351


21.9. Настройка SpamAssassin в Postfix 354
Глава 22. Веб-сервер Apache 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 379
23.1. Введение 379
23.2. Построение простого автономного файлового сервера Samba
для Windows 381
23.3. Построение одноранговой сети Windows/Linux 383
23.4. Включение общего доступа к файлам в Windows 384
23.5. Включение аутентификации на сервере Samba 385
23.6. Массовое преобразование системных пользователей 386
23.7. Подключение к Samba из Windows 95/98/ME 387
23.8. Шифрование паролей в Windows 387
23.9. Списки управления доступом (ACL) 388
23.10. Создание общедоступных сетевых каталогов 389
23.11. Работа с домашними каталогами пользователей в Samba 390
23.12. Построение главного контроллера домена 391
23.13. Подключение Windows 95/98/ME к домену Samba 393
23.14. Подключение клиентов Windows NT/2000 к домену Samba 394
23.15. Подключение клиентов Windows XP к домену Samba 395
23.16. Включение перемещаемых профилей 396
23.17. Подключение клиентов Linux к одноранговой сети
или файловому серверу Samba 397
Содержание 15

23.18. Подключение клиентов Linux к рабочим группам Samba


из командной строки 399
23.19. Подключение клиентов Linux к домену Samba
из графического обозревателя 401
23.20. Подключение клиентов Linux к домену Samba из командной строки 402
23.21. Синхронизация паролей Samba и Linux 403
23.22. Общий доступ к принтерам Linux из системы Windows 403
23.23. Общий доступ к принтерам Windows из системы Linux 404
23.24. Запуск приложений Windows в Linux 405
Глава 24. Разрешение имен 409
24.1. Введение 409
24.2. Локальное разрешение имен с использованием файла hosts 411
24.3. Настройка сервера DHCP 412
24.4. Настройка клиентов dhcp 413
24.5. Включение статических хостов в dhcp 414
24.6. Создание общедоступного сервера DNS 415
24.7. Установка djbdns 417
24.8. Перемещение журналов tinydns и dnscache 418
24.9. Создание локального кэширующего сервера имен на базе djbdns 418
24.10. Настройка клиентов Linux и Windows для использования кэширующего
сервера DNS 420
24.11. Создание общедоступного сервера DNS с использованием tinydns 421
24.12. Построение частного сервера DNS 423
24.13. Простое распределение нагрузки в tinydns 424
24.14. Синхронизация с другим сервером tinydns 425
Приложение А. Поиск документации Linux 426
Документация Linux в WWW 426
Веб-сайты Linux 426
Usenet 427
Google 427
Приложение Б. Информация обустройствах 428
Веб-сайты 428
Usenet 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) - determine search path for manual pages
manpath (5) - format of the /etc/manpath.config f i l e

Комментарий
Упомянутые команды выполняют поиск по ключевым словам в секциях DESCRIP-
TION 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.. .#######»############## [ЮО*]
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
1
. 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 Samuel-
son) за этот замечательный сценарий.
Листинг 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 depen-
dency». Добро пожаловать в «кошмар зависимостей»!
Решение
Соберите воедино все пакеты, необходимые для разрешения зависимостей, и ус-
тановите их все сразу. Пример:
# 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.6-
I.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/max-
rpm/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] use PACKAGE [ARG=yes]
without-PACKAGE do not use PACKAGE
with-fhs Use FHS-compliant paths
with-privated=DIR 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.43-
0.fdr.l.rh90.i386.hdr
getting /var/cache/yutn/fedora-stable/headers/libzvt-devel -0-
2.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, чтобы снизить вероятность ошибок при выполнении dist-
upgrade.

См. также
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 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
В строке 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.
Теперь проверьте, что произойдет при удалении существующего пакета libpam-
modules:
# 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 dict-
gcide 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/apt-
proxy.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.source-
forge.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.source-
forge.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++, Objec-
tive-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 -D make installpackages
# checkinstall -R make modules_insta11
# checkinstall -S i n s t a l l . s h
# checkinstall -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) (prog-
i 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 ] grep - i isa
isapnp: Scanning f o r PnP c a r d s . . .
isapnp: SB audio device q u i r k - i n c r e a s i n g port range
isapnp: 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. Получение текущей сводки оборудования с использованием /ргос 77

cpu family 6
model 3
model name AMD Duron(tm) Processor
stepping 1
cpu MHz 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 Глава 6
Редактирование
текстовых файлов
Jв? в ЗОЕ и 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 («Re-
stricted 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 system-vimrc _gvimrc
vimrc vimrc-filetype gvimrc :mkvimrc
_vimrc vimrc-example.vim .gvimrc
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"™..?"
г.
Сокращения
""" «* •"""""м""м"' """""""""" • """ 'м"""

: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 в режиме вставки
:map! .ah <A href="">
:map! .a </A>
:map! .b <B><Esc>ea</B><Esc>a
:map! .i <I><Esc>ea</I><Esc>a
:map! .1 <LI><Esc>ea</LI><Esc>a
Все изменения, внесенные в -/.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


к
Move aroundUse the cursor keys, 01: "h" to go left, h 1
"j" to go down, "k" to go up, "1" to go right. j
ClGse this window use ":q<Bnt#o*.
Get out of Vim Use ":qal<Bnt*E>* (careful, all changes ace lost!».

Jump to a subject Position the cunot on a tag between Ibasiej and hit CTRL-;.
With the mouse ":set mouse=a'1 to enable the mouse (in к teem ОС GUI) .
Double-click the left mouse button on a tag between ibfttsj.
jump back Type CTRJ..--T C LCTPRXi-0(repeat to go further back).

let specific help 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).
94 Глава 6. Редактирование текстовых файлов в JOE и Vim

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: Use the cursor keys, or "h" to go Lett, h 1
" j " to go down, "k" to go up, "1" to go right, j
close this window: use ":q<]SfttBE>'.
| 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 file: "$VIM/vimrc"


user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
system gvimrc file: "$VIM/gvimrc"
user gvimrc file: "$HOME/.gvimrc"
system menu file: "SVIMRUNTIME/menu.vim"
fall-back for $VIM: "/usr/share/vim"

Compilation: gcc -c - I . -Iproto -DHAVE+CONFIG H -DFEAT_GUI_GTK -I/usr/include/gtk-


2.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 0:00 /usr/bin/kdm
544 ? S< 0:10 /usr7XllR6/bin/X :0 -dpi 100 -nolisten tcp vt7 -auth /var/
lib/kdm/A:O-PbCldj
В системе работает 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 99 5 . stop 01 1 2 3 4 6 .
Adding system startup for /etc/init.d/kdm ...
/etc/rcO.d/KOlkdm -> ../init.d/kdm
/etc/rcl.d/KOlkdm -> . ./init.d/kdm
/etc/rc2.d/K01kdm -> . ./init.d/kdm
/etc/rc3.d/K01kdm -> . ./init.d/kdm
/etc/rc4.d/K01kdm -> . ./init.d/kdm
/etc/rc5.d/K01kdm -> . ./init.d/kdm
/etc/rc6.d/S99kdm -> ../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 3:on 4 :on 5: on 6: Off
syslog O:off l:off 2:on 3:on 4:on 5: on 6: Off
cups O:off l:off 2:on 3 :on 4 :on 5: on 6: off
apmd O:off l:off 2:on 3:on 4 :on 5: on 6: Off
xinetd based services:
chargen-udp off
rsync: off
sgi-fam: on
Вывод информации об отдельной службе:
# 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, Fetch-
mail, 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

# Чтение строки входных данных.


# Формат входного файла: продолжение #
126 Глава 8. Управление пользователями и группами

Листинг 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 "usage: $prog [-v] [-n] username ..."
echo " $prog [-v] [-n] [-g] groupname ..."
echo " $prog [-v] [-n] [-a]"
echo " -g change passwords of everyone in a group"
echo " -a change everyone's password"
echo " -v verbose"
echo " -n don't do i t . j u s t simulate (implies - v ) "
exit 0

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 -,
продолжение с
128 Глава 8. Управление пользователями и группами

Листинг 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. Серийная замена паролей 129

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"
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 specifi-
cation») добавляются отдельные пользователи:
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 Stan-
dard) была разработана как «добровольный стандарт», соблюдаемый в большин-
стве версий Linux. Далее перечислены обязательные элементы корневой файло-
вой системы Linux:
/ — корневой каталог;
/bin — важнейшие системные команды;
/boot — файлы статического загрузчика;
/dev — файлы устройств;
/etc — системные конфигурационные файлы, специфические для хоста;
/lib — общие библиотеки, необходимые для работы локальной системы;
/mnt — временные точки монтировки;
/opt — дополнительные программные пакеты (в Linux используются мало);
/ргос — текущая информация о конфигурации и состоянии ядра;
/sbin — команды администрирования системы;
/tmp — временные файлы (в нормальных системах они уничтожаются между
перезапусками);
/usr — общие файлы, данные только для чтения и двоичные файлы;
/var — файлы переменного размера (такие, как почтовые ящики и журналы).
Следующие каталоги считаются необязательными, потому что они могут на-
ходиться в любом месте сети, тогда как обязательные каталоги должны присут-
ствовать для нормальной работы компьютера:
/home — личные файлы пользователя;
/root — личные файлы суперпользователя.
138 Глава 9. Операции с файлами и разделами

Те, кого действительно заинтересует эта тема, найдут дополнительную инфор-


мацию в спецификации 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
# Is -1 /tmp/.ICE-unix/551
srwx- 1 caria caria 0 Jan 12 09:00 /tmp/.ICE-unix/551
Тип файлов может указываться в командной строке 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); File-
system 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 -v carlas:share index.txt
changed ownership of 'index.txt' to carlas:share
$ chown -v :share toc.txt
changed 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 End Blocks Id System


/dev/hdal * 1 893 7172991 7 HPFS/NTFS
/dev/hda2 894 1033 1124550 с W95 FAT32 (LBA)
/dev/hda3 1034 2501 11791710 f W95 Ext'd (LBA)
/dev/hda5 2437 2501 522081 82 Linux swap
/dev/hda6 1034 1670 5116639+ 83 Linux
/dev/hda7 1671 2436 6152863+ 83 Linux

Команда df (Disk Free) покажет, какие разделы уже смонтированы и какие точ-
ки подключения при этом используются:
tdf
Filesystem lK-blocks Used Available Use? Mounted on
/dev/hda6 5116472 1494584 3621888 30% /
/dev/hda7 6152668 4011652 2141016 66% /home
Команда df также может использоваться для отображения информации об од-
ном смонтированном разделе. Ключ -h выводит числовые значения в более удоб-
ном формате:
$ df -h /dev/hdc6
Filesystem Size Used Avail Use£ Mounted on
/dev/hdc6 4.9G 1.4G 3.5G 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 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 Exfd (LBA)
/dev/hda5 2437 2501 522081 82 Linux swap
/dev/hda6 1034 1670 5116639+ 83 Linux
/dev/hda7 1671 2436 6152863+ 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 Start End Blocks Id System


/dev/sdal * 1 499 63586 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 'file4.txt'
removed 'file5.txt'
removed 'file6.txt'
removed '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/icon-
zip.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 #mke2fs/dev/hda3
Ext3 #mke2fs-j/dev/hda3
ReiserFS # mkreiserfs/dev/hda3
JFS #mkfs.jfs/dev/hda3
XFS # 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 — важная информация о версиях дсс и других используемых программах.
164 Глава 10. Заплатки, настройка и обновление ядра

ь maturity level options


General setup 0ATA/ATAPI/MFM/RLL support
:
'••-D Configure standard kernel features (Го* — й Enhanced IDE/MFM/RLL disk/cdrcm/tape/fioppy suppon
•Loadable module support У Pr*Uf set DocumentatiarVide.tttfor rifeip/info on IDE drives
Processor type and features > D Support for SATA (deprecated; conflicts with libata 3ATA driver] (NEW)
-Firmware Dnvers
;
- г О Use old disk-only driver on primary lnterrac_e
: Power management options (ACPI, АРМ) .•
j-ACPI (Advanced Configuration and Powe. e multi-mode oy default
I -АРМ (Advanced Ролег Management) Bid: ! В PCMCIA IDE support
:
- CPU Frequency scaling iSInclude IDE/ATAPI CDROM support
•Bus Options (PCI. PCMCIA. EISA, MCA, ISA). i-SlnclLidc IDE/AT API TAPE support (EXPERIMENTAL)
!••• PCMCIA/CardBus support i s Include IDE/ATAPI FLOPPY support
L
PCIHotplu_ Support h BSCSI smulation support
-••Executable file formats ; D I D E TDSkfile Access
••
:• Device Drivers
•• --Generic Driver Options
[~ Memory Technology Devices (MT D) L Include IDE/ATA-2 DISK Support (BLK_DEV_IDEDISK)

;•• Parallel port support
j Plug and Piay support This will include enhanced support for MFM/RLL/IDE hard disks. IT
;• Block devices 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
;• SCSI device support system, you can say N here.
!- Old CD-ROM dnvers (not SCSI, not IDE)

:•• Multi-device support (RAID and LVMJ To compile this driver as a module, choose M here; the
|- Fusion MPT device support module will be called ide-disk.
I IEEE 1394 (FireWire} support Do not compile this driver as a module if your root file system
(the one containing the directory/) is located an the IDE disk.
I I2O device support
IT';•Networking support
if unsure, say Y.
; hOAmateur Radio support
i %-Ш1гОА (infrared) lubsyitsn suppc

. . ••.••••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=-new-
kernel.
Выполните следующие команды из каталога /~/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=-new-
kernel.
Выполните следующие команды из каталога /~/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 mo-
dules.
170 Глава 10. Заплатки, настройка и обновление ядра

См. также
Раздел «Введение» настоящей главы; электронная справка в программе настрой-
ки ядра; раздел 10.2.

10.6. Добавление новых возможностей


в ядро 2.6
Проблема
Требуется добавить новые возможности в ядро 2.6.

Решение
Выполните инструкции из раздела 10.5, но вместо xconfig используйте old-
conficr
$ 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 Candi-
dates) находятся в одном шаге от включения в стабильное ядро, а кандидаты рге (Рге-
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 mo-
dulesjnstall:
# 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. Позволяет использовать
в именах файлов символы Юникода, а также поддерживает длинные имена.
Кроме того, создает усеченные имена файлов с целью совместимости с MS-
DOS (странные имена вида FILENA~1.TXT). Имена файлов содержат до 64 сим-
волов, могут включать пробелы и читаются на компьютерах с системой Win-
dows 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-CD-
Roast или КЗЬ) сообщает, что она не может найти в системе устройство записи.
А может быть, программа видит дисковод 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 9456 1
scsi mod 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)
атем выполните три команды:
1
grub> root (hdO.O)
grub> setup (hdO)
grub> quit
Перезагрузите систему; вас приветствует командная консоль 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
/dev/hda2 Первичный 2500 Мбайт /
/dev/hda3 Первичный 3000 Мбайт /home
/dev/hda4 Расширенный
/dev/hda5 256 Мбайт /swap
Свободно 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 /boot/vmlinuz-2.4.22-1 root=/dev/hdal ro
initrd /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 MS-
DOS»; раздел 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 не нужно.

Комментарий •

Если потребуется организовать альтернативную загрузку нескольких версий Win-


dows, начните с самой старой и устанавливайте их по порядку, вплоть до самой
новой. При этом вы можете установить только один экземпляр 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 MS-
DOS»; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub;
раздел 12.13.

12.13. Восстановление GRUB в MBR


с использованием диска Knoppix
Проблема
При установке Windows на компьютере с альтернативной загрузкой Linux/Win-
dows содержимое 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/DVD-
ROM/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 (http://www.gnu.org/software/
manual/grub, html).

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 мож-
но найти большое количество специализированных проектов, вдохновленных Knop-
pix, а также информации о создании собственных загружаемых компакт-дисков.

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. Загрузите Knop-
pix с вставленным флэш-диском. Откройте меню 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 и выполните команду Sys-
tem • КЗЬ 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, Window-
maker, 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
Проблема
Нужен быстрый, недорогой способ проведения антивирусного сканирования в Win-
dows без привязки к операционной системе. Вы знаете, что установочные диски
коммерческих антивирусных продуктов (например, от 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 JetDi-
rect);
О приобретение аппаратных серверов печати (например, 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 O,r',
logo иге Bib Imdelrieli. uui.ud. of -.a-., Jc •••.^ e_Pi .•.•.._. ; 4 OSlir 1г_авПЯГИ J»9 !•,_ prowrt, ol С я (ewecuve

Рис. 1 4 . 1 . Страница конфигурации CUPS


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/cups-
help.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, getty-
ps, 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 Size Used by Not tainted
tdfx 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
#ехес icewm-experimental
#exec afterstep
#exec enlightenment
#exec biackbox
Такой список позволяет легко сменить оконный менеджер по умолчанию, сняв
комментарий с другой строки.

Комментарий
Gnome, KDE и XFce должны запускаться своими стартовыми сценариями (gnome-
session, 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/sys-
config/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 ~/web_up1oad
building f i l e list...done

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 и — in-
clude-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 » Fjrurtnri ',l-m t

carla@windbag:~$ csync windbag::

I \ l\ I I _\l I / _ \l _ '_ \/ _ \ I _/ _ \
I I/ I/ / / / / _ / /_/ I I I I ,' I _/ I IJ 1 I ,'
1_/1_Л !J\ A /_/ IJ IJ\ / \ /\ ~ /

< I i
// // V / / /

I hope you enjoy your visit. If you encounter any


difficulties, please contact t5yncadmin@test.net

0-0
/ e\
(i I)
• \ / •

home My Home Atea !


die shared directoL-y
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.x-
howto); форумы пользователей 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.x-
howto); форумы пользователей 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.x-
howto); форумы пользователей 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.x-
howto); форумы пользователей 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 (http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/
index.html).

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?
286 Глава 17. Удаленный доступ

Решение
Это можно сделать несколькими способами. Мы рассмотрим два из них: Cygwin
и PuTTY.
В разделе 16.12 подробно описан процесс установки и запуска пакета Cygwin,
создающего на компьютере Windows Linux-среду. Вы сможете запустить OpenSSH
из Windows точно так же, как в системе Linux (как в качестве сервера, так и в ка-
честве клиента). Более того, возможен даже запуск сеанса X через SSH.
PuTTY — бесплатный клиент SSH для Windows. Программа не содержит сер-
верный компонент. Работать с PuTTY предельно просто — загрузите и установи-
те программу, запустите ее двойным щелчком, введите имя хоста, к которому нуж-
но подключиться, и щелкните на кнопке Open. На рис. 17.1 изображено главное
окно PuTTY.

fPuTTY Configuration :

Е Session Basic options 1см youi PuTTY session


j E Logging
•jpecily VO.JI corineehon by host r.srr.e or I? adiie
ф • Terminal
i ,.,rl
\ !•••• K e y b o a r d
! U Bell
! <-•• Features
ф~ Window Г Raw Г telnet Г Rlogm .'• SSH
; U Appeaiance
jd ,-з»е or delete о '.toied session -
j {••• Behaviour
i •••• Tfanslation
I- Selection
i >•••• Colours
ЁЗ Connection
Default Settings ;1оа|.:;: j
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 700
~/.ssh/id_dsa и другие закрытые ключи 400
~/.ssh/id_dsa.pub и другие открытые ключи 644
~/.ssh/ssh_config 644
~/.ssh/known_hosts 644
~/.ssh/authorized_hosts 644
Разрешения для содержимого каталога /etc/ssh:
/etc/ssh 755
/etc/ssh/sshd_config 644
/etc/ssh/ssh_config 644
/etc/ssh/ssh_host_dsa_key и другие закрытые ключи 400
/etc/ssh/ssh_host_dsa_key.pub и другие открытые ключи 644
/etc/ssh/moduli 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 и Mo-
notone все же нельзя назвать зрелыми продуктами. 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 •-> cupsd.conf
revision 1.1 (locked)
done
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 для двух программ Amavisd-
new и 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 295

# ci -I amavisd.conf
RCS/amavisd.conf.v < - - amavisd.conf
enter description, terminated with single ' . ' o r end o f f i l e :
NOTE: T h i s i s NOT t h e l o g message!
» 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: 1.1
Sticky Date: (none)
Sticky Options: -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
Почтовый сервер 1
Postfix

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-pop-
ssl 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

я 5r
+OK Password required.

+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.
338 Глава 20. Почтовый сервер Postfix

См. также
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 archive
bounces commands
confsubj.tmpl digestsubj.tmpl
342 Глава 20. Почтовый сервер Postfix

fetch.tmpl fetchsubj.tmpl
headeradd help, tmpl
i dxheader2html.tmpl i dxheaderhtml.tmpl
i dxheadertxt.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 user command
@midnight alice couriermlm daily /var/1ists/php_list
Phourly 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.securi-
tyfocus.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» в Micro-
soft 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 выполняется в стандартной последовательности configure-
make-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 •
< [ 1
Z t ' v . ~ ' * * ' • • • • 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>
Для каждого домена создается отдельный корневой каталог, в котором хра-
нятся файлы сайта. Это позволит вам легко создавать субдомены (скажем, web-
mail.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 "*h *1 *u * t \"*r\" *>s *b \"*{Referer}i\" \"«{UserAgent}i\"" combined
LogFormat "*h XI Xu * t \"Xr\"X>s *b" common
LogFormat "X{Referer}i •> XU" referer
LogFormat "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&sp-
t=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 в сочетании с Con-
tent 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 Lui guages for 'A'eb сэд*ъ
History .ver> pages .=>r>» sometimes available .n more tfian one anguage rhoosi
• . . • • • • . . ! . . . . . • , :
Г ; I

Helper Applications Languages in oroet of preference


I--Smart Browsing
H C T K r-;': r o i r . i - !!r i i j
'•Internet search
• Tabbed Browsing
English/United States [en-us]
j - иуд; p c » i j
' Downloads
> Composer
l> Privacy S< Security
6> Advanced

ГЖ 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 Mes-
sage 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, samba-
client и 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 Pro-
fessional 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:// в адресной строке, что-
бы отобразить список всех доступных рабочих групп.
398 Глава 23. Samba

Комментарий
Чтобы организовать совместный доступ к файлам для пользователей Linux, на-
стройте общие каталоги, как описано в разделе 23.2. Клиентская часть Samba мо-
жет устанавливаться отдельно для пользователей, которые хотят только исполь-
зовать общий доступ, но не собираются открывать общий доступ к файлам сами.
Если smb4k не находит рабочую группу автоматически, выполните команду
Settings • Configure • smb4k • Network • Network Search и щелкните на smbclient. По
умолчанию используется nmblookup, но smbclient обычно работает лучше. Окно
smb4k показано на рис. 23.1.

Network . ; Type : iP Address


2"Ц WORKGROUP
^•^S POWERPC 192.168 1.1
Disk Default share /.'POWERPC/My_ //STINKPAD/appforms //WINOBAG/andrew2 /M'tNDBAG/shar
Disk Default share Pictures
Disk Default share
JPictureiDisk test
Printer ALPS MD-50OD
:-drive Disk
Disk d-windows
* -
Disk Printer Drivers
if: «STINKPAD 132.168.1.100 in black cox
'•-j^appforms Disk application forms
:- * WINDBAG 192.168.1.5 Ian file server Share
Disk Home Directories
Disk testtiles
Disk snared nienthinngs Snare' ,'WINOBAG/sharei
Mount Point; /hQmc/car!a/srnt]4k' i *i
LJse.r cBrla (1Q0O)
Graup: carla ( 1 0 0 0 ) •

Usage •464

T o t a l •'••'• 4 B6 GO
' Free. . . 2 C4 GS
Used ' ' 2.24 GB
Contents 11 items • (9 Directories. 2 Filssi

..Done. : — 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 Prefs | About
i Comment Mountpoint
Eh- 0 windbag
[L-l^WORKGROUP
i)-SP0WERPC celeron
stinkpadxp
i t - JJSTINKPAD
i h . l § WINDBAG anonymous Ian file server
L testifies
shared filenthinngs /horne/carla/rnnt/WINDBAG/share2/

Resource iMountpoint
//WINDBAG/shareZ /home/carl a/mnt/WINDBAG/shareZ/

0 Objects) 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 Disk testfiles
share2 Disk more testfiles
share3 Disk 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 щелкните правой кнопкой мыши на домене и выберите команду Autheni-
cation.
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.
406 Глава 23. Samba

Может быть, вы планируете когда-нибудь отказаться от 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 Estimated size: 33 MB

Standard 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 lltvwv. • . . . . - . - • • . • •
. I . . . ; . • .. . . . . :

Configure Crossover for the root user only (Select this option to upgrade this
v
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 OK

Copyright 2004, CocleWeavers, Inc. .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 - 10.255.255.255 (10/8)
172.16.0.0 - 172.31.255.255 (172.16/12)
192.168.0.0 • 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-адрес;
О зарегистрированный сервер имен;
О постоянное подключение к Интернету;
416 Глава 24. Разрешение имен

О учетная запись у поставщика, поддерживающего возможность использова-


ния собственных серверов;
О сам сервер.
Когда у вас появится все перечисленное, обращайтесь к описанию настройки
djbdns в других разделах настоящей главы.

Комментарий
Статический маршрутизируемый IP-адрес предоставляется поставщиком услуг
Интернета.
Сервер имен должен быть зарегистрирован полномочной организацией. Если
вы еще не регистрировали доменные имена, обратитесь по адресу http://icann.org/
registrars/accredited-list.html — на этой странице приводится список регистраторов
доменных имен, уполномоченных ICANN (качественного обслуживания это не
гарантирует, но по крайней мере это официальные представители). На рис. 24.1
показано, как выглядит форма регистрации.

Account Management Home > Name Server Registration Customer Support

Account Owner
Contact Information:
Name Server Registration
Caria Schroder
You may register or update a name server for domain names that you have
Tx Computing 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.

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Ч)шпе
Update Account Contact arfl usod for web nesting purposes. If you arft unsure about what <t name
Domain Tools " 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.
Advanced Domain Search
Renew Domains
Host Name: .TUXC0MPUTING.COM
Register Domains
IP Address:
Transfer Domains
Update Ndine Servers Update
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/daemon-
tools.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 " \ ' • • • • • • , . • . . : :

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
Алфавитный указатель

А Core Development Tools, 67


addgroup, команда, 111, 122 Courier-IMAP, 323
adduser, команда, 111, 114 cron и crontab, файлы, 109
AGP (Accelerated Graphics Port), 242 CrossOver Office, 406
amavisd-new, 351 CUPS, 27, 230
amavisd.conf, файл, 351 диагностика, 240
Apache, 356 драйверы принтеров, 230
Apache Toolbox, 361 сетевые принтеры, 231
Basic и Digest, 369 фильтры, 230
VirtualHost, директивы, 365 CVS, 288
добавление модулей, 360 checkout, команда, 297
документация, 356 update, команда, 298
журналы обращений, 377 песочница, 297
страницы ошибок, 372 репозитарии, 289
установка, 358 Cygwin, 286
хостинг, варианты, 357 Cyrus-SASL, установка, 329
apachectl, 359 D
apt-cdrom, команда, 51
apt-get, команда, 49 daemontools, 417
AuthName, директива, 369 Debian, 49
Automachron, 312 загрузочные диски, 174
awk, сортировка, 111 инициализация, 98
обновление пакетов, 55
В пакеты, 49
Bash, приглашение, 284 поиск установленных программ, 58
BitKeeper, 288 разрешение конфликтов, 61
bunzip2, 67 уровни выполнения, 98
DHCP, протокол, 409
С dig, команда, 314
cat, команда, 188 djbdns, 409
CD-DA, формат, 191 dmesg, 74
CD-R, CD-RW и CD-ROM, стандарты, 177 DNS, 409
CD/DVD, запись, 176 авторитетные серверы, 410
cdrecord, команда, 179 корневые серверы, 410
Checklnstall, утилита, 54, 70 терминология, 410
checkout, команда, 297 DNSRBL, списки, 348
chfn, команда, 115 dpkg, команда, 49
chgrp, команда, 139 DRI243
chkconfig, утилита, 104 DSO.358
chmod, команда, 139
chown, команда, 139
CIFS/SMB, протоколы, 379 e2fsprogs, 141
Clam Anti-Virus, программа, 351 edquota, команда, 134
col, команда, 28 egrep, команда, 23
Content Negotiation, 372 El Tori to, 177
430 Алфавитный указатель

Emacs, 79
Ext2, файловая система, 140 LILO, 193
Ext3, файловая система, 141 альтернативная загрузка, 214
F загрузка, 213
переход на GRUB, 193
famd,321 Linux
fdisk, 78 X Window System, 101
FHS, 137 перезагрузка, 107
Foomatic, 233 процесс загрузки, 97
FreshRPMs, 45 In, команда, 105
fsck, команда, 141 locate, команда, 23
fstab, файл, 151 lpr, команда, 27
lsmod, команда, 248
lspci, программа, 73
gcc, программа, 67
gdm, 101 М
GECOS, данные, 114
getty, 244 MAC, адреса, 415
Gimp-Print, 233 make, 67
grep, команда, 68 man, команда, 19
groff, команда, 24 manpath, команда, 25
groupadd, команда, 120 MBR.97, 193
groupdel, команда, 121 menuconfig, утилита, 163
growisofs, утилита, 189 mkboot, утилита, 174
grpck, команда, 123 mkdir, команда, 157
GRUB, 193 mkisofs, утилита, 181
Mondo Rescue, 253, 266
заставка, 212 Monotone, 288
защита системных файлов, 210 mount, команда, 150
меню загрузки, 204 Mozilla, 345
установка, 196 mv, команда, 159
gunzip, 67
Н N
halt, команда, 107 NetBEUI, 380
httpd.conf NetBIOS, 380
LogFormat, директивы, 367 netGo, 414
VirtualHost, директивы, 365 netsync, протокол, 289
nobody, пользователь, 112
NTFS, файловая система, 153
IANA,410 ntp, 309
ICANN, 410
ШАР, протокол, 320
ipconfig, 414 ogg-vorbis, формат, 192
Open Relay Database, 349
OpenSSH, 264
JFS, файловая система, 142
JOE, 79
Joliet, стандарт, 178 passwd, команда, 118
Pinfo, 20
К ping, 64
КЗЬ, 176 РОРЗ, почтовые серверы, 321
kdm, 101 Postfix, 320
kerneld, 171 Cyrus-SASL, установка, 329
keychain, 282 SpamAssassin, 354
Knoppix, 210 аутентификация, 329
загрузка, 219 журналы, 346
установка на жесткий диск, 228 poweroff, команда, 108
установка программ, 227 PuTTY, 286
Konqueror, 20 pwck, команда, 123
Алфавитный указатель 431

USB, устройства, 75
uscpi-tcp, 417 a
quotacheck, команда, 134
useradd, команда, 110
R userdel, команда, 117
rcsdiff, команда, 293 V
Red Hat
vi,79
загрузочные диски, 174
Vim, 79, 87
инициализация, 98
уровни выполнения, 98 visudo, утилита, 132
ReiserFS, файловая система 142 W
remove, команда, 299
p
repquota, команда, 134 Webalizer, 377
RJOE, 80 Windows
Rock Ridge, стандарт, 178 OpenSSH,286
Samba, домены, 393
root, привилегии
su, 131
sudo, 132
безопасность, 343
ж
RPM, 32
зависимости, 31 X Window System, 241
обновление пакетов, 33 xconfig, утилита, 163
удаление пакетов, 34 xdm, 101 ,
установка пакетов, 32 XF86Config, файл, 245
rsync, 253 XFdrake, утилита, 245
XFree86, проект, 241
с
xinetd, службы, 104
Samba, 379 Xnest, 251
аутентификация, 385 i
версии 2.x и 3.x, 379
главный контроллер домена, 391 Yelp, 20
клиенты Linux, 397 Yum, 44
клиенты Windows, 393 обновление пакетов, 46
SASL, 322 получение информации, 47
SCSI, устройства, 75 сопровождение, 48
setgid, 145 удаление пакетов, 47
Shadow Suite, 110 установка, 44
Slack ware
инициализация, 98
уровни выполнения, 98 zcat, программа, 24
SMTP, протокол, 320 zless, команда, 24
sox, команда, 191
SpamAssassin, 354
Spamcop, 349 авторитетные серверы, 410
Spamhaus, 349 архивация и восстановление, 253
SPEWS, 349 асинхронные файловые
split, утилита, 188 системы, 152
ssh, 253 атрибуты файлов, 140
sudo, команда, 132 аутентификация
SuSE Samba, 385
... • . smtp-auth, 332
загружаемые модули ядра, 171
с ключом хоста, 275
с открытым ключом, 275
tinydns, 422
touch, команда, 157
traceroute, 64 безопасность, 110, 343
amavisd-new, 352
U Clam Anti-Virus, 351
umask, 148 LILO.216
umount, команда, 150 SSL, 369
432 Алфавитный указатель

В П
виртуальные консоли, 244 пароли, управление, 118
виртуальные хосты, 365 пользователи, управление, 110
внешняя фрагментация, 140 привязка команд, 89
внутренняя фрагментация, 140 принтеры
вредоносные программы, 343 диагностика, 240
установка, 232
процесс загрузки, 97
группы, ПО р
д г
разделы, 193
двоичные драйверы, 73 fdisk, создание, 159
дисковые квоты, 134 разрешение имен, 409
документация, 19 разрешения, 140
Ж редактор. См. AppBrowser
жесткие ограничения, 134 С
жесткие ссылки, 140 серверы времени, 309
журнальные файловые системы, 141 системы управления
3 версиями, 288
службы
зависимости, 31 запуск и остановка, 105
загрузчики системные, 193 приоритет, 103
закрытые ключи, 274 стримеры, 253
заплатки ядра, установка, 171 Т
К
текстовые редакторы, 79
каталоги, 157
компиляция программ, 54
конфигурационные файлы уровни выполнения, 98
.config, 164 учетные записи, блокировка, 117
.cvsrc, 302
.joerc, 82
.vimrc, 88 файловые системы, 137
amavisd.conf, 351 Ext3, 141
bashrc, 284 JFS, 142
ntp.conf, 313 асинхронные, 141
rsyncd.conf, 257 внешняя фрагментация, 140
XF86Config, 246 внутренняя фрагментация, 140
кэширующие серверы, 410 логические блоки, 140
метаданные, 141
Л
логические блоки, 140
логические тома, 140 цепная загрузка, 193
М Э
метаданные, 141 экстенты, 140
мягкие ограничения, 134 эмблемы, 376
мягкие ссылки, 140
ядро, 162
общий доступ к файлам xconfig, 163
в Windows, 381 модификация, 162
протоколы, 380 настройка, 163
открытые ключи, 274

You might also like